From: Rafael Espindola Date: Wed, 17 Dec 2014 23:49:22 +0000 (+0000) Subject: Revert "Put static local variables of inline functions in the function comdat." X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=d1cdcb237713946e964c8de18759752697494227;p=platform%2Fupstream%2Fllvm.git Revert "Put static local variables of inline functions in the function comdat." This reverts commit r224369. Thanks to Reid Kleckner for pointing out that we need a bigger gun to fix this case. llvm-svn: 224475 --- diff --git a/clang/lib/CodeGen/ItaniumCXXABI.cpp b/clang/lib/CodeGen/ItaniumCXXABI.cpp index 8d74faf..fd299d1 100644 --- a/clang/lib/CodeGen/ItaniumCXXABI.cpp +++ b/clang/lib/CodeGen/ItaniumCXXABI.cpp @@ -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); diff --git a/clang/test/CodeGenCXX/static-init.cpp b/clang/test/CodeGenCXX/static-init.cpp index 262d750..a9debe3 100644 --- a/clang/test/CodeGenCXX/static-init.cpp +++ b/clang/test/CodeGenCXX/static-init.cpp @@ -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(); }