From ecdf45b1b15ce40331359c1e306b6810ae75f9b7 Mon Sep 17 00:00:00 2001 From: rguenth Date: Tue, 9 Jan 2018 08:53:14 +0000 Subject: 2018-01-09 Richard Biener Backport from mainline 2018-01-08 Richard Biener 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 --- gcc/ChangeLog | 8 ++++++++ gcc/convert.c | 6 ++++-- gcc/testsuite/ChangeLog | 8 ++++++++ gcc/testsuite/g++.dg/torture/pr83713.C | 12 ++++++++++++ 4 files changed, 32 insertions(+), 2 deletions(-) create mode 100644 gcc/testsuite/g++.dg/torture/pr83713.C 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 + + Backport from mainline + 2018-01-08 Richard Biener + + PR middle-end/83713 + * convert.c (do_narrow): Properly guard TYPE_OVERFLOW_WRAPS checks. + 2018-01-08 Jim Wilson 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 + + Backport from mainline + 2018-01-08 Richard Biener + + PR middle-end/83713 + * g++.dg/torture/pr83713.C: New testcase. + 2018-01-08 Jim Wilson 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); +} -- cgit v1.2.1