CPP: Fix AV Rule 95 performance issue.

This commit is contained in:
Geoffrey White
2019-06-18 11:14:17 +01:00
parent 41d5d5ab86
commit bdb495d58a

View File

@@ -11,16 +11,19 @@
*/
import cpp
from Parameter p, Parameter superP, MemberFunction subF, MemberFunction superF, int i, string subValue, string superValue
where p.hasInitializer()
and subF.getParameter(i) = p
and superP.hasInitializer()
predicate parameterWithDefault(MemberFunction f, int ix, Parameter p, Expr initExpr, string initValue) {
f.getParameter(ix) = p and
p.hasInitializer() and
initExpr = p.getInitializer().getExpr() and
initValue = initExpr.getValue()
}
from Parameter p, Parameter superP, MemberFunction subF, MemberFunction superF, int i, Expr subExpr, string subValue, string superValue
where parameterWithDefault(subF, i, p, subExpr, subValue)
and subF.overrides(superF)
and superF.getParameter(i) = superP
and subValue = p.getInitializer().getExpr().getValue()
and superValue = superP.getInitializer().getExpr().getValue()
and parameterWithDefault(superF, i, superP, _, superValue)
and subValue != superValue
select p.getInitializer().getExpr(),
select subExpr,
"Parameter " + p.getName() +
" redefines its default value to " + subValue +
" from the inherited default value " + superValue +