]> granicus.if.org Git - clang/commitdiff
Compute the visibility of static local variables consistently. Fixes PR16208.
authorEli Friedman <eli.friedman@gmail.com>
Mon, 17 Jun 2013 21:51:45 +0000 (21:51 +0000)
committerEli Friedman <eli.friedman@gmail.com>
Mon, 17 Jun 2013 21:51:45 +0000 (21:51 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@184137 91177308-0d34-0410-b5e6-96231b3b80d8

lib/CodeGen/CGDecl.cpp
test/CodeGenCXX/visibility.cpp

index 614eaab3f373e631af589ca943116ca2619fb606..429d2c8ccac17a33d185828da1f19680c7a6f777 100644 (file)
@@ -218,8 +218,7 @@ CodeGenFunction::CreateStaticVarDecl(const VarDecl &D,
                              llvm::GlobalVariable::NotThreadLocal,
                              AddrSpace);
   GV->setAlignment(getContext().getDeclAlign(&D).getQuantity());
-  if (Linkage != llvm::GlobalValue::InternalLinkage)
-    GV->setVisibility(CurFn->getVisibility());
+  CGM.setGlobalVisibility(GV, &D);
 
   if (D.getTLSKind())
     CGM.setTLSMode(GV, D);
index 87add446ba7b998030e252fca124f4868b355196..c5c47abd2b9f40583df8a4131875f4a72ecf66f6 100644 (file)
@@ -139,6 +139,10 @@ namespace test27 {
 // CHECK: @_ZGVZN6Test193fooIiEEvvE1a = linkonce_odr global i64
 // CHECK-HIDDEN: @_ZZN6Test193fooIiEEvvE1a = linkonce_odr hidden global
 // CHECK-HIDDEN: @_ZGVZN6Test193fooIiEEvvE1a = linkonce_odr hidden global i64
+// CHECK: @_ZZN6test681fC1EvE4test = linkonce_odr global
+// CHECK: @_ZGVZN6test681fC1EvE4test = linkonce_odr global
+// CHECK-HIDDEN: @_ZZN6test681fC1EvE4test = linkonce_odr hidden global
+// CHECK-HIDDEN: @_ZGVZN6test681fC1EvE4test = linkonce_odr hidden global
 // CHECK-HIDDEN: @_ZTVN6Test161AIcEE = external unnamed_addr constant
 // CHECK-HIDDEN: @_ZTTN6Test161AIcEE = external unnamed_addr constant
 // CHECK: @_ZTVN5Test63fooE = linkonce_odr hidden unnamed_addr constant 
@@ -1277,3 +1281,17 @@ namespace test67 {
   // CHECK: define weak_odr void @_ZN6test673barINS_3fooEE3zedEv
   // CHECK-HIDDEN: define weak_odr void @_ZN6test673barINS_3fooEE3zedEv
 }
+
+namespace test68 {
+  class A { public: ~A(); };
+  class f {
+  public:
+    f() {
+      static A test;
+    }
+  };
+  void g() {
+    f a;
+  }
+  // Check lines at top of file.
+}