]> granicus.if.org Git - clang/commitdiff
Add a hasExternalStorageAsWritten helper. No functionality change.
authorRafael Espindola <rafael.espindola@gmail.com>
Thu, 7 Mar 2013 01:42:44 +0000 (01:42 +0000)
committerRafael Espindola <rafael.espindola@gmail.com>
Thu, 7 Mar 2013 01:42:44 +0000 (01:42 +0000)
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.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@176606 91177308-0d34-0410-b5e6-96231b3b80d8

include/clang/AST/Decl.h
lib/AST/Decl.cpp

index 7e966a065405305217a131c2353f403089af81a2..68d7d565853def94b0efb5b50dc518aac7b00fdd 100644 (file)
@@ -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.
index b8439cae743d58eb5963b38f2c4705243110d029..257e59c23781c7f1e63fe599036b1ac5e596414b 100644 (file)
@@ -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)