From 90ad8d0053d7268d02702a3b735737a5b1f7ea11 Mon Sep 17 00:00:00 2001 From: Tom de Vries Date: Thu, 16 Oct 2014 12:42:41 +0000 Subject: [PATCH] Assert no use with SSA_NAME_IN_FREELIST before using freelist. 2014-10-16 Tom de Vries * tree-into-ssa.c (update_ssa): Assert that there's no ssa use operand with SSA_NAME_IN_FREELIST. From-SVN: r216318 --- gcc/ChangeLog | 5 +++++ gcc/tree-into-ssa.c | 39 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 44 insertions(+) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 9d817c1b24a..5f398d3b940 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2014-10-16 Tom de Vries + + * tree-into-ssa.c (update_ssa): Assert that there's no ssa use operand + with SSA_NAME_IN_FREELIST. + 2014-10-16 Richard Biener PR middle-end/63554 diff --git a/gcc/tree-into-ssa.c b/gcc/tree-into-ssa.c index 01203dece18..f1983f1ac73 100644 --- a/gcc/tree-into-ssa.c +++ b/gcc/tree-into-ssa.c @@ -3161,6 +3161,45 @@ update_ssa (unsigned update_flags) if (!need_ssa_update_p (cfun)) return; +#ifdef ENABLE_CHECKING + timevar_push (TV_TREE_STMT_VERIFY); + + bool err = false; + + FOR_EACH_BB_FN (bb, cfun) + { + gimple_stmt_iterator gsi; + for (gsi = gsi_start_bb (bb); !gsi_end_p (gsi); gsi_next (&gsi)) + { + gimple stmt = gsi_stmt (gsi); + + ssa_op_iter i; + use_operand_p use_p; + FOR_EACH_SSA_USE_OPERAND (use_p, stmt, i, SSA_OP_ALL_USES) + { + tree use = USE_FROM_PTR (use_p); + if (TREE_CODE (use) != SSA_NAME) + continue; + + if (SSA_NAME_IN_FREE_LIST (use)) + { + error ("statement uses released SSA name:"); + debug_gimple_stmt (stmt); + fprintf (stderr, "The use of "); + print_generic_expr (stderr, use, 0); + fprintf (stderr," should have been replaced\n"); + err = true; + } + } + } + } + + if (err) + internal_error ("cannot update SSA form"); + + timevar_pop (TV_TREE_STMT_VERIFY); +#endif + timevar_push (TV_TREE_SSA_INCREMENTAL); if (dump_file && (dump_flags & TDF_DETAILS)) -- 2.30.2