C++: Exclude 'this' params and read/write side effects from static member function calls through qualifiers, and accept tests

This commit is contained in:
Mathias Vorreiter Pedersen
2020-04-08 13:34:57 +02:00
parent e4e0d3b573
commit 7298b68674
3 changed files with 27 additions and 30 deletions

View File

@@ -324,6 +324,15 @@ class TranslatedFunctionCall extends TranslatedCallExpr, TranslatedDirectCall {
override predicate hasWriteSideEffect() {
not expr.getTarget().(SideEffectFunction).hasOnlySpecificWriteSideEffects()
}
override Instruction getQualifierResult() {
hasQualifier() and
result = getQualifier().getResult()
}
override predicate hasQualifier() {
not exists(MemberFunction func | expr.getTarget() = func and func.isStatic())
}
}
/**

View File

@@ -463,7 +463,9 @@ newtype TTranslatedElement =
expr = call.getArgument(n).getFullyConverted()
or
expr = call.getQualifier().getFullyConverted() and
n = -1
n = -1 and
// Exclude calls to static member functions. They don't modify the qualifier
not exists(MemberFunction func | func = call.getTarget() and func.isStatic())
) and
(
call.getTarget().(SideEffectFunction).hasSpecificReadSideEffect(n, _) and