From: Steve Naroff Date: Mon, 12 May 2008 22:36:43 +0000 (+0000) Subject: Fix clang -fsyntax-only generates "redefinition" errors... X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=235549c7bda856c26cff68190860f69760fa576d;p=clang Fix clang -fsyntax-only generates "redefinition" errors when parsing AppKit that gcc does not. Teach Sema::MergeVarDecl() about __private_extern__. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@51005 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Sema/SemaDecl.cpp b/lib/Sema/SemaDecl.cpp index 933a361812..26fbafdd40 100644 --- a/lib/Sema/SemaDecl.cpp +++ b/lib/Sema/SemaDecl.cpp @@ -441,8 +441,11 @@ VarDecl *Sema::MergeVarDecl(VarDecl *New, Decl *OldD) { if (NewIsTentative || OldIsTentative) return New; } + // Handle __private_extern__ just like extern. if (Old->getStorageClass() != VarDecl::Extern && - New->getStorageClass() != VarDecl::Extern) { + Old->getStorageClass() != VarDecl::PrivateExtern && + New->getStorageClass() != VarDecl::Extern && + New->getStorageClass() != VarDecl::PrivateExtern) { Diag(New->getLocation(), diag::err_redefinition, New->getName()); Diag(Old->getLocation(), diag::err_previous_definition); } diff --git a/test/Sema/tentative-decls.c b/test/Sema/tentative-decls.c index 0c390fe414..6e79a0868f 100644 --- a/test/Sema/tentative-decls.c +++ b/test/Sema/tentative-decls.c @@ -18,6 +18,9 @@ extern int i1; // expected-error{{previous definition is here}} static int i1; // expected-error{{static declaration of 'i1' follows non-static declaration}} expected-error{{previous definition is here}} int i1 = 3; // expected-error{{non-static declaration of 'i1' follows static declaration}} +__private_extern__ int pExtern; +int pExtern = 0; + void func() { extern int i1; // expected-error{{previous definition is here}} static int i1; // expected-error{{static declaration of 'i1' follows non-static declaration}}