Commit 3d750496 by Jeff Law Committed by Jeff Law

re PR tree-optimization/59919 (ICE in process_assert_insertions_for, at tree-vrp.c:6096)

	PR tree-optimization/59919
	* tree-vrp.c (find_assert_locations_1): Do not register asserts
	for non-returning calls.

	PR tree-optimization/59919
	* gcc.c-torture/compile/pr59919.c: New test.

From-SVN: r207061
parent bb393514
2014-01-24 Jeff Law <law@redhat.com>
PR tree-optimization/59919
* tree-vrp.c (find_assert_locations_1): Do not register asserts
for non-returning calls.
2014-01-24 James Greenhalgh <james.greenhalgh@arm.com> 2014-01-24 James Greenhalgh <james.greenhalgh@arm.com>
* common/config/aarch64/aarch64-common.c * common/config/aarch64/aarch64-common.c
......
2014-01-24 Jeff Law <law@redhat.com>
PR tree-optimization/59919
* gcc.c-torture/compile/pr59919.c: New test.
2014-01-24 Paolo Carlini <paolo.carlini@oracle.com> 2014-01-24 Paolo Carlini <paolo.carlini@oracle.com>
PR c++/57524 PR c++/57524
......
typedef int jmp_buf[10];
struct S
{
int i;
jmp_buf buf;
};
void setjmp (jmp_buf);
void foo (int *);
__attribute__ ((__noreturn__, __nonnull__)) void bar (struct S *);
void
baz (struct S *p)
{
bar (p);
setjmp (p->buf);
foo (&p->i);
}
...@@ -4534,12 +4534,21 @@ infer_value_range (gimple stmt, tree op, enum tree_code *comp_code_p, tree *val_ ...@@ -4534,12 +4534,21 @@ infer_value_range (gimple stmt, tree op, enum tree_code *comp_code_p, tree *val_
if (stmt_could_throw_p (stmt)) if (stmt_could_throw_p (stmt))
return false; return false;
/* If STMT is the last statement of a basic block with no /* If STMT is the last statement of a basic block with no normal
successors, there is no point inferring anything about any of its successors, there is no point inferring anything about any of its
operands. We would not be able to find a proper insertion point operands. We would not be able to find a proper insertion point
for the assertion, anyway. */ for the assertion, anyway. */
if (stmt_ends_bb_p (stmt) && EDGE_COUNT (gimple_bb (stmt)->succs) == 0) if (stmt_ends_bb_p (stmt))
{
edge_iterator ei;
edge e;
FOR_EACH_EDGE (e, ei, gimple_bb (stmt)->succs)
if (!(e->flags & EDGE_ABNORMAL))
break;
if (e == NULL)
return false; return false;
}
if (infer_nonnull_range (stmt, op, true, true)) if (infer_nonnull_range (stmt, op, true, true))
{ {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment