diff options
author | Luc Van Oostenryck <luc.vanoostenryck@gmail.com> | 2019-12-19 23:07:57 +0100 |
---|---|---|
committer | Luc Van Oostenryck <luc.vanoostenryck@gmail.com> | 2020-10-06 18:35:39 +0200 |
commit | bf0e2bd3c86ae40a88575a565f176030b7fc63b6 (patch) | |
tree | 341a87cc441e9ca39fce4ee05d9336e727ac4f0a | |
parent | 735ac5d051fbb2fb2e0d628ae114a4c7e8e6e53b (diff) | |
download | sparse-bf0e2bd3c86ae40a88575a565f176030b7fc63b6.tar.gz |
unop: fix access to defining instruction in simplify_unop()
Only pseudos of type PSEUDO_REG have a defining instruction.
However, in commit 5425db10d4d3 ("simplify '~(~x)' and '-(-x)' to 'x'"),
this defining instruction of the 'src' of the outer unop
was accessed without checking the type.
Fixes: 5425db10d4d35895ba3ca390478c624233ec027d
Signed-off-by: Luc Van Oostenryck <luc.vanoostenryck@gmail.com>
-rw-r--r-- | simplify.c | 6 |
1 files changed, 2 insertions, 4 deletions
@@ -1311,13 +1311,11 @@ static int simplify_unop(struct instruction *insn) struct instruction *def; case OP_NOT: - def = insn->src->def; - if (def && def->opcode == OP_NOT) + if (DEF_OPCODE(def, insn->src) == OP_NOT) return replace_with_pseudo(insn, def->src); break; case OP_NEG: - def = insn->src->def; - if (def && def->opcode == OP_NEG) + if (DEF_OPCODE(def, insn->src) == OP_NEG) return replace_with_pseudo(insn, def->src); break; default: |