OP_LOADs removed by rewrite_load_instruction() had their ->bb simply set to NULL the usage of its operand was not adjusted. Fix that by calling kill_instruction(). Signed-off-by: Luc Van Oostenryck <luc.vanoostenryck@xxxxxxxxx> --- flow.c | 2 +- validation/kill-rewritten-load.c | 16 ++++++++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) create mode 100644 validation/kill-rewritten-load.c diff --git a/flow.c b/flow.c index 8409fac60..fbac9336c 100644 --- a/flow.c +++ b/flow.c @@ -401,7 +401,7 @@ void rewrite_load_instruction(struct instruction *insn, struct pseudo_list *domi * pseudo. */ FOR_EACH_PTR(dominators, phi) { - phi->def->bb = NULL; + kill_instruction(phi->def); } END_FOR_EACH_PTR(phi); convert_load_instruction(insn, new); return; diff --git a/validation/kill-rewritten-load.c b/validation/kill-rewritten-load.c new file mode 100644 index 000000000..31b895e53 --- /dev/null +++ b/validation/kill-rewritten-load.c @@ -0,0 +1,16 @@ +int foo(int i) +{ + i++; + if (i && 0) + i; + return 0; +} + + +/* + * check-name: kill-rewritten-load + * check-command: test-linearize -Wno-decl $file + * check-output-ignore + * + * check-output-excludes: add\\. + */ -- 2.11.0 -- To unsubscribe from this list: send the line "unsubscribe linux-sparse" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html