aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorMarek Polacek <polacek@redhat.com>2014-01-17 15:23:17 +0000
committerMarek Polacek <mpolacek@gcc.gnu.org>2014-01-17 15:23:17 +0000
commit0ffc4683170aa3cdb3c244745f7d52ae798da520 (patch)
tree184559a8970dd5712cf703d6eda33582fec25cb7 /gcc
parent30078c0a6521519cd18090edb554c62e8d9c1a8a (diff)
downloadgcc-0ffc4683170aa3cdb3c244745f7d52ae798da520.zip
gcc-0ffc4683170aa3cdb3c244745f7d52ae798da520.tar.gz
gcc-0ffc4683170aa3cdb3c244745f7d52ae798da520.tar.bz2
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
Diffstat (limited to 'gcc')
-rw-r--r--gcc/cp/ChangeLog6
-rw-r--r--gcc/cp/cvt.c1
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/g++.dg/diagnostic/pr59838.C4
4 files changed, 16 insertions, 0 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 848c406..66896d9 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,9 @@
+2014-01-17 Marek Polacek <polacek@redhat.com>
+
+ PR c++/59838
+ * cvt.c (ocp_convert): Don't segfault on non-existing
+ ENUM_UNDERLYING_TYPE.
+
2014-01-16 Jason Merrill <jason@redhat.com>
PR c++/59821
diff --git a/gcc/cp/cvt.c b/gcc/cp/cvt.c
index df208cc..c2cdf83 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 a78e915..6d57b41 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,5 +1,10 @@
2014-01-17 Marek Polacek <polacek@redhat.com>
+ PR c++/59838
+ * g++.dg/diagnostic/pr59838.C: New test.
+
+2014-01-17 Marek Polacek <polacek@redhat.com>
+
PR c/58346
* gcc.dg/pr58346.c: New test.
diff --git a/gcc/testsuite/g++.dg/diagnostic/pr59838.C b/gcc/testsuite/g++.dg/diagnostic/pr59838.C
new file mode 100644
index 0000000..d1cf2c7
--- /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" }