diff --git a/clang/test/CodeGenCXX/visibility.cpp b/clang/test/CodeGenCXX/visibility.cpp index a55f0061a5305..167a13c3ecb6d 100644 --- a/clang/test/CodeGenCXX/visibility.cpp +++ b/clang/test/CodeGenCXX/visibility.cpp @@ -101,6 +101,28 @@ namespace test48 { // CHECK-HIDDEN: _ZN6test481yE = hidden global } +namespace test72 { + template + struct foo { + HIDDEN static int var1; + template HIDDEN static U var2; + }; + template template + U foo::var2; + + extern template struct DEFAULT foo; + + int use() { + foo o; + foo p; + return o.var1 + o.var2 + p.var1 + p.var2; + } + // CHECK: @_ZN6test723fooIiE4var1E = external hidden global i32 + // CHECK-NEXT: @_ZN6test723fooIiE4var2IiEE = linkonce_odr global i32 0 + // CHECK-NEXT: @_ZN6test723fooIlE4var1E = external hidden global i32 + // CHECK-NEXT: @_ZN6test723fooIlE4var2IiEE = linkonce_odr global i32 0 +} + // CHECK: @_ZN5Test425VariableInHiddenNamespaceE = hidden global i32 10 // CHECK: @_ZN5Test71aE = hidden global // CHECK: @_ZN5Test71bE = global @@ -953,7 +975,7 @@ namespace test51 { struct HIDDEN foo { }; - DEFAULT foo x, y; + DEFAULT foo x, y, z; template void DEFAULT zed() { } @@ -964,6 +986,12 @@ namespace test51 { template void HIDDEN zed<&y>(); // CHECK-LABEL: define weak_odr hidden void @_ZN6test513zedIXadL_ZNS_1yEEEEEvv( // CHECK-HIDDEN-LABEL: define weak_odr hidden void @_ZN6test513zedIXadL_ZNS_1yEEEEEvv( + + void use() { + zed<&z>(); + } + // CHECK-LABEL: define linkonce_odr hidden void @_ZN6test513zedIXadL_ZNS_1zEEEEEvv( + // CHECK-HIDDEN-LABEL: define linkonce_odr hidden void @_ZN6test513zedIXadL_ZNS_1zEEEEEvv( } namespace test52 { @@ -1349,11 +1377,16 @@ namespace test71 { int use() { foo o; - return o.zed() + o.bar(); + foo p; + return o.zed() + o.bar() + p.zed() + p.bar(); } /// FIXME: foo::bar is hidden in GCC w/ or w/o -fvisibility=hidden. // CHECK-LABEL: declare hidden noundef i32 @_ZN6test713fooIiE3zedEv( // CHECK-LABEL: define linkonce_odr noundef i32 @_ZN6test713fooIiE3barIiEET_v( + // CHECK-LABEL: define linkonce_odr hidden noundef i64 @_ZN6test713fooIlE3zedEv( + // CHECK-LABEL: define linkonce_odr noundef i32 @_ZN6test713fooIlE3barIiEET_v( // CHECK-HIDDEN-LABEL: declare hidden noundef i32 @_ZN6test713fooIiE3zedEv( // CHECK-HIDDEN-LABEL: define linkonce_odr noundef i32 @_ZN6test713fooIiE3barIiEET_v( + // CHECK-HIDDEN-LABEL: define linkonce_odr hidden noundef i64 @_ZN6test713fooIlE3zedEv( + // CHECK-HIDDEN-LABEL: define linkonce_odr hidden noundef i32 @_ZN6test713fooIlE3barIiEET_v( }