From 55f8ed96858fe0e5ccd871a49417ce92913b0987 Mon Sep 17 00:00:00 2001 From: Jason Merrill Date: Sat, 17 Dec 2011 19:55:18 -0500 Subject: [PATCH] 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 --- gcc/cp/ChangeLog | 5 +++++ gcc/cp/parser.c | 3 +++ gcc/testsuite/ChangeLog | 3 +++ gcc/testsuite/g++.dg/parse/enum7.C | 9 +++++++++ 4 files changed, 20 insertions(+) create mode 100644 gcc/testsuite/g++.dg/parse/enum7.C diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 4faf0010a01..18f1dfdd6bd 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,8 @@ +2011-12-17 Jason Merrill + + PR c++/51588 + * parser.c (cp_parser_ptr_operator): Reject pointer to member of enum. + 2011-12-17 Richard Henderson PR bootstrap/51072 diff --git a/gcc/cp/parser.c b/gcc/cp/parser.c index ac7427e5e85..51d04d46fc0 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 066121dcd36..235f8c965b5 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,5 +1,8 @@ 2011-12-17 Jason Merrill + 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 00000000000..d9e3a89d72e --- /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 "" } -- 2.30.2