diff --git a/lib/Sema/SemaLambda.cpp b/lib/Sema/SemaLambda.cpp index f28ea0a09536da33f754e00eeadbf72583ecd216..469756cf4d9aa294326f7aed7da1168fa036af36 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 0bd5ad2a02ca962806d005811aa60dc74d335937..a9c3ace8a63ad7cac9fd03628b516925907fe05d 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<typename T> int accept_lambda(T); @@ -119,6 +120,9 @@ T StaticMembers<T>::y = []{return 3;}(); template<typename T> T StaticMembers<T>::z = accept_lambda([]{return 4;}); +template<typename T> +int (*StaticMembers<T>::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<float>::y; // CHECK: declare i32 @_Z13accept_lambdaIN13StaticMembersIfE1zMUlvE_EEiT_() template float StaticMembers<float>::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<float>::f)(); + +// CHECK: define internal void @__cxx_global_var_init4 // CHECK: call i32 @"_ZNK13StaticMembersIdE3$_2clEv" // CHECK: define internal i32 @"_ZNK13StaticMembersIdE3$_2clEv" // CHECK: ret i32 42