re PR c++/16707 (ICE with using)

PR c++/16707
	* name-lookup.c (validate_nonmember_using_decl): Robustify.

	PR c++/16707
	* g++.dg/lookup/using12.C: New test.

From-SVN: r85446
This commit is contained in:
Mark Mitchell 2004-08-02 18:49:07 +00:00 committed by Mark Mitchell
parent 6ed7c4d857
commit 7756db0375
4 changed files with 23 additions and 9 deletions

View file

@ -1,3 +1,8 @@
2004-08-02 Mark Mitchell <mark@codesourcery.com>
PR c++/16707
* name-lookup.c (validate_nonmember_using_decl): Robustify.
2004-08-01 Mark Mitchell <mark@codesourcery.com>
PR c++/16224

View file

@ -2115,6 +2115,17 @@ push_overloaded_decl (tree decl, int flags)
static tree
validate_nonmember_using_decl (tree decl, tree scope, tree name)
{
/* [namespace.udecl]
A using-declaration for a class member shall be a
member-declaration. */
if (TYPE_P (scope))
{
error ("`%T' is not a namespace", scope);
return NULL_TREE;
}
else if (scope == error_mark_node)
return NULL_TREE;
if (TREE_CODE (decl) == TEMPLATE_ID_EXPR)
{
/* 7.3.3/5
@ -2142,15 +2153,6 @@ validate_nonmember_using_decl (tree decl, tree scope, tree name)
my_friendly_assert (DECL_P (decl), 20020908);
/* [namespace.udecl]
A using-declaration for a class member shall be a
member-declaration. */
if (TYPE_P (scope))
{
error ("`%T' is not a namespace", scope);
return NULL_TREE;
}
/* Make a USING_DECL. */
return push_using_decl (scope, name);
}

View file

@ -1,5 +1,8 @@
2004-08-02 Mark Mitchell <mark@codesourcery.com>
PR c++/16707
* g++.dg/lookup/using12.C: New test.
* g++.dg/init/null1.C: Fix PR number.
* g++.dg/parse/namespace10.C: Likewise.

View file

@ -0,0 +1,4 @@
// PR c++/16707
int i;
using N::i; // { dg-error "declared|expected" }