From: Eli Friedman Date: Thu, 13 Jun 2013 19:39:48 +0000 (+0000) Subject: Fix a small bug in the linkage computation for the lambda conversion-to-function... X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=38fa961573efb0fb9ef53f3e8a9e730701bc9375;p=clang Fix a small bug in the linkage computation for the lambda conversion-to-function-pointer member. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@183931 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Sema/SemaLambda.cpp b/lib/Sema/SemaLambda.cpp index f28ea0a095..469756cf4d 100644 --- a/lib/Sema/SemaLambda.cpp +++ b/lib/Sema/SemaLambda.cpp @@ -834,7 +834,7 @@ static void addFunctionPointerConversion(Sema &S, ConvTy, S.Context.getTrivialTypeSourceInfo(ConvTy, Loc), - /*isInline=*/false, /*isExplicit=*/false, + /*isInline=*/true, /*isExplicit=*/false, /*isConstexpr=*/false, CallOperator->getBody()->getLocEnd()); Conversion->setAccess(AS_public); diff --git a/test/CodeGenCXX/mangle-lambdas.cpp b/test/CodeGenCXX/mangle-lambdas.cpp index 0bd5ad2a02..a9c3ace8a6 100644 --- a/test/CodeGenCXX/mangle-lambdas.cpp +++ b/test/CodeGenCXX/mangle-lambdas.cpp @@ -106,6 +106,7 @@ struct StaticMembers { static T x; static T y; static T z; + static int (*f)(); }; template int accept_lambda(T); @@ -119,6 +120,9 @@ T StaticMembers::y = []{return 3;}(); template T StaticMembers::z = accept_lambda([]{return 4;}); +template +int (*StaticMembers::f)() = []{return 5;}; + // CHECK: define internal void @__cxx_global_var_init() // CHECK: call i32 @_ZNK13StaticMembersIfE1xMUlvE_clEv // CHECK-NEXT: call i32 @_ZNK13StaticMembersIfE1xMUlvE0_clEv @@ -140,7 +144,12 @@ template float StaticMembers::y; // CHECK: declare i32 @_Z13accept_lambdaIN13StaticMembersIfE1zMUlvE_EEiT_() template float StaticMembers::z; -// CHECK: define internal void @__cxx_global_var_init3 +// CHECK: define internal void @__cxx_global_var_init3() +// CHECK: call {{.*}} @_ZNK13StaticMembersIfE1fMUlvE_cvPFivEEv +// CHECK: define linkonce_odr i32 ()* @_ZNK13StaticMembersIfE1fMUlvE_cvPFivEEv +template int (*StaticMembers::f)(); + +// CHECK: define internal void @__cxx_global_var_init4 // CHECK: call i32 @"_ZNK13StaticMembersIdE3$_2clEv" // CHECK: define internal i32 @"_ZNK13StaticMembersIdE3$_2clEv" // CHECK: ret i32 42