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 | |
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')
-rw-r--r-- | gcc/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/convert.c | 6 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/torture/pr83713.C | 12 |
4 files changed, 26 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index cbd431a..b91925a 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,10 @@ 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 Richard Biener <rguenther@suse.de> + PR tree-optimization/83685 * tree-ssa-pre.c (create_expression_by_pieces): Do not insert references to abnormals. 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 diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 133e8e9..d5fd96d 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2018-01-08 Richard Biener <rguenther@suse.de> + + PR middle-end/83713 + * g++.dg/torture/pr83713.C: New testcase. + 2018-01-08 Tom de Vries <tom@codesourcery.com> * gcc.dg/tree-ssa/ssa-dom-cse-2.c: Xfail scan for nvptx. diff --git a/gcc/testsuite/g++.dg/torture/pr83713.C b/gcc/testsuite/g++.dg/torture/pr83713.C new file mode 100644 index 0000000..ca6af04 --- /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); +} |