File tree Expand file tree Collapse file tree 3 files changed +36
-6
lines changed
cpp/ql/src/semmle/code/cpp/ir/implementation
csharp/ql/src/experimental/ir/implementation/unaliased_ssa/internal Expand file tree Collapse file tree 3 files changed +36
-6
lines changed Original file line number Diff line number Diff line change @@ -287,14 +287,24 @@ private predicate isArgumentForParameter(
287
287
private predicate isOnlyEscapesViaReturnArgument ( Operand operand ) {
288
288
exists ( AliasModels:: AliasFunction f |
289
289
f = operand .getUse ( ) .( CallInstruction ) .getStaticCallTarget ( ) and
290
- f .parameterEscapesOnlyViaReturn ( operand .( PositionalArgumentOperand ) .getIndex ( ) )
290
+ (
291
+ f .parameterEscapesOnlyViaReturn ( operand .( PositionalArgumentOperand ) .getIndex ( ) )
292
+ or
293
+ f .parameterEscapesOnlyViaReturn ( - 1 ) and
294
+ operand instanceof ThisArgumentOperand
295
+ )
291
296
)
292
297
}
293
298
294
299
private predicate isNeverEscapesArgument ( Operand operand ) {
295
300
exists ( AliasModels:: AliasFunction f |
296
301
f = operand .getUse ( ) .( CallInstruction ) .getStaticCallTarget ( ) and
297
- f .parameterNeverEscapes ( operand .( PositionalArgumentOperand ) .getIndex ( ) )
302
+ (
303
+ f .parameterNeverEscapes ( operand .( PositionalArgumentOperand ) .getIndex ( ) )
304
+ or
305
+ f .parameterNeverEscapes ( - 1 ) and
306
+ operand instanceof ThisArgumentOperand
307
+ )
298
308
)
299
309
}
300
310
Original file line number Diff line number Diff line change @@ -287,14 +287,24 @@ private predicate isArgumentForParameter(
287
287
private predicate isOnlyEscapesViaReturnArgument ( Operand operand ) {
288
288
exists ( AliasModels:: AliasFunction f |
289
289
f = operand .getUse ( ) .( CallInstruction ) .getStaticCallTarget ( ) and
290
- f .parameterEscapesOnlyViaReturn ( operand .( PositionalArgumentOperand ) .getIndex ( ) )
290
+ (
291
+ f .parameterEscapesOnlyViaReturn ( operand .( PositionalArgumentOperand ) .getIndex ( ) )
292
+ or
293
+ f .parameterEscapesOnlyViaReturn ( - 1 ) and
294
+ operand instanceof ThisArgumentOperand
295
+ )
291
296
)
292
297
}
293
298
294
299
private predicate isNeverEscapesArgument ( Operand operand ) {
295
300
exists ( AliasModels:: AliasFunction f |
296
301
f = operand .getUse ( ) .( CallInstruction ) .getStaticCallTarget ( ) and
297
- f .parameterNeverEscapes ( operand .( PositionalArgumentOperand ) .getIndex ( ) )
302
+ (
303
+ f .parameterNeverEscapes ( operand .( PositionalArgumentOperand ) .getIndex ( ) )
304
+ or
305
+ f .parameterNeverEscapes ( - 1 ) and
306
+ operand instanceof ThisArgumentOperand
307
+ )
298
308
)
299
309
}
300
310
Original file line number Diff line number Diff line change @@ -287,14 +287,24 @@ private predicate isArgumentForParameter(
287
287
private predicate isOnlyEscapesViaReturnArgument ( Operand operand ) {
288
288
exists ( AliasModels:: AliasFunction f |
289
289
f = operand .getUse ( ) .( CallInstruction ) .getStaticCallTarget ( ) and
290
- f .parameterEscapesOnlyViaReturn ( operand .( PositionalArgumentOperand ) .getIndex ( ) )
290
+ (
291
+ f .parameterEscapesOnlyViaReturn ( operand .( PositionalArgumentOperand ) .getIndex ( ) )
292
+ or
293
+ f .parameterEscapesOnlyViaReturn ( - 1 ) and
294
+ operand instanceof ThisArgumentOperand
295
+ )
291
296
)
292
297
}
293
298
294
299
private predicate isNeverEscapesArgument ( Operand operand ) {
295
300
exists ( AliasModels:: AliasFunction f |
296
301
f = operand .getUse ( ) .( CallInstruction ) .getStaticCallTarget ( ) and
297
- f .parameterNeverEscapes ( operand .( PositionalArgumentOperand ) .getIndex ( ) )
302
+ (
303
+ f .parameterNeverEscapes ( operand .( PositionalArgumentOperand ) .getIndex ( ) )
304
+ or
305
+ f .parameterNeverEscapes ( - 1 ) and
306
+ operand instanceof ThisArgumentOperand
307
+ )
298
308
)
299
309
}
300
310
You can’t perform that action at this time.
0 commit comments