diff options
author | Richard Biener <rguenther@suse.de> | 2018-01-08 13:24:38 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2018-01-08 13:24:38 +0000 |
commit | 87c4dace919a404c10521061af2bad6e4752810e (patch) | |
tree | 9f644b50c5c3d94c6015b5c4b2e9240ecda601b9 /gcc/convert.c | |
parent | 960c02b84e5b03f774d3f07dcceb85c24416ac8f (diff) | |
download | gcc-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.c | 6 |
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 |