From fe4ea55700c806493bebbf7bbfe07ce4b7339a3e Mon Sep 17 00:00:00 2001 From: John McCall Date: Tue, 23 Nov 2010 22:03:51 +0000 Subject: [PATCH] Redeclarations of using declarations are not okay in function scopes. Not sure what I was thinking before. Fixes PR8668. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@120063 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Sema/SemaDeclCXX.cpp | 4 ++-- .../basic.namespace/namespace.udecl/p8.cpp | 15 ++++++++++++--- 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/lib/Sema/SemaDeclCXX.cpp b/lib/Sema/SemaDeclCXX.cpp index 235b41e342..ad8b8695cc 100644 --- a/lib/Sema/SemaDeclCXX.cpp +++ b/lib/Sema/SemaDeclCXX.cpp @@ -3961,8 +3961,8 @@ bool Sema::CheckUsingDeclRedeclaration(SourceLocation UsingLoc, // repeatedly where (and only where) multiple declarations are // allowed. // - // That's in non-member contexts. - if (!CurContext->getRedeclContext()->isRecord()) + // That's in file contexts. + if (CurContext->isFileContext()) return false; NestedNameSpecifier *Qual diff --git a/test/CXX/dcl.dcl/basic.namespace/namespace.udecl/p8.cpp b/test/CXX/dcl.dcl/basic.namespace/namespace.udecl/p8.cpp index 466097171c..5ba22c8419 100644 --- a/test/CXX/dcl.dcl/basic.namespace/namespace.udecl/p8.cpp +++ b/test/CXX/dcl.dcl/basic.namespace/namespace.udecl/p8.cpp @@ -82,7 +82,7 @@ namespace test2 { template struct Derived; // expected-note {{in instantiation of template class}} } -// Redeclarations are okay in a function. +// PR8668: redeclarations are not okay in a function. namespace test3 { namespace N { int f(int); @@ -90,9 +90,18 @@ namespace test3 { } void g() { + using N::f; // expected-note {{previous using declaration}} + using N::f; // expected-error {{redeclaration of using decl}} + using N::type; // expected-note {{previous using declaration}} + using N::type; // expected-error {{redeclaration of using decl}} + } + + void h() { using N::f; - using N::f; - using N::type; using N::type; + { + using N::f; + using N::type; + } } } -- 2.40.0