From 02d65ee373feb1cb029185aa0de04d0c214eda3d Mon Sep 17 00:00:00 2001 From: Richard Smith Date: Tue, 15 Jan 2013 07:58:29 +0000 Subject: [PATCH] Don't crash when binding a reference to a temporary pointer created from resolving an overloaded function reference within an initializer list. Previously we would try to resolve the overloaded function reference without first stripping off the InitListExpr wrapper. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@172517 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Sema/SemaInit.cpp | 4 ++++ test/SemaCXX/cxx0x-initializer-references.cpp | 7 +++++++ 2 files changed, 11 insertions(+) diff --git a/lib/Sema/SemaInit.cpp b/lib/Sema/SemaInit.cpp index 94dd2aa45c..26bb6efb8e 100644 --- a/lib/Sema/SemaInit.cpp +++ b/lib/Sema/SemaInit.cpp @@ -3024,6 +3024,10 @@ static void TryReferenceListInitialization(Sema &S, Sequence.RewrapReferenceInitList(cv1T1, InitList); return; } + + // Update the initializer if we've resolved an overloaded function. + if (Sequence.step_begin() != Sequence.step_end()) + Sequence.RewrapReferenceInitList(cv1T1, InitList); } // Not reference-related. Create a temporary and bind to that. diff --git a/test/SemaCXX/cxx0x-initializer-references.cpp b/test/SemaCXX/cxx0x-initializer-references.cpp index c4e9c907a3..283c32ac2e 100644 --- a/test/SemaCXX/cxx0x-initializer-references.cpp +++ b/test/SemaCXX/cxx0x-initializer-references.cpp @@ -90,3 +90,10 @@ namespace PR12660 { const int &i { 1 }; struct S { S(int); } const &s { 2 }; } + +namespace b7891773 { + typedef void (*ptr)(); + template void f(); + int g(const ptr &); + int k = g({ f }); +} -- 2.50.1