diff options
author | Rafael Espindola <rafael.espindola@gmail.com> | 2013-03-07 01:42:44 +0000 |
---|---|---|
committer | Rafael Espindola <rafael.espindola@gmail.com> | 2013-03-07 01:42:44 +0000 |
commit | 8f326a5a395a3982cd9a1dcb44e4180c2ff06fbb (patch) | |
tree | 46ff6d24199eb308e803b85d17545856b585b2f7 | |
parent | 1e4272085d666ac02affbbd70d621fe386ab66b3 (diff) | |
download | bcm5719-llvm-8f326a5a395a3982cd9a1dcb44e4180c2ff06fbb.tar.gz bcm5719-llvm-8f326a5a395a3982cd9a1dcb44e4180c2ff06fbb.zip |
Add a hasExternalStorageAsWritten helper. No functionality change.
It is possible that some of the current uses of
"getStorageClassAsWritten() == SC_Extern" should use this but I don't know
enough about SC_PrivateExtern to change and test them.
llvm-svn: 176606
-rw-r--r-- | clang/include/clang/AST/Decl.h | 7 | ||||
-rw-r--r-- | clang/lib/AST/Decl.cpp | 8 |
2 files changed, 10 insertions, 5 deletions
diff --git a/clang/include/clang/AST/Decl.h b/clang/include/clang/AST/Decl.h index 7e966a06540..68d7d565853 100644 --- a/clang/include/clang/AST/Decl.h +++ b/clang/include/clang/AST/Decl.h @@ -800,6 +800,13 @@ public: getStorageClass() == SC_PrivateExtern; } + /// hasExternalStorageAsWritten - Returns true if a variable was written + /// with extern or __private_extern__ storage. + bool hasExternalStorageAsWritten() const { + return getStorageClassAsWritten() == SC_Extern || + getStorageClassAsWritten() == SC_PrivateExtern; + } + /// hasGlobalStorage - Returns true for all variables that do not /// have local storage. This includs all global variables as well /// as static variables declared within a function. diff --git a/clang/lib/AST/Decl.cpp b/clang/lib/AST/Decl.cpp index b8439cae743..257e59c2378 100644 --- a/clang/lib/AST/Decl.cpp +++ b/clang/lib/AST/Decl.cpp @@ -1049,8 +1049,7 @@ static LinkageInfo getLVForLocalDecl(const NamedDecl *D, } if (const VarDecl *Var = dyn_cast<VarDecl>(D)) { - if (Var->getStorageClassAsWritten() == SC_Extern || - Var->getStorageClassAsWritten() == SC_PrivateExtern) { + if (Var->hasExternalStorageAsWritten()) { if (Var->isInAnonymousNamespace() && !Var->getDeclContext()->isExternCContext()) return LinkageInfo::uniqueExternal(); @@ -1600,9 +1599,8 @@ VarDecl::DefinitionKind VarDecl::isThisDeclarationADefinition( // AST for 'extern "C" int foo;' is annotated with 'extern'. if (hasExternalStorage()) return DeclarationOnly; - - if (getStorageClassAsWritten() == SC_Extern || - getStorageClassAsWritten() == SC_PrivateExtern) { + + if (hasExternalStorageAsWritten()) { for (const VarDecl *PrevVar = getPreviousDecl(); PrevVar; PrevVar = PrevVar->getPreviousDecl()) { if (PrevVar->getLinkage() == InternalLinkage) |