Skip to content

Commit 9d18b35

Browse files
authored
Merge pull request #1469 from geoffw0/av95perf
CPP: Fix AV Rule 95 performance issue.
2 parents 0b89101 + 6cca2d5 commit 9d18b35

File tree

1 file changed

+22
-15
lines changed

1 file changed

+22
-15
lines changed

cpp/ql/src/jsf/4.10 Classes/AV Rule 95.ql

Lines changed: 22 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -9,20 +9,27 @@
99
* readability
1010
* external/jsf
1111
*/
12+
1213
import cpp
1314

14-
from Parameter p, Parameter superP, MemberFunction subF, MemberFunction superF, int i, string subValue, string superValue
15-
where p.hasInitializer()
16-
and subF.getParameter(i) = p
17-
and superP.hasInitializer()
18-
and subF.overrides(superF)
19-
and superF.getParameter(i) = superP
20-
and subValue = p.getInitializer().getExpr().getValue()
21-
and superValue = superP.getInitializer().getExpr().getValue()
22-
and subValue != superValue
23-
select p.getInitializer().getExpr(),
24-
"Parameter " + p.getName() +
25-
" redefines its default value to " + subValue +
26-
" from the inherited default value " + superValue +
27-
" (in " + superF.getDeclaringType().getName() +
28-
").\nThe default value will be resolved statically, not by dispatch, so this can cause confusion."
15+
predicate memberParameterWithDefault(
16+
MemberFunction f, int ix, Parameter p, Expr initExpr, string initValue
17+
) {
18+
f.getParameter(ix) = p and
19+
initExpr = p.getInitializer().getExpr() and
20+
initValue = initExpr.getValue()
21+
}
22+
23+
from
24+
Parameter p, Parameter superP, MemberFunction subF, MemberFunction superF, int i, Expr subExpr,
25+
string subValue, string superValue
26+
where
27+
memberParameterWithDefault(subF, i, p, subExpr, subValue) and
28+
subF.overrides(superF) and
29+
memberParameterWithDefault(superF, i, superP, _, superValue) and
30+
subValue != superValue
31+
select subExpr,
32+
"Parameter " + p.getName() + " redefines its default value to " + subValue +
33+
" from the inherited default value " + superValue + " (in " +
34+
superF.getDeclaringType().getName() +
35+
").\nThe default value will be resolved statically, not by dispatch, so this can cause confusion."

0 commit comments

Comments
 (0)