Make sure pragmas don't attach visibility attributes to auto variables with

internal linkage.

llvm-svn: 175903
This commit is contained in:
Rafael Espindola 2013-02-22 17:59:16 +00:00
parent f005d3c1a2
commit db1a47706b
2 changed files with 19 additions and 6 deletions

View File

@ -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);

View File

@ -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