@@ -205,20 +205,20 @@ class MyDiv extends Expr {
205
205
}
206
206
}
207
207
208
- from Expr exp , string msg , Function fn , Expr findVal , float changeInt , MyDiv div
208
+ from Expr exp , string msg , Function fn , GVN findVal , float changeInt , MyDiv div
209
209
where
210
- findVal = globalValueNumber ( fn .getACallToThisFunction ( ) ) . getAnExpr ( ) and
210
+ findVal = globalValueNumber ( fn .getACallToThisFunction ( ) ) and
211
211
(
212
212
// Look for divide-by-zero operations possible due to the return value of the function `fn`.
213
213
checkConditions1 ( div , fn , changeInt ) and
214
214
(
215
215
// Function return value can be zero.
216
216
mayBeReturnZero ( fn ) and
217
- getMulDivOperand ( globalValueNumber ( div .getRV ( ) ) .getAnExpr ( ) ) = findVal and
217
+ getMulDivOperand ( globalValueNumber ( div .getRV ( ) ) .getAnExpr ( ) ) = findVal . getAnExpr ( ) and
218
218
changeInt = 0
219
219
or
220
220
// Denominator can be sum or difference.
221
- changeInt = getValueOperand ( div .getRV ( ) , findVal , _) and
221
+ changeInt = getValueOperand ( div .getRV ( ) , findVal . getAnExpr ( ) , _) and
222
222
mayBeReturnValue ( fn , changeInt )
223
223
) and
224
224
exp = div and
@@ -231,19 +231,21 @@ where
231
231
// Division is associated with the function argument.
232
232
exists ( Function divFn |
233
233
divFn .getParameter ( posArg ) .getAnAccess ( ) = divVal and
234
+ divVal .getEnclosingStmt ( ) = div .getEnclosingStmt ( ) and
234
235
divFc = divFn .getACallToThisFunction ( )
235
236
) and
236
237
(
237
238
divVal = div .getRV ( ) and
238
239
(
239
240
// Function return value can be zero.
240
241
mayBeReturnZero ( fn ) and
241
- getMulDivOperand ( globalValueNumber ( divFc .getArgument ( posArg ) ) .getAnExpr ( ) ) = findVal and
242
+ getMulDivOperand ( globalValueNumber ( divFc .getArgument ( posArg ) ) .getAnExpr ( ) ) =
243
+ findVal .getAnExpr ( ) and
242
244
changeInt = 0 and
243
245
changeInt2 = 0
244
246
or
245
247
// Denominator can be sum or difference.
246
- changeInt = getValueOperand ( divFc .getArgument ( posArg ) , findVal , _) and
248
+ changeInt = getValueOperand ( divFc .getArgument ( posArg ) , findVal . getAnExpr ( ) , _) and
247
249
mayBeReturnValue ( fn , changeInt ) and
248
250
changeInt2 = 0
249
251
)
@@ -252,7 +254,7 @@ where
252
254
changeInt = getValueOperand ( div .getRV ( ) , divVal , _) and
253
255
changeInt2 = changeInt and
254
256
mayBeReturnValue ( fn , changeInt ) and
255
- divFc .getArgument ( posArg ) = findVal
257
+ divFc .getArgument ( posArg ) = findVal . getAnExpr ( )
256
258
) and
257
259
checkConditions2 ( div , divVal , changeInt2 ) and
258
260
checkConditions1 ( divFc , fn , changeInt ) and
0 commit comments