+2005-08-31 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-31 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
PR c++/23639
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);
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
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;
}