From 7d99e989c1a20e358f472e35d615313f2fe223db Mon Sep 17 00:00:00 2001 From: Fariborz Jahanian Date: Thu, 24 Jun 2010 18:50:41 +0000 Subject: [PATCH] Fixes a regression when redeclaration of a global satic is an extern local to a function. Radar 8125274. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@106773 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Sema/SemaDecl.cpp | 3 ++- test/Sema/extern-redecl.c | 9 +++++++++ 2 files changed, 11 insertions(+), 1 deletion(-) create mode 100644 test/Sema/extern-redecl.c diff --git a/lib/Sema/SemaDecl.cpp b/lib/Sema/SemaDecl.cpp index ebfb9810d6..5c1de6aeb8 100644 --- a/lib/Sema/SemaDecl.cpp +++ b/lib/Sema/SemaDecl.cpp @@ -1456,7 +1456,8 @@ void Sema::MergeVarDecl(VarDecl *New, LookupResult &Previous) { } if (New->hasExternalStorage() && - Old->getLinkage() == InternalLinkage) + Old->getLinkage() == InternalLinkage && + New->getDeclContext() == Old->getDeclContext()) New->setStorageClass(Old->getStorageClass()); // Keep a chain of previous declarations. diff --git a/test/Sema/extern-redecl.c b/test/Sema/extern-redecl.c new file mode 100644 index 0000000000..067e3c21e4 --- /dev/null +++ b/test/Sema/extern-redecl.c @@ -0,0 +1,9 @@ +// RUN: %clang_cc1 -fsyntax-only %s + +// rdar: // 8125274 +static int a16[]; // expected-warning {{tentative array definition assumed to have one element}} + +void f16(void) { + extern int a16[]; +} + -- 2.40.0