From 828ca3d835ac006cbcb2e5b480c6429cc8a75bdd Mon Sep 17 00:00:00 2001 From: Alexandre Oliva Date: Tue, 3 Nov 2015 00:30:07 +0000 Subject: [PR68083] don't introduce undefined behavior in ifcombine The ifcombine pass may move a conditional access to an uninitialized value before the condition that ensures it is always well-defined, thus introducing undefined behavior. Stop it from doing so. for gcc/ChangeLog PR tree-optimization/68083 * tree-ssa-ifcombine.c: Include tree-ssa.h. (bb_no_side_effects_p): Test for undefined uses too. * tree-ssa.c (gimple_uses_undefined_value_p): New. * tree-ssa.h (gimple_uses_undefined_value_p): Declare. for gcc/testsuite/ChangeLog PR tree-optimization/68083 * gcc.dg/torture/pr68083.c: New. From Zhendong Su. From-SVN: r229690 --- gcc/tree-ssa.c | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) (limited to 'gcc/tree-ssa.c') diff --git a/gcc/tree-ssa.c b/gcc/tree-ssa.c index 20e05ad..84a4d5b 100644 --- a/gcc/tree-ssa.c +++ b/gcc/tree-ssa.c @@ -1203,6 +1203,24 @@ ssa_undefined_value_p (tree t, bool partial) } +/* Return TRUE iff STMT, a gimple statement, references an undefined + SSA name. */ + +bool +gimple_uses_undefined_value_p (gimple *stmt) +{ + ssa_op_iter iter; + tree op; + + FOR_EACH_SSA_TREE_OPERAND (op, stmt, iter, SSA_OP_USE) + if (ssa_undefined_value_p (op)) + return true; + + return false; +} + + + /* If necessary, rewrite the base of the reference tree *TP from a MEM_REF to a plain or converted symbol. */ -- cgit v1.1