forked from OSchip/llvm-project
Record visibility pragmas when we see a tag declaration. We might use it
to build a type before seeing the definition. llvm-svn: 160339
This commit is contained in:
parent
23f59509a8
commit
f97c636812
clang
|
@ -8880,6 +8880,10 @@ CreateNewDecl:
|
|||
if (Attr)
|
||||
ProcessDeclAttributeList(S, New, Attr);
|
||||
|
||||
// If there's a #pragma GCC visibility in scope, set the visibility of this
|
||||
// record.
|
||||
AddPushedVisibilityAttribute(New);
|
||||
|
||||
// If we're declaring or defining a tag in function prototype scope
|
||||
// in C, note that this type can only be used within the function.
|
||||
if (Name && S->isFunctionPrototypeScope() && !getLangOpts().CPlusPlus)
|
||||
|
|
|
@ -1061,3 +1061,19 @@ namespace test57 {
|
|||
// CHECK: declare hidden void @_ZN6test573fooIiE3zedEv
|
||||
// CHECK-HIDDEN: declare hidden void @_ZN6test573fooIiE3zedEv
|
||||
}
|
||||
|
||||
namespace test58 {
|
||||
#pragma GCC visibility push(hidden)
|
||||
struct foo;
|
||||
template<typename T>
|
||||
struct __attribute__((visibility("default"))) bar {
|
||||
static void zed() {
|
||||
}
|
||||
};
|
||||
void bah() {
|
||||
bar<foo>::zed();
|
||||
}
|
||||
#pragma GCC visibility pop
|
||||
// CHECK: define linkonce_odr hidden void @_ZN6test583barINS_3fooEE3zedEv
|
||||
// CHECK-HIDDEN: define linkonce_odr hidden void @_ZN6test583barINS_3fooEE3zedEv
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue