summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRafael Espindola <rafael.espindola@gmail.com>2013-03-07 01:42:44 +0000
committerRafael Espindola <rafael.espindola@gmail.com>2013-03-07 01:42:44 +0000
commit8f326a5a395a3982cd9a1dcb44e4180c2ff06fbb (patch)
tree46ff6d24199eb308e803b85d17545856b585b2f7
parent1e4272085d666ac02affbbd70d621fe386ab66b3 (diff)
downloadbcm5719-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.h7
-rw-r--r--clang/lib/AST/Decl.cpp8
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)
OpenPOWER on IntegriCloud