From 4d2ab9e36b10d4351cffe7ae1fd477f4b1aabf92 Mon Sep 17 00:00:00 2001 From: Richard Guenther Date: Fri, 14 May 2010 20:18:34 +0000 Subject: [PATCH] re PR tree-optimization/44119 (error: SSA name in freelist but still referenced) 2010-05-14 Richard Guenther PR tree-optimization/44119 * tree-ssa-pre.c (eliminate): Properly mark replacement of a PHI node necessary. * gcc.c-torture/compile/pr44119.c: New testcase. From-SVN: r159412 --- gcc/ChangeLog | 6 ++++ gcc/testsuite/ChangeLog | 5 +++ gcc/testsuite/gcc.c-torture/compile/pr44119.c | 46 +++++++++++++++++++++++++++ gcc/tree-ssa-pre.c | 4 +++ 4 files changed, 61 insertions(+) create mode 100644 gcc/testsuite/gcc.c-torture/compile/pr44119.c diff --git a/gcc/ChangeLog b/gcc/ChangeLog index bd83bf8..a0df089 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2010-05-14 Richard Guenther + + PR tree-optimization/44119 + * tree-ssa-pre.c (eliminate): Properly mark replacement of + a PHI node necessary. + 2010-05-14 Eric Botcazou * tree.h (TREE_ADDRESSABLE): Remove bogus usage for FIELD_DECL. diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 331b142..b96b9a3 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2010-05-14 Richard Guenther + + PR tree-optimization/44119 + * gcc.c-torture/compile/pr44119.c: New testcase. + 2010-05-14 Jason Merrill PR c++/44127 diff --git a/gcc/testsuite/gcc.c-torture/compile/pr44119.c b/gcc/testsuite/gcc.c-torture/compile/pr44119.c new file mode 100644 index 0000000..ef6ca45 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/pr44119.c @@ -0,0 +1,46 @@ +typedef signed char int8_t; +typedef short int int16_t; +typedef int int32_t; +typedef unsigned int uint32_t; +static int8_t +safe_mul_func_int16_t_s_s (int16_t si1, int8_t si2) +{ + return si1 && si2 && si1 > +si2 || si1 && si2 && si2 < +si1 || si1 && si2 + && si1 < +si2 || si1 && si2 && si1 && si2 < +si1 ? : si1 * si2; +} + +struct S0 +{ +}; +int32_t g_72[7][4][1]; +int32_t *g_184 = &g_72[1][2][0]; +int32_t **g_224 = &g_184; +struct S0 g_244 = { +}; + +int8_t * +func_96 (int8_t p_97, uint32_t p_98, uint32_t p_99) +{ + struct S0 *l_243 = &g_244; + int i; + for (i = 0; i < 1; p_98 = 1) + { + int32_t *l_202[3]; + int i; + for (i = 0; i < 1; i++) + l_202[i] = &g_72[2][2][0]; + if (safe_mul_func_int16_t_s_s (0xCAF0, **g_224)) + { + if (p_98 && &l_243) + { + } + else + *g_224 = l_202[0]; + for (0;; 1) + { + } + } + } + return 0; +} + diff --git a/gcc/tree-ssa-pre.c b/gcc/tree-ssa-pre.c index ac676cd..816aeb6 100644 --- a/gcc/tree-ssa-pre.c +++ b/gcc/tree-ssa-pre.c @@ -4347,6 +4347,10 @@ eliminate (void) remove_phi_node (&gsi, false); + if (!bitmap_bit_p (inserted_exprs, SSA_NAME_VERSION (res)) + && TREE_CODE (sprime) == SSA_NAME) + gimple_set_plf (SSA_NAME_DEF_STMT (sprime), NECESSARY, true); + if (!useless_type_conversion_p (TREE_TYPE (res), TREE_TYPE (sprime))) sprime = fold_convert (TREE_TYPE (res), sprime); stmt = gimple_build_assign (res, sprime); -- 2.7.4