aboutsummaryrefslogtreecommitdiff
path: root/gcc/tree-ssa.c
diff options
context:
space:
mode:
authorMichael Matz <matz@suse.de>2010-09-03 14:42:46 +0000
committerMichael Matz <matz@gcc.gnu.org>2010-09-03 14:42:46 +0000
commit15a54c10cb41f5a84583f7359c347706a6b90c5d (patch)
treeaa614bb1c0bc6ea02ae1dfcf2d8530766219c8ee /gcc/tree-ssa.c
parented6e090eb29cebdf2c48f2de0bb5d858c1eb9b8c (diff)
downloadgcc-15a54c10cb41f5a84583f7359c347706a6b90c5d.zip
gcc-15a54c10cb41f5a84583f7359c347706a6b90c5d.tar.gz
gcc-15a54c10cb41f5a84583f7359c347706a6b90c5d.tar.bz2
re PR middle-end/45415 (ICE in partition_view_bitmap, at tree-ssa-live.c:334)
PR middle-end/45415 * tree-sra.c (sra_modify_assign): If we modify the statement, say so. * tree-ssa.c (verify_ssa): Check number of operands and links per statement to agree. testsuite/ PR middle-end/45415 * gcc.dg/pr45415.c: New test. From-SVN: r163822
Diffstat (limited to 'gcc/tree-ssa.c')
-rw-r--r--gcc/tree-ssa.c16
1 files changed, 16 insertions, 0 deletions
diff --git a/gcc/tree-ssa.c b/gcc/tree-ssa.c
index 16f85f5..9202f04 100644
--- a/gcc/tree-ssa.c
+++ b/gcc/tree-ssa.c
@@ -938,6 +938,8 @@ verify_ssa (bool check_modified_stmt)
gimple stmt = gsi_stmt (gsi);
use_operand_p use_p;
bool has_err;
+ int count;
+ unsigned i;
if (check_modified_stmt && gimple_modified_p (stmt))
{
@@ -1007,6 +1009,7 @@ verify_ssa (bool check_modified_stmt)
goto err;
}
+ count = 0;
FOR_EACH_SSA_TREE_OPERAND (op, stmt, iter, SSA_OP_USE|SSA_OP_DEF)
{
if (verify_ssa_name (op, false))
@@ -1015,6 +1018,19 @@ verify_ssa (bool check_modified_stmt)
print_gimple_stmt (stderr, stmt, 0, TDF_VOPS|TDF_MEMSYMS);
goto err;
}
+ count++;
+ }
+
+ for (i = 0; i < gimple_num_ops (stmt); i++)
+ {
+ op = gimple_op (stmt, i);
+ if (op && TREE_CODE (op) == SSA_NAME && --count < 0)
+ {
+ error ("nr of operands and imm-links doesn't agree");
+ error ("in statement");
+ print_gimple_stmt (stderr, stmt, 0, TDF_VOPS|TDF_MEMSYMS);
+ goto err;
+ }
}
FOR_EACH_SSA_USE_OPERAND (use_p, stmt, iter, SSA_OP_USE|SSA_OP_VUSE)