diff options
author | Mark Mitchell <mark@codesourcery.com> | 2004-08-02 18:49:07 +0000 |
---|---|---|
committer | Mark Mitchell <mmitchel@gcc.gnu.org> | 2004-08-02 18:49:07 +0000 |
commit | 7756db03751b73bee03c3a6cd9a61a30aea237c9 (patch) | |
tree | 7c30c43cf161e0e414cbadd2120475d775c23854 | |
parent | 6ed7c4d85733180e7cfdaa2ea791e3520550ac70 (diff) | |
download | gcc-7756db03751b73bee03c3a6cd9a61a30aea237c9.zip gcc-7756db03751b73bee03c3a6cd9a61a30aea237c9.tar.gz gcc-7756db03751b73bee03c3a6cd9a61a30aea237c9.tar.bz2 |
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
-rw-r--r-- | gcc/cp/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/cp/name-lookup.c | 20 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 3 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/lookup/using12.C | 4 |
4 files changed, 23 insertions, 9 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 81a819a..d87b4827 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -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 diff --git a/gcc/cp/name-lookup.c b/gcc/cp/name-lookup.c index c445412..2859d80 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 6a1dbc6..4ae35e2 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -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. diff --git a/gcc/testsuite/g++.dg/lookup/using12.C b/gcc/testsuite/g++.dg/lookup/using12.C new file mode 100644 index 0000000..03038558 --- /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" } |