aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Biener <rguenther@suse.de>2018-01-08 13:24:38 +0000
committerRichard Biener <rguenth@gcc.gnu.org>2018-01-08 13:24:38 +0000
commit87c4dace919a404c10521061af2bad6e4752810e (patch)
tree9f644b50c5c3d94c6015b5c4b2e9240ecda601b9 /gcc
parent960c02b84e5b03f774d3f07dcceb85c24416ac8f (diff)
downloadgcc-87c4dace919a404c10521061af2bad6e4752810e.zip
gcc-87c4dace919a404c10521061af2bad6e4752810e.tar.gz
gcc-87c4dace919a404c10521061af2bad6e4752810e.tar.bz2
re PR c++/83713 (ICE in do_narrow at gcc/convert.c:474)
2018-01-08 Richard Biener <rguenther@suse.de> PR middle-end/83713 * convert.c (do_narrow): Properly guard TYPE_OVERFLOW_WRAPS checks. * g++.dg/torture/pr83713.C: New testcase. From-SVN: r256341
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/convert.c6
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/g++.dg/torture/pr83713.C12
4 files changed, 26 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index cbd431a..b91925a 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,10 @@
2018-01-08 Richard Biener <rguenther@suse.de>
+ PR middle-end/83713
+ * convert.c (do_narrow): Properly guard TYPE_OVERFLOW_WRAPS checks.
+
+2018-01-08 Richard Biener <rguenther@suse.de>
+
PR tree-optimization/83685
* tree-ssa-pre.c (create_expression_by_pieces): Do not insert
references to abnormals.
diff --git a/gcc/convert.c b/gcc/convert.c
index e168a26..8c8931f 100644
--- a/gcc/convert.c
+++ b/gcc/convert.c
@@ -471,8 +471,10 @@ do_narrow (location_t loc,
type in case the operation in outprec precision
could overflow. Otherwise, we would introduce
signed-overflow undefinedness. */
- || ((!TYPE_OVERFLOW_WRAPS (TREE_TYPE (arg0))
- || !TYPE_OVERFLOW_WRAPS (TREE_TYPE (arg1)))
+ || ((!(INTEGRAL_TYPE_P (TREE_TYPE (arg0))
+ && TYPE_OVERFLOW_WRAPS (TREE_TYPE (arg0)))
+ || !(INTEGRAL_TYPE_P (TREE_TYPE (arg1))
+ && TYPE_OVERFLOW_WRAPS (TREE_TYPE (arg1))))
&& ((TYPE_PRECISION (TREE_TYPE (arg0)) * 2u
> outprec)
|| (TYPE_PRECISION (TREE_TYPE (arg1)) * 2u
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 133e8e9..d5fd96d 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2018-01-08 Richard Biener <rguenther@suse.de>
+
+ PR middle-end/83713
+ * g++.dg/torture/pr83713.C: New testcase.
+
2018-01-08 Tom de Vries <tom@codesourcery.com>
* gcc.dg/tree-ssa/ssa-dom-cse-2.c: Xfail scan for nvptx.
diff --git a/gcc/testsuite/g++.dg/torture/pr83713.C b/gcc/testsuite/g++.dg/torture/pr83713.C
new file mode 100644
index 0000000..ca6af04
--- /dev/null
+++ b/gcc/testsuite/g++.dg/torture/pr83713.C
@@ -0,0 +1,12 @@
+// { dg-do compile }
+
+class a
+{
+ char b;
+ void c ();
+};
+void
+a::c ()
+{
+ &b + ((long long) &b & 0);
+}