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(
287287private predicate isOnlyEscapesViaReturnArgument ( Operand operand ) {
288288 exists ( AliasModels:: AliasFunction f |
289289 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+ )
291296 )
292297}
293298
294299private predicate isNeverEscapesArgument ( Operand operand ) {
295300 exists ( AliasModels:: AliasFunction f |
296301 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+ )
298308 )
299309}
300310
Original file line number Diff line number Diff line change @@ -287,14 +287,24 @@ private predicate isArgumentForParameter(
287287private predicate isOnlyEscapesViaReturnArgument ( Operand operand ) {
288288 exists ( AliasModels:: AliasFunction f |
289289 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+ )
291296 )
292297}
293298
294299private predicate isNeverEscapesArgument ( Operand operand ) {
295300 exists ( AliasModels:: AliasFunction f |
296301 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+ )
298308 )
299309}
300310
Original file line number Diff line number Diff line change @@ -287,14 +287,24 @@ private predicate isArgumentForParameter(
287287private predicate isOnlyEscapesViaReturnArgument ( Operand operand ) {
288288 exists ( AliasModels:: AliasFunction f |
289289 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+ )
291296 )
292297}
293298
294299private predicate isNeverEscapesArgument ( Operand operand ) {
295300 exists ( AliasModels:: AliasFunction f |
296301 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+ )
298308 )
299309}
300310
You can’t perform that action at this time.
0 commit comments