diff options
author | Volker Reichelt <reichelt@igpm.rwth-aachen.de> | 2005-08-31 10:32:54 +0000 |
---|---|---|
committer | Volker Reichelt <reichelt@gcc.gnu.org> | 2005-08-31 10:32:54 +0000 |
commit | ef07d61bcbbfd3947beb3f66b2c2468a5a701722 (patch) | |
tree | d164db8a50a33031569262b519135bb099a64c6a /gcc | |
parent | 1e1b4b377ca66667f52b9f6ea0056c673136df90 (diff) | |
download | gcc-ef07d61bcbbfd3947beb3f66b2c2468a5a701722.zip gcc-ef07d61bcbbfd3947beb3f66b2c2468a5a701722.tar.gz gcc-ef07d61bcbbfd3947beb3f66b2c2468a5a701722.tar.bz2 |
re PR c++/13377 (unexpected behavior of namespace usage directive)
PR c++/13377
* parser.c (cp_parser_lookup_name): Pass LOOKUP_COMPLAIN to
lookup_name_real on final parse.
* g++.dg/lookup/ambig4.C: New test.
* g++.dg/lookup/ambig5.C: New test.
* g++.dg/tc1/dr101.C: Adjust error markers.
From-SVN: r103667
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/cp/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/cp/parser.c | 10 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/lookup/ambig4.C | 14 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/lookup/ambig5.C | 13 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/tc1/dr101.C | 4 |
6 files changed, 48 insertions, 6 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index cc6a969..aa8ce89 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,5 +1,11 @@ 2005-08-31 Volker Reichelt <reichelt@igpm.rwth-aachen.de> + PR c++/13377 + * parser.c (cp_parser_lookup_name): Pass LOOKUP_COMPLAIN to + lookup_name_real on final parse. + +2005-08-31 Volker Reichelt <reichelt@igpm.rwth-aachen.de> + PR c++/23639 * semantics.c (qualified_name_lookup_error): Do not complain again on invalid scope. diff --git a/gcc/cp/parser.c b/gcc/cp/parser.c index bebdfcb..f6b5381 100644 --- a/gcc/cp/parser.c +++ b/gcc/cp/parser.c @@ -14464,9 +14464,13 @@ cp_parser_lookup_name (cp_parser *parser, tree name, bool check_dependency, bool *ambiguous_p) { + int flags = 0; tree decl; tree object_type = parser->context->object_type; + if (!cp_parser_uncommitted_to_tentative_parse_p (parser)) + flags |= LOOKUP_COMPLAIN; + /* Assume that the lookup will be unambiguous. */ if (ambiguous_p) *ambiguous_p = false; @@ -14599,8 +14603,7 @@ cp_parser_lookup_name (cp_parser *parser, tree name, /* Look it up in the enclosing context, too. */ decl = lookup_name_real (name, tag_type != none_type, /*nonclass=*/0, - /*block_p=*/true, is_namespace, - /*flags=*/0); + /*block_p=*/true, is_namespace, flags); parser->object_scope = object_type; parser->qualifying_scope = NULL_TREE; if (object_decl) @@ -14610,8 +14613,7 @@ cp_parser_lookup_name (cp_parser *parser, tree name, { decl = lookup_name_real (name, tag_type != none_type, /*nonclass=*/0, - /*block_p=*/true, is_namespace, - /*flags=*/0); + /*block_p=*/true, is_namespace, flags); parser->qualifying_scope = NULL_TREE; parser->object_scope = NULL_TREE; } diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index e457ae4..5fbdb9e 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,5 +1,12 @@ 2005-08-31 Volker Reichelt <reichelt@igpm.rwth-aachen.de> + PR c++/13377 + * g++.dg/lookup/ambig4.C: New test. + * g++.dg/lookup/ambig5.C: New test. + * g++.dg/tc1/dr101.C: Adjust error markers. + +2005-08-31 Volker Reichelt <reichelt@igpm.rwth-aachen.de> + PR c++/23639 * g++.dg/template/ttp5.C: Adjust error markers. diff --git a/gcc/testsuite/g++.dg/lookup/ambig4.C b/gcc/testsuite/g++.dg/lookup/ambig4.C new file mode 100644 index 0000000..ab1a145 --- /dev/null +++ b/gcc/testsuite/g++.dg/lookup/ambig4.C @@ -0,0 +1,14 @@ +// PR c++/13377 +// Origin: Volker Reichelt <reichelt@igpm.rwth-aachen.de> +// { dg-do compile } + +namespace N +{ + int i; // { dg-error "declared" } +} + +int i; // { dg-error "declared" } + +using namespace N; + +void foo() { i; } // { dg-error "in this scope|ambiguous" } diff --git a/gcc/testsuite/g++.dg/lookup/ambig5.C b/gcc/testsuite/g++.dg/lookup/ambig5.C new file mode 100644 index 0000000..8f74efc --- /dev/null +++ b/gcc/testsuite/g++.dg/lookup/ambig5.C @@ -0,0 +1,13 @@ +// PR c++/13377 +// Origin: Boris Kolpackov <boris@kolpackov.net> +// { dg-do compile } + +namespace N +{ + namespace M {} // { dg-error "declared" } +} + +namespace M {} // { dg-error "declared" } + +using namespace N; +using namespace M; // { dg-error "namespace-name|ambiguous" } diff --git a/gcc/testsuite/g++.dg/tc1/dr101.C b/gcc/testsuite/g++.dg/tc1/dr101.C index ede2215..8d9cab5 100644 --- a/gcc/testsuite/g++.dg/tc1/dr101.C +++ b/gcc/testsuite/g++.dg/tc1/dr101.C @@ -17,10 +17,10 @@ namespace Test1 { namespace Test2 { - typedef unsigned int X; + typedef unsigned int X; // { dg-bogus "declared" "" { xfail *-*-* } } extern "C" int f2(); namespace N { - typedef unsigned int X; + typedef unsigned int X; // { dg-bogus "declared" "" { xfail *-*-* } } extern "C" int f2(); } using namespace N; |