aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/simplify.c
diff options
authorLuc Van Oostenryck <luc.vanoostenryck@gmail.com>2017-06-02 19:13:16 +0200
committerLuc Van Oostenryck <luc.vanoostenryck@gmail.com>2018-07-23 01:40:31 +0200
commit9fb59b83b936e16ec1fd600e68cd3cf9f1048fbe (patch)
treed0745ca38636a929b75197fb0905e40caf3e5309 /simplify.c
parent9ac79ec0a88f4f39c90ecab252773b261c9e9721 (diff)
downloadsparse-dev-9fb59b83b936e16ec1fd600e68cd3cf9f1048fbe.tar.gz
big-shift: simplify over-sized OP_SHLs
In the mathematical sense, the result of a left-shift by an amount bigger than the operand size equals zero. Do the corresponding simplification. Signed-off-by: Luc Van Oostenryck <luc.vanoostenryck@gmail.com>
Diffstat (limited to 'simplify.c')
-rw-r--r--simplify.c2
1 files changed, 2 insertions, 0 deletions
diff --git a/simplify.c b/simplify.c
index 9b700abc..3b8e22c5 100644
--- a/simplify.c
+++ b/simplify.c
@@ -557,6 +557,8 @@ static int simplify_shift(struct instruction *insn, pseudo_t pseudo, long long v
break;
case OP_LSR:
size = operand_size(insn, pseudo);
+ /* fall through */
+ case OP_SHL:
if (value >= size)
return replace_with_pseudo(insn, value_pseudo(0));
}