diff options
author | Rafael Espindola <rafael.espindola@gmail.com> | 2013-02-22 17:59:16 +0000 |
---|---|---|
committer | Rafael Espindola <rafael.espindola@gmail.com> | 2013-02-22 17:59:16 +0000 |
commit | db1a47706bc4d849b5492e2beb066e538a8c4a84 (patch) | |
tree | 27c92a27221ccafa45f29efe79e18d3e759b55f4 | |
parent | f005d3c1a2a1d8c1f478d68e5024df11baa9d2be (diff) | |
download | bcm5719-llvm-db1a47706bc4d849b5492e2beb066e538a8c4a84.tar.gz bcm5719-llvm-db1a47706bc4d849b5492e2beb066e538a8c4a84.zip |
Make sure pragmas don't attach visibility attributes to auto variables with
internal linkage.
llvm-svn: 175903
-rw-r--r-- | clang/lib/Sema/SemaDecl.cpp | 13 | ||||
-rw-r--r-- | clang/test/SemaCXX/auto-pragma.cpp | 12 |
2 files changed, 19 insertions, 6 deletions
diff --git a/clang/lib/Sema/SemaDecl.cpp b/clang/lib/Sema/SemaDecl.cpp index f062c0386d1..20c1b1015e4 100644 --- a/clang/lib/Sema/SemaDecl.cpp +++ b/clang/lib/Sema/SemaDecl.cpp @@ -4908,11 +4908,6 @@ Sema::ActOnVariableDeclarator(Scope *S, Declarator &D, DeclContext *DC, !NewVD->isInvalidDecl()) RegisterLocallyScopedExternCDecl(NewVD, Previous, S); - // If there's a #pragma GCC visibility in scope, and this isn't a class - // member, set the visibility of this variable. - if (NewVD->getLinkage() == ExternalLinkage && !DC->isRecord()) - AddPushedVisibilityAttribute(NewVD); - return NewVD; } @@ -7880,10 +7875,16 @@ Sema::FinalizeDeclaration(Decl *ThisDecl) { // Note that we are no longer parsing the initializer for this declaration. ParsingInitForAutoVars.erase(ThisDecl); - const VarDecl *VD = dyn_cast_or_null<VarDecl>(ThisDecl); + VarDecl *VD = dyn_cast_or_null<VarDecl>(ThisDecl); if (!VD) return; + const DeclContext *DC = VD->getDeclContext(); + // If there's a #pragma GCC visibility in scope, and this isn't a class + // member, set the visibility of this variable. + if (VD->getLinkage() == ExternalLinkage && !DC->isRecord()) + AddPushedVisibilityAttribute(VD); + if (VD->isFileVarDecl()) MarkUnusedFileScopedDecl(VD); diff --git a/clang/test/SemaCXX/auto-pragma.cpp b/clang/test/SemaCXX/auto-pragma.cpp new file mode 100644 index 00000000000..1cd0781fe9a --- /dev/null +++ b/clang/test/SemaCXX/auto-pragma.cpp @@ -0,0 +1,12 @@ +// RUN: %clang_cc1 -fsyntax-only %s -std=c++11 -ast-dump -ast-dump-filter AutoVar | FileCheck %s + +namespace { + class foo { + }; +} + +#pragma GCC visibility push(hidden) +auto AutoVar = foo(); + +// CHECK: VarDecl {{.*}} AutoVar +// CHECK-NOT: VisibilityAttr |