From: Richard Biener Date: Tue, 26 Aug 2014 08:03:32 +0000 (+0000) Subject: re PR c++/62175 (Internal compiler error in gimplify_modify_expr gimplify.c:4616) X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=8b2282660d24cce8198352f39ab1566af332716e;p=gcc.git re PR c++/62175 (Internal compiler error in gimplify_modify_expr gimplify.c:4616) 2014-08-26 Richard Biener PR tree-optimization/62175 * tree-ssa-loop-niter.c (expand_simple_operations): Do not expand possibly trapping operations. * g++.dg/torture/pr62175.C: New testcase. From-SVN: r214492 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index e1a1bea4a92..fbfeccb93aa 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2014-08-26 Richard Biener + + PR tree-optimization/62175 + * tree-ssa-loop-niter.c (expand_simple_operations): Do not + expand possibly trapping operations. + 2014-08-26 David Malcolm * config/rs6000/rs6000.c (class swap_web_entry): Strengthen field diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index eaacb5079d6..a71d281f7ba 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2014-08-26 Richard Biener + + PR tree-optimization/62175 + * g++.dg/torture/pr62175.C: New testcase. + 2014-08-25 Bernd Schmidt * gcc.c-torture/execute/execute.exp: Replace with slightly adapted diff --git a/gcc/testsuite/g++.dg/torture/pr62175.C b/gcc/testsuite/g++.dg/torture/pr62175.C new file mode 100644 index 00000000000..bcdea61e1bf --- /dev/null +++ b/gcc/testsuite/g++.dg/torture/pr62175.C @@ -0,0 +1,36 @@ +// { dg-do compile } +// { dg-additional-options "-ftrapv" } + +struct B { + B(int = 0); +}; +int c; +int *d; +struct G { + G(); + int numProcs_; +}; +int fn1(); +B fn2() { + if (c) + return 0; + return B(); +} + +long &fn3(long &p1, long &p2) { + if (p2 < p1) + return p2; + return p1; +} + +void fn4(long p1) { + long a = fn1(); + fn2(); + int b = fn3(p1, a); + for (int i; i < b; ++i) + d[0] = 0; + for (; a < p1; ++a) + d[a] = 0; +} + +G::G() { fn4(numProcs_ + 1); } diff --git a/gcc/tree-ssa-loop-niter.c b/gcc/tree-ssa-loop-niter.c index d4d3e539771..4da18556b76 100644 --- a/gcc/tree-ssa-loop-niter.c +++ b/gcc/tree-ssa-loop-niter.c @@ -1633,6 +1633,9 @@ expand_simple_operations (tree expr) case PLUS_EXPR: case MINUS_EXPR: + if (TYPE_OVERFLOW_TRAPS (TREE_TYPE (expr))) + return expr; + /* Fallthru. */ case POINTER_PLUS_EXPR: /* And increments and decrements by a constant are simple. */ e1 = gimple_assign_rhs2 (stmt);