Test and document a difference from gcc in the handling of visibility
authorRafael Espindola <rafael.espindola@gmail.com>
Mon, 21 May 2012 14:22:37 +0000 (14:22 +0000)
committerRafael Espindola <rafael.espindola@gmail.com>
Mon, 21 May 2012 14:22:37 +0000 (14:22 +0000)
attributes.

llvm-svn: 157186

clang/test/CodeGenCXX/visibility.cpp

index be8e199..568a285 100644 (file)
@@ -66,6 +66,19 @@ namespace test40 {
   // CHECK-HIDDEN: _ZN6test403fooIiE3barE = weak_odr global
 }
 
+namespace test41 {
+  // Unlike gcc we propagate the information that foo not only is hidden, but
+  // has been explicitly marked as so. This lets us produce a hidden undefined
+  // reference to bar.
+  struct __attribute__((visibility("hidden"))) foo {};
+  extern foo bar;
+  foo *zed() {
+    return &bar;
+  }
+  // CHECK: @_ZN6test413barE = external hidden global
+  // CHECK-HIDDEN: @_ZN6test413barE = external hidden global
+}
+
 // CHECK: @_ZN5Test425VariableInHiddenNamespaceE = hidden global i32 10
 // CHECK: @_ZN5Test71aE = hidden global
 // CHECK: @_ZN5Test71bE = global