diff options
author | Jason Merrill <jason@redhat.com> | 2011-12-17 14:26:46 -0500 |
---|---|---|
committer | Jason Merrill <jason@gcc.gnu.org> | 2011-12-17 14:26:46 -0500 |
commit | c0425f32f5e469d41e5e1c899f20839fdeffe0f1 (patch) | |
tree | 34385f8da518985c604d410a7502bf793e49003b | |
parent | 46a76d4b7880ea2ff569b09aa80a07ce5355f645 (diff) | |
download | gcc-c0425f32f5e469d41e5e1c899f20839fdeffe0f1.zip gcc-c0425f32f5e469d41e5e1c899f20839fdeffe0f1.tar.gz gcc-c0425f32f5e469d41e5e1c899f20839fdeffe0f1.tar.bz2 |
re PR c++/51587 (ICE with struct vs. enum clash)
PR c++/51587
* decl.c (start_enum): Avoid using ENUM_UNDERLYING_TYPE on a
non-enum.
From-SVN: r182441
-rw-r--r-- | gcc/cp/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/cp/decl.c | 1 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/parse/enum6.C | 8 |
4 files changed, 20 insertions, 0 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 6ed8a03..a63aa16 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2011-12-17 Jason Merrill <jason@redhat.com> + + PR c++/51587 + * decl.c (start_enum): Avoid using ENUM_UNDERLYING_TYPE on a + non-enum. + 2011-12-16 Jason Merrill <jason@redhat.com> PR c++/51416 diff --git a/gcc/cp/decl.c b/gcc/cp/decl.c index fedc52c..0a43fb8 100644 --- a/gcc/cp/decl.c +++ b/gcc/cp/decl.c @@ -12069,6 +12069,7 @@ start_enum (tree name, tree enumtype, tree underlying_type, /* Do not push the decl more than once, unless we need to compare underlying types at instantiation time */ if (!enumtype + || TREE_CODE (enumtype) != ENUMERAL_TYPE || (underlying_type && dependent_type_p (underlying_type)) || (ENUM_UNDERLYING_TYPE (enumtype) diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 660ff9b..71194f5 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2011-12-17 Jason Merrill <jason@redhat.com> + + PR c++/51587 + * g++.dg/parse/enum6.C: New. + 2011-12-17 Tom de Vries <tom@codesourcery.com> PR tree-optimization/51491 diff --git a/gcc/testsuite/g++.dg/parse/enum6.C b/gcc/testsuite/g++.dg/parse/enum6.C new file mode 100644 index 0000000..e753f51 --- /dev/null +++ b/gcc/testsuite/g++.dg/parse/enum6.C @@ -0,0 +1,8 @@ +// PR c++/51587 + +namespace N +{ + struct X; // { dg-message "previous declaration" } +} + +enum N::X {}; // { dg-error "conflicting declaration" } |