Revert "Put static local variables of inline functions in the function comdat."
authorRafael Espindola <rafael.espindola@gmail.com>
Wed, 17 Dec 2014 23:49:22 +0000 (23:49 +0000)
committerRafael Espindola <rafael.espindola@gmail.com>
Wed, 17 Dec 2014 23:49:22 +0000 (23:49 +0000)
This reverts commit r224369.

Thanks to Reid Kleckner for pointing out that we need a bigger gun to fix this
case.

llvm-svn: 224475

clang/lib/CodeGen/ItaniumCXXABI.cpp
clang/test/CodeGenCXX/static-init.cpp

index 8d74faf..fd299d1 100644 (file)
@@ -1711,10 +1711,8 @@ void ItaniumCXXABI::EmitGuardedInit(CodeGenFunction &CGF,
 
     // The ABI says: It is suggested that it be emitted in the same COMDAT group
     // as the associated data object
-    if (var->isWeakForLinker() && CGM.supportsCOMDAT()) {
-      StringRef ComdatName =
-        D.isLocalVarDecl() ? CGF.CurFn->getName() : var->getName();
-      llvm::Comdat *C = CGM.getModule().getOrInsertComdat(ComdatName);
+    if (!D.isLocalVarDecl() && var->isWeakForLinker() && CGM.supportsCOMDAT()) {
+      llvm::Comdat *C = CGM.getModule().getOrInsertComdat(var->getName());
       guard->setComdat(C);
       var->setComdat(C);
       CGF.CurFn->setComdat(C);
index 262d750..a9debe3 100644 (file)
@@ -7,8 +7,10 @@
 // CHECK: @_ZZN5test31BC1EvE1u = internal global { i8, [3 x i8] } { i8 97, [3 x i8] undef }, align 4
 // CHECK: @_ZZN5test1L6getvarEiE3var = internal constant [4 x i32] [i32 1, i32 0, i32 2, i32 4], align 16
 
-// CHECK: @_ZZ2h2vE1i = linkonce_odr global i32 0, comdat $_Z2h2v
-// CHECK: @_ZGVZ2h2vE1i = linkonce_odr global i64 0, comdat $_Z2h2v
+// CHECK: @_ZZ2h2vE1i = linkonce_odr global i32 0
+// CHECK-NOT: comdat
+// CHECK: @_ZGVZ2h2vE1i = linkonce_odr global i64 0
+// CHECK-NOT: comdat
 
 struct A {
   A();
@@ -35,7 +37,8 @@ void h() {
   static const int i = a();
 }
 
-// CHECK: define linkonce_odr void @_Z2h2v() {{.*}} comdat $_Z2h2v
+// CHECK: define linkonce_odr void @_Z2h2v()
+// CHECK-NOT: comdat
 inline void h2() {
   static int i = a();
 }