diff options
author | Nathan Sidwell <nathan@acm.org> | 2015-05-20 01:54:09 +0000 |
---|---|---|
committer | Nathan Sidwell <nathan@gcc.gnu.org> | 2015-05-20 01:54:09 +0000 |
commit | 09b59d4de67fdf03f1263fd16ec7949dabcdebcf (patch) | |
tree | 07f2d6e9d96f2f8f1df4e23c0c9f431ad4d03852 /gcc | |
parent | 261640d521fd97e7a0f32a074bbdddb74e0cb3e9 (diff) | |
download | gcc-09b59d4de67fdf03f1263fd16ec7949dabcdebcf.zip gcc-09b59d4de67fdf03f1263fd16ec7949dabcdebcf.tar.gz gcc-09b59d4de67fdf03f1263fd16ec7949dabcdebcf.tar.bz2 |
re PR c++/65954 (gcc segfaults on the following input with a syntax error)
cp/
PR c++/65954
* typeck.c (finish_class_member_access_expr): Diagnose failed
lookup of enum class member.
testsuite/
* g++.dg/cpp0x/pr65954.C: New.
From-SVN: r223430
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/cp/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/cp/typeck.c | 8 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/cpp0x/pr65954.C | 12 |
4 files changed, 30 insertions, 0 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 9a3fb85..cb9219d 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2015-05-19 Nathan sidwell <nathan@acm.org> + + PR c++/65954 + * typeck.c (finish_class_member_access_expr): Diagnose failed + lookup of enum class member. + 2015-05-19 Jakub Jelinek <jakub@redhat.com> PR middle-end/66199 diff --git a/gcc/cp/typeck.c b/gcc/cp/typeck.c index a4d702b..ba99c30 100644 --- a/gcc/cp/typeck.c +++ b/gcc/cp/typeck.c @@ -2731,6 +2731,14 @@ finish_class_member_access_expr (tree object, tree name, bool template_p, return error_mark_node; } tree val = lookup_enumerator (scope, name); + if (!val) + { + if (complain & tf_error) + error ("%qD is not a member of %qD", + name, scope); + return error_mark_node; + } + if (TREE_SIDE_EFFECTS (object)) val = build2 (COMPOUND_EXPR, TREE_TYPE (val), object, val); return val; diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index abd5364..b4d1916 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2015-05-19 Nathan sidwell <nathan@acm.org> + + * g++.dg/cpp0x/pr65954.C: New. + 2015-05-20 Oleg Endo <olegendo@gcc.gnu.org> * gcc.target/sh/pr64366.c: Remove -m4 -ml from dg-options. diff --git a/gcc/testsuite/g++.dg/cpp0x/pr65954.C b/gcc/testsuite/g++.dg/cpp0x/pr65954.C new file mode 100644 index 0000000..851660b --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/pr65954.C @@ -0,0 +1,12 @@ +// { dg-do compile { target c++11 } } + +struct Shape { + enum class Type + { Circle, Square }; +}; + + +void Foo (Shape &shape) +{ + +shape.Type::NOPE; // { dg-error "is not a member of" } +} |