]> granicus.if.org Git - clang/commitdiff
Fix isThisDeclarationADefinition for extern following tentative.
authorRafael Espindola <rafael.espindola@gmail.com>
Mon, 17 Dec 2012 22:23:47 +0000 (22:23 +0000)
committerRafael Espindola <rafael.espindola@gmail.com>
Mon, 17 Dec 2012 22:23:47 +0000 (22:23 +0000)
An extern declaration following a tentative definition should not itself be
considered a tentative definition.
Fixes pr14614.

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

lib/AST/Decl.cpp
test/Sema/extern-redecl.c

index 538dceecd18369612fac4f3dc20e4c1eb39d2830..4e4bc0ec809587fa8734dc5fc9d4b7a402f69773 100644 (file)
@@ -1220,7 +1220,7 @@ VarDecl::DefinitionKind VarDecl::isThisDeclarationADefinition(
        getStorageClassAsWritten() == SC_PrivateExtern) {
     for (const VarDecl *PrevVar = getPreviousDecl();
          PrevVar; PrevVar = PrevVar->getPreviousDecl()) {
-      if (PrevVar->getLinkage() == InternalLinkage && PrevVar->hasInit())
+      if (PrevVar->getLinkage() == InternalLinkage)
         return DeclarationOnly;
     }
   }
index c176725df66b9516ca41996260a21ec3785e699f..ae4386eaae71594432ab745c76830d4e618d0e1d 100644 (file)
@@ -20,3 +20,5 @@ int PR10013(void) {
   return PR10013_x; // expected-warning{{incompatible pointer to integer conversion}}
 }
 
+static int test1_a[]; // expected-warning {{tentative array definition assumed to have one element}}
+extern int test1_a[];