summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authorLuc Van Oostenryck <luc.vanoostenryck@gmail.com>2019-12-19 23:07:57 +0100
committerLuc Van Oostenryck <luc.vanoostenryck@gmail.com>2020-10-06 18:35:39 +0200
commitbf0e2bd3c86ae40a88575a565f176030b7fc63b6 (patch)
tree341a87cc441e9ca39fce4ee05d9336e727ac4f0a
parent735ac5d051fbb2fb2e0d628ae114a4c7e8e6e53b (diff)
downloadsparse-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.c6
1 files changed, 2 insertions, 4 deletions
diff --git a/simplify.c b/simplify.c
index 76c05588..15452a58 100644
--- a/simplify.c
+++ b/simplify.c
@@ -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: