summaryrefslogtreecommitdiffstats
path: root/clang/test/SemaCXX/function-redecl.cpp
diff options
context:
space:
mode:
authorRichard Smith <richard-llvm@metafoo.co.uk>2013-09-20 01:15:31 +0000
committerRichard Smith <richard-llvm@metafoo.co.uk>2013-09-20 01:15:31 +0000
commit541b38be7bf3afded3269a33586418254d82d7b3 (patch)
tree50251df12a54fbe196671445b8eee3d1a785b8cd /clang/test/SemaCXX/function-redecl.cpp
parent508939428d005dff37df7f2131aeb06ed674b719 (diff)
downloadbcm5719-llvm-541b38be7bf3afded3269a33586418254d82d7b3.tar.gz
bcm5719-llvm-541b38be7bf3afded3269a33586418254d82d7b3.zip
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
Diffstat (limited to 'clang/test/SemaCXX/function-redecl.cpp')
-rw-r--r--clang/test/SemaCXX/function-redecl.cpp7
1 files changed, 2 insertions, 5 deletions
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}}
{
OpenPOWER on IntegriCloud