re PR c++/62175 (Internal compiler error in gimplify_modify_expr gimplify.c:4616)

2014-08-26  Richard Biener  <rguenther@suse.de>

	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
This commit is contained in:
Richard Biener 2014-08-26 08:03:32 +00:00 committed by Richard Biener
parent 94d64bbd61
commit 8b2282660d
4 changed files with 50 additions and 0 deletions

View File

@ -1,3 +1,9 @@
2014-08-26 Richard Biener <rguenther@suse.de>
PR tree-optimization/62175
* tree-ssa-loop-niter.c (expand_simple_operations): Do not
expand possibly trapping operations.
2014-08-26 David Malcolm <dmalcolm@redhat.com>
* config/rs6000/rs6000.c (class swap_web_entry): Strengthen field

View File

@ -1,3 +1,8 @@
2014-08-26 Richard Biener <rguenther@suse.de>
PR tree-optimization/62175
* g++.dg/torture/pr62175.C: New testcase.
2014-08-25 Bernd Schmidt <bernds@codesourcery.com>
* gcc.c-torture/execute/execute.exp: Replace with slightly adapted

View File

@ -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); }

View File

@ -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);