diff options
author | Jason Merrill <jason@redhat.com> | 2011-12-17 19:55:18 -0500 |
---|---|---|
committer | Jason Merrill <jason@gcc.gnu.org> | 2011-12-17 19:55:18 -0500 |
commit | 55f8ed96858fe0e5ccd871a49417ce92913b0987 (patch) | |
tree | 462c8cf9778eedea11d32d6e55952839482390b2 | |
parent | de4d7a7f8d08e75f7a6ac60c684b1080aea2a597 (diff) | |
download | gcc-55f8ed96858fe0e5ccd871a49417ce92913b0987.zip gcc-55f8ed96858fe0e5ccd871a49417ce92913b0987.tar.gz gcc-55f8ed96858fe0e5ccd871a49417ce92913b0987.tar.bz2 |
re PR c++/51588 ([c++0x] [4.4/4.5/4.6/4.7 Regression] ICE using an enum as base class)
PR c++/51588
* parser.c (cp_parser_ptr_operator): Reject pointer to member of enum.
From-SVN: r182452
-rw-r--r-- | gcc/cp/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/cp/parser.c | 3 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 3 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/parse/enum7.C | 9 |
4 files changed, 20 insertions, 0 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 4faf001..18f1dfd 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,8 @@ +2011-12-17 Jason Merrill <jason@redhat.com> + + PR c++/51588 + * parser.c (cp_parser_ptr_operator): Reject pointer to member of enum. + 2011-12-17 Richard Henderson <rth@redhat.com> PR bootstrap/51072 diff --git a/gcc/cp/parser.c b/gcc/cp/parser.c index ac7427e..51d04d4 100644 --- a/gcc/cp/parser.c +++ b/gcc/cp/parser.c @@ -16448,6 +16448,9 @@ cp_parser_ptr_operator (cp_parser* parser, if (TREE_CODE (parser->scope) == NAMESPACE_DECL) error_at (token->location, "%qD is a namespace", parser->scope); + else if (TREE_CODE (parser->scope) == ENUMERAL_TYPE) + error_at (token->location, "cannot form pointer to member of " + "non-class %q#T", parser->scope); else { /* The type of which the member is a member is given by the diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 066121d..235f8c9 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,5 +1,8 @@ 2011-12-17 Jason Merrill <jason@redhat.com> + PR c++/51588 + * g++.dg/parse/enum7.C: New. + PR c++/51586 * g++.dg/lookup/nested2.C: New. diff --git a/gcc/testsuite/g++.dg/parse/enum7.C b/gcc/testsuite/g++.dg/parse/enum7.C new file mode 100644 index 0000000..d9e3a89 --- /dev/null +++ b/gcc/testsuite/g++.dg/parse/enum7.C @@ -0,0 +1,9 @@ +// PR c++/51588 + +enum A {}; + +struct B : A { // { dg-error "" } + int i; +}; + +int A::* p = &B::i; // { dg-error "" } |