C++: Handle alias models for this/qualifiers

This commit is contained in:
Robert Marsh
2021-05-18 13:15:38 -07:00
parent 9ac55aff0e
commit e590a7bc33
3 changed files with 36 additions and 6 deletions

View File

@@ -287,14 +287,24 @@ private predicate isArgumentForParameter(
private predicate isOnlyEscapesViaReturnArgument(Operand operand) {
exists(AliasModels::AliasFunction f |
f = operand.getUse().(CallInstruction).getStaticCallTarget() and
f.parameterEscapesOnlyViaReturn(operand.(PositionalArgumentOperand).getIndex())
(
f.parameterEscapesOnlyViaReturn(operand.(PositionalArgumentOperand).getIndex())
or
f.parameterEscapesOnlyViaReturn(-1) and
operand instanceof ThisArgumentOperand
)
)
}
private predicate isNeverEscapesArgument(Operand operand) {
exists(AliasModels::AliasFunction f |
f = operand.getUse().(CallInstruction).getStaticCallTarget() and
f.parameterNeverEscapes(operand.(PositionalArgumentOperand).getIndex())
(
f.parameterNeverEscapes(operand.(PositionalArgumentOperand).getIndex())
or
f.parameterNeverEscapes(-1) and
operand instanceof ThisArgumentOperand
)
)
}