diff options
author | rguenth <rguenth@138bc75d-0d04-0410-961f-82ee72b054a4> | 2018-01-09 08:53:14 +0000 |
---|---|---|
committer | rguenth <rguenth@138bc75d-0d04-0410-961f-82ee72b054a4> | 2018-01-09 08:53:14 +0000 |
commit | ecdf45b1b15ce40331359c1e306b6810ae75f9b7 (patch) | |
tree | 9d4bf6d2693ec1d9a6d1709c717317eeda08b9e6 | |
parent | b4da585b6b632d11ec0debb2ede5865841e34986 (diff) | |
download | gcc-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/ChangeLog | 8 | ||||
-rw-r--r-- | gcc/convert.c | 6 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 8 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/torture/pr83713.C | 12 |
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); +} |