From 7756db03751b73bee03c3a6cd9a61a30aea237c9 Mon Sep 17 00:00:00 2001 From: Mark Mitchell Date: Mon, 2 Aug 2004 18:49:07 +0000 Subject: [PATCH] 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 --- gcc/cp/ChangeLog | 5 +++++ gcc/cp/name-lookup.c | 20 +++++++++++--------- gcc/testsuite/ChangeLog | 3 +++ gcc/testsuite/g++.dg/lookup/using12.C | 4 ++++ 4 files changed, 23 insertions(+), 9 deletions(-) create mode 100644 gcc/testsuite/g++.dg/lookup/using12.C diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 81a819a7931..d87b4827aee 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,8 @@ +2004-08-02 Mark Mitchell + + PR c++/16707 + * name-lookup.c (validate_nonmember_using_decl): Robustify. + 2004-08-01 Mark Mitchell PR c++/16224 diff --git a/gcc/cp/name-lookup.c b/gcc/cp/name-lookup.c index c44541285fb..2859d8035b9 100644 --- a/gcc/cp/name-lookup.c +++ b/gcc/cp/name-lookup.c @@ -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); } diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 6a1dbc6d147..4ae35e2c75d 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,5 +1,8 @@ 2004-08-02 Mark Mitchell + PR c++/16707 + * g++.dg/lookup/using12.C: New test. + * g++.dg/init/null1.C: Fix PR number. * g++.dg/parse/namespace10.C: Likewise. diff --git a/gcc/testsuite/g++.dg/lookup/using12.C b/gcc/testsuite/g++.dg/lookup/using12.C new file mode 100644 index 00000000000..030385581a5 --- /dev/null +++ b/gcc/testsuite/g++.dg/lookup/using12.C @@ -0,0 +1,4 @@ +// PR c++/16707 + +int i; +using N::i; // { dg-error "declared|expected" } -- 2.30.2