From: Volker Reichelt Date: Wed, 31 Aug 2005 10:16:04 +0000 (+0000) Subject: re PR c++/23586 (Bad diagnostic for invalid namespace-name) X-Git-Tag: releases/gcc-3.4.5~230 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=e1a38931d0f2035fd9cc7e066a9f81423651fe76;p=thirdparty%2Fgcc.git re PR c++/23586 (Bad diagnostic for invalid namespace-name) PR c++/23586 * parser.c (cp_parser_namespace_name): Move diagnostic for invalid namespace-name to here from ... * name-lookup.c (do_namespace_alias): ... here and ... (do_using_directive): ... here. Remove dead code. From-SVN: r103666 --- diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 82431b4a0a76..837e08849394 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,11 @@ +2005-08-31 Volker Reichelt + + PR c++/23586 + * parser.c (cp_parser_namespace_name): Move diagnostic for + invalid namespace-name to here from ... + * name-lookup.c (do_namespace_alias): ... here and ... + (do_using_directive): ... here. Remove dead code. + 2005-08-31 Volker Reichelt PR c++/23639 diff --git a/gcc/cp/name-lookup.c b/gcc/cp/name-lookup.c index 3e79d3e568eb..dab2b5787750 100644 --- a/gcc/cp/name-lookup.c +++ b/gcc/cp/name-lookup.c @@ -3199,12 +3199,10 @@ namespace_ancestor (tree ns1, tree ns2) void do_namespace_alias (tree alias, tree namespace) { - if (TREE_CODE (namespace) != NAMESPACE_DECL) - { - /* The parser did not find it, so it's not there. */ - error ("unknown namespace `%D'", namespace); - return; - } + if (namespace == error_mark_node) + return; + + my_friendly_assert (TREE_CODE (namespace) == NAMESPACE_DECL, 20050830); namespace = ORIGINAL_NAMESPACE (namespace); @@ -3345,26 +3343,15 @@ do_toplevel_using_decl (tree decl, tree scope, tree name) void do_using_directive (tree namespace) { + if (namespace == error_mark_node) + return; + + my_friendly_assert (TREE_CODE (namespace) == NAMESPACE_DECL, 20050830); + if (building_stmt_tree ()) add_stmt (build_stmt (USING_STMT, namespace)); - - /* using namespace A::B::C; */ - if (TREE_CODE (namespace) == SCOPE_REF) - namespace = TREE_OPERAND (namespace, 1); - if (TREE_CODE (namespace) == IDENTIFIER_NODE) - { - /* Lookup in lexer did not find a namespace. */ - if (!processing_template_decl) - error ("namespace `%T' undeclared", namespace); - return; - } - if (TREE_CODE (namespace) != NAMESPACE_DECL) - { - if (!processing_template_decl) - error ("`%T' is not a namespace", namespace); - return; - } namespace = ORIGINAL_NAMESPACE (namespace); + if (!toplevel_bindings_p ()) push_using_directive (namespace); else diff --git a/gcc/cp/parser.c b/gcc/cp/parser.c index c59d40992b37..332cc9b0d099 100644 --- a/gcc/cp/parser.c +++ b/gcc/cp/parser.c @@ -9532,6 +9532,9 @@ cp_parser_namespace_name (cp_parser* parser) if (namespace_decl == error_mark_node || TREE_CODE (namespace_decl) != NAMESPACE_DECL) { + if (!cp_parser_parsing_tentatively (parser) + || cp_parser_committed_to_tentative_parse (parser)) + error ("`%D' is not a namespace-name", identifier); cp_parser_error (parser, "expected namespace-name"); namespace_decl = error_mark_node; }