@@ -21,19 +21,12 @@ class ShiftByNegativeOrGreaterPrecisionOperand extends UndefinedBehavior, BitShi
2121 string reason;
2222
2323 ShiftByNegativeOrGreaterPrecisionOperand() {
24- (
25- getPrecision(this.getLeftOperand().getExplicitlyConverted().getUnderlyingType()) <=
26- upperBound(this.getRightOperand()) and
27- reason =
28- "The operand " + this.getLeftOperand() + " is shifted by an expression " +
29- this.getRightOperand() + " whose upper bound (" + upperBound(this.getRightOperand()) +
30- ") is greater than or equal to the precision."
31- or
32- lowerBound(this.getRightOperand()) < 0 and
33- reason =
34- "The operand " + this.getLeftOperand() + " is shifted by an expression " +
35- this.getRightOperand() + " which may be negative."
36- ) and
24+ getPrecision(this.getLeftOperand().getExplicitlyConverted().getUnderlyingType()) <=
25+ upperBound(this.getRightOperand()) and
26+ reason =
27+ "The operand " + this.getLeftOperand() + " is shifted by an expression " +
28+ this.getRightOperand() + " whose upper bound (" + upperBound(this.getRightOperand()) +
29+ ") is greater than or equal to the precision." and
3730 /*
3831 * this statement is not at a basic block where
3932 * `this_rhs < PRECISION(...)` is ensured
@@ -49,18 +42,22 @@ class ShiftByNegativeOrGreaterPrecisionOperand extends UndefinedBehavior, BitShi
4942 |
5043 globalValueNumber(lTLhs) = globalValueNumber(this.getRightOperand()) and
5144 gc.ensuresLt(lTLhs, precisionCall, 0, block, true)
52- ) and
45+ )
46+ or
47+ lowerBound(this.getRightOperand()) < 0 and
48+ reason =
49+ "The operand " + this.getLeftOperand() + " is shifted by an expression " +
50+ this.getRightOperand() + " which may be negative." and
5351 /*
5452 * this statement is not at a basic block where
55- * `this_rhs < 0` is ensured
53+ * `this_rhs > 0` is ensured
5654 */
5755
5856 not exists(GuardCondition gc, BasicBlock block, Expr literalZero, Expr lTLhs |
5957 block = this.getBasicBlock() and
60- literalZero instanceof LiteralZero
61- |
58+ literalZero instanceof LiteralZero and
6259 globalValueNumber(lTLhs) = globalValueNumber(this.getRightOperand()) and
63- gc.ensuresLt(lTLhs, literalZero , 0, block, true)
60+ gc.ensuresLt(literalZero, lTLhs , 0, block, true)
6461 )
6562 }
6663
0 commit comments