]> granicus.if.org Git - clang/commitdiff
Fix a small bug in the linkage computation for the lambda conversion-to-function...
authorEli Friedman <eli.friedman@gmail.com>
Thu, 13 Jun 2013 19:39:48 +0000 (19:39 +0000)
committerEli Friedman <eli.friedman@gmail.com>
Thu, 13 Jun 2013 19:39:48 +0000 (19:39 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@183931 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Sema/SemaLambda.cpp
test/CodeGenCXX/mangle-lambdas.cpp

index f28ea0a09536da33f754e00eeadbf72583ecd216..469756cf4d9aa294326f7aed7da1168fa036af36 100644 (file)
@@ -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);
index 0bd5ad2a02ca962806d005811aa60dc74d335937..a9c3ace8a63ad7cac9fd03628b516925907fe05d 100644 (file)
@@ -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