diff options
-rw-r--r-- | lib/Sema/SemaDecl.cpp | 4 | ||||
-rw-r--r-- | test/SemaCXX/linkage2.cpp | 8 |
2 files changed, 10 insertions, 2 deletions
diff --git a/lib/Sema/SemaDecl.cpp b/lib/Sema/SemaDecl.cpp index 42d7d2bdf5..a25204d808 100644 --- a/lib/Sema/SemaDecl.cpp +++ b/lib/Sema/SemaDecl.cpp @@ -2929,8 +2929,8 @@ void Sema::MergeVarDecl(VarDecl *New, LookupResult &Previous, Diag(Old->getLocation(), diag::note_previous_definition); return New->setInvalidDecl(); } - if (Old->hasExternalStorage() && - New->isLocalVarDecl() && !New->hasLinkage()) { + if (Old->hasLinkage() && New->isLocalVarDecl() && + !New->hasExternalStorage()) { Diag(New->getLocation(), diag::err_non_extern_extern) << New->getDeclName(); Diag(Old->getLocation(), diag::note_previous_definition); return New->setInvalidDecl(); diff --git a/test/SemaCXX/linkage2.cpp b/test/SemaCXX/linkage2.cpp index c2dbf1e308..94ac25c99d 100644 --- a/test/SemaCXX/linkage2.cpp +++ b/test/SemaCXX/linkage2.cpp @@ -126,3 +126,11 @@ extern "C" { void __attribute__((overloadable)) test11_g(double); } } + +namespace test12 { + const int n = 0; + extern const int n; + void f() { + extern const int n; + } +} |