From 541b38be7bf3afded3269a33586418254d82d7b3 Mon Sep 17 00:00:00 2001 From: Richard Smith Date: Fri, 20 Sep 2013 01:15:31 +0000 Subject: Switch the semantic DeclContext for a block-scope declaration of a function or variable from being the function to being the enclosing namespace scope (in C++) or the TU (in C). This allows us to fix a selection of related issues where we would build incorrect redeclaration chains for such declarations, and fail to notice type mismatches. Such declarations are put into a new IdentifierNamespace, IDNS_LocalExtern, which is only found when searching scopes, and not found when searching DeclContexts. Such a declaration is only made visible in its DeclContext if there are no non-LocalExtern declarations. llvm-svn: 191064 --- clang/test/SemaCXX/function-redecl.cpp | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) (limited to 'clang/test/SemaCXX/function-redecl.cpp') diff --git a/clang/test/SemaCXX/function-redecl.cpp b/clang/test/SemaCXX/function-redecl.cpp index deb8e9d37fd..2bc0d90cd62 100644 --- a/clang/test/SemaCXX/function-redecl.cpp +++ b/clang/test/SemaCXX/function-redecl.cpp @@ -4,17 +4,14 @@ int foo(int); namespace N { void f1() { void foo(int); // okay - void bar(int); + void bar(int); // expected-note 2{{previous declaration is here}} } void foo(int); // expected-note 2{{previous declaration is here}} void f2() { int foo(int); // expected-error {{functions that differ only in their return type cannot be overloaded}} - // FIXME: We should be able to diagnose the conflict between this - // declaration of 'bar' and the previous one, even though they come - // from different lexical scopes. - int bar(int); // expected-note {{previous declaration is here}} + int bar(int); // expected-error {{functions that differ only in their return type cannot be overloaded}} int baz(int); // expected-note {{previous declaration is here}} { -- cgit v1.2.3