aboutsummaryrefslogtreecommitdiff
path: root/gcc/convert.c
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/convert.c
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/convert.c')
-rw-r--r--gcc/convert.c6
1 files changed, 4 insertions, 2 deletions
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