Commit 166206ce by Volker Reichelt Committed by Volker Reichelt

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: r103643
parent 7a98d47c
2005-08-30 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
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-28 Mark Mitchell <mark@codesourcery.com> 2005-08-28 Mark Mitchell <mark@codesourcery.com>
PR c++/23099 PR c++/23099
......
...@@ -3037,12 +3037,10 @@ namespace_ancestor (tree ns1, tree ns2) ...@@ -3037,12 +3037,10 @@ namespace_ancestor (tree ns1, tree ns2)
void void
do_namespace_alias (tree alias, tree namespace) do_namespace_alias (tree alias, tree namespace)
{ {
if (TREE_CODE (namespace) != NAMESPACE_DECL) if (namespace == error_mark_node)
{ return;
/* The parser did not find it, so it's not there. */
error ("unknown namespace %qD", namespace); gcc_assert (TREE_CODE (namespace) == NAMESPACE_DECL);
return;
}
namespace = ORIGINAL_NAMESPACE (namespace); namespace = ORIGINAL_NAMESPACE (namespace);
...@@ -3191,26 +3189,15 @@ do_using_directive (tree namespace) ...@@ -3191,26 +3189,15 @@ do_using_directive (tree namespace)
{ {
tree context = NULL_TREE; tree context = NULL_TREE;
if (namespace == error_mark_node)
return;
gcc_assert (TREE_CODE (namespace) == NAMESPACE_DECL);
if (building_stmt_tree ()) if (building_stmt_tree ())
add_stmt (build_stmt (USING_STMT, namespace)); 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 %qT undeclared", namespace);
return;
}
if (TREE_CODE (namespace) != NAMESPACE_DECL)
{
if (!processing_template_decl)
error ("%qT is not a namespace", namespace);
return;
}
namespace = ORIGINAL_NAMESPACE (namespace); namespace = ORIGINAL_NAMESPACE (namespace);
if (!toplevel_bindings_p ()) if (!toplevel_bindings_p ())
{ {
push_using_directive (namespace); push_using_directive (namespace);
......
...@@ -10254,6 +10254,8 @@ cp_parser_namespace_name (cp_parser* parser) ...@@ -10254,6 +10254,8 @@ cp_parser_namespace_name (cp_parser* parser)
if (namespace_decl == error_mark_node if (namespace_decl == error_mark_node
|| TREE_CODE (namespace_decl) != NAMESPACE_DECL) || TREE_CODE (namespace_decl) != NAMESPACE_DECL)
{ {
if (!cp_parser_uncommitted_to_tentative_parse_p (parser))
error ("%qD is not a namespace-name", identifier);
cp_parser_error (parser, "expected namespace-name"); cp_parser_error (parser, "expected namespace-name");
namespace_decl = error_mark_node; namespace_decl = error_mark_node;
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment