summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorrguenth <rguenth@138bc75d-0d04-0410-961f-82ee72b054a4>2018-01-09 08:53:14 +0000
committerrguenth <rguenth@138bc75d-0d04-0410-961f-82ee72b054a4>2018-01-09 08:53:14 +0000
commitecdf45b1b15ce40331359c1e306b6810ae75f9b7 (patch)
tree9d4bf6d2693ec1d9a6d1709c717317eeda08b9e6
parentb4da585b6b632d11ec0debb2ede5865841e34986 (diff)
downloadgcc-ecdf45b1b15ce40331359c1e306b6810ae75f9b7.tar.gz
2018-01-09 Richard Biener <rguenther@suse.de>
Backport from mainline 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. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-7-branch@256371 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r--gcc/ChangeLog8
-rw-r--r--gcc/convert.c6
-rw-r--r--gcc/testsuite/ChangeLog8
-rw-r--r--gcc/testsuite/g++.dg/torture/pr83713.C12
4 files changed, 32 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index b2b045f524a..22283da1264 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,11 @@
+2018-01-09 Richard Biener <rguenther@suse.de>
+
+ Backport from mainline
+ 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 Jim Wilson <jimw@sifive.com>
Backport from mainline
diff --git a/gcc/convert.c b/gcc/convert.c
index af8dfda0eb4..8737f4d3965 100644
--- a/gcc/convert.c
+++ b/gcc/convert.c
@@ -461,8 +461,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 678b9e123fc..83a27ab66f1 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,11 @@
+2018-01-09 Richard Biener <rguenther@suse.de>
+
+ Backport from mainline
+ 2018-01-08 Richard Biener <rguenther@suse.de>
+
+ PR middle-end/83713
+ * g++.dg/torture/pr83713.C: New testcase.
+
2018-01-08 Jim Wilson <jimw@sifive.com>
Backport from mainline
diff --git a/gcc/testsuite/g++.dg/torture/pr83713.C b/gcc/testsuite/g++.dg/torture/pr83713.C
new file mode 100644
index 00000000000..ca6af04406d
--- /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);
+}