From: Douglas Gregor Date: Mon, 23 Mar 2009 16:17:01 +0000 (+0000) Subject: Thanks to Eli for pointing out my misreading of 6.2.2p5 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=38179b29df101e3f55dbdff4d15d4d55cd82e2bd;p=clang Thanks to Eli for pointing out my misreading of 6.2.2p5 git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@67530 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Sema/SemaDecl.cpp b/lib/Sema/SemaDecl.cpp index 255fd6c5ba..62b9bff3de 100644 --- a/lib/Sema/SemaDecl.cpp +++ b/lib/Sema/SemaDecl.cpp @@ -841,8 +841,7 @@ bool Sema::MergeVarDecl(VarDecl *New, Decl *OldD) { // the prior declaration. If no prior declaration is visible, or // if the prior declaration specifies no linkage, then the // identifier has external linkage. - if ((New->hasExternalStorage() || New->getStorageClass() == VarDecl::None) && - Old->hasLinkage()) + if (New->hasExternalStorage() && Old->hasLinkage()) /* Okay */; else if (New->getStorageClass() != VarDecl::Static && Old->getStorageClass() == VarDecl::Static) { diff --git a/test/Sema/tentative-decls.c b/test/Sema/tentative-decls.c index fc0d50086e..ea8d622551 100644 --- a/test/Sema/tentative-decls.c +++ b/test/Sema/tentative-decls.c @@ -27,7 +27,10 @@ extern int i1; // expected-note {{previous definition is here}} static int i1; // expected-error{{static declaration of 'i1' follows non-static declaration}} static int i2 = 5; // expected-note 1 {{previous definition is here}} -int i2 = 3; // expected-error{{redefinition of 'i2'}} +int i2 = 3; // expected-error{{non-static declaration of 'i2' follows static declaration}} + +static int i3 = 5; +extern int i3; __private_extern__ int pExtern; int pExtern = 0;