From 0ffc4683170aa3cdb3c244745f7d52ae798da520 Mon Sep 17 00:00:00 2001 From: Marek Polacek Date: Fri, 17 Jan 2014 15:23:17 +0000 Subject: [PATCH] re PR c++/59838 (ICE with an enum using an incomplete type) PR c++/59838 cp/ * cvt.c (ocp_convert): Don't segfault on non-existing ENUM_UNDERLYING_TYPE. testsuite/ * g++.dg/diagnostic/pr59838.C: New test. From-SVN: r206716 --- gcc/cp/ChangeLog | 6 ++++++ gcc/cp/cvt.c | 1 + gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/g++.dg/diagnostic/pr59838.C | 4 ++++ 4 files changed, 16 insertions(+) create mode 100644 gcc/testsuite/g++.dg/diagnostic/pr59838.C diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 848c406ecf4..66896d9aa13 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2014-01-17 Marek Polacek + + PR c++/59838 + * cvt.c (ocp_convert): Don't segfault on non-existing + ENUM_UNDERLYING_TYPE. + 2014-01-16 Jason Merrill PR c++/59821 diff --git a/gcc/cp/cvt.c b/gcc/cp/cvt.c index df208cc6876..c2cdf833802 100644 --- a/gcc/cp/cvt.c +++ b/gcc/cp/cvt.c @@ -753,6 +753,7 @@ ocp_convert (tree type, tree expr, int convtype, int flags, unspecified. */ if ((complain & tf_warning) && TREE_CODE (e) == INTEGER_CST + && ENUM_UNDERLYING_TYPE (type) && !int_fits_type_p (e, ENUM_UNDERLYING_TYPE (type))) warning_at (loc, OPT_Wconversion, "the result of the conversion is unspecified because " diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index a78e915bf78..6d57b412688 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2014-01-17 Marek Polacek + + PR c++/59838 + * g++.dg/diagnostic/pr59838.C: New test. + 2014-01-17 Marek Polacek PR c/58346 diff --git a/gcc/testsuite/g++.dg/diagnostic/pr59838.C b/gcc/testsuite/g++.dg/diagnostic/pr59838.C new file mode 100644 index 00000000000..d1cf2c7fa58 --- /dev/null +++ b/gcc/testsuite/g++.dg/diagnostic/pr59838.C @@ -0,0 +1,4 @@ +// PR c++/59838 +// { dg-do compile } + +enum E { a, b = (E) a }; // { dg-error "conversion to incomplete type" } -- 2.30.2