Skip to content

Commit 68bf9f3

Browse files
authored
Merge pull request #10181 from erik-krogh/fixCons
QL: remove consistency errors related to resolving multiple predicates from parameterized modules
2 parents 898689f + dda16a0 commit 68bf9f3

File tree

2 files changed

+7
-2
lines changed

2 files changed

+7
-2
lines changed

ql/ql/src/codeql_ql/ast/Ast.qll

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -521,6 +521,9 @@ class ClasslessPredicate extends TClasslessPredicate, Predicate, ModuleDeclarati
521521
}
522522

523523
override predicate isPrivate() { Predicate.super.isPrivate() }
524+
525+
/** Holds if this classless predicate is a signature predicate with no body. */
526+
predicate isSignature() { not exists(this.getBody()) }
524527
}
525528

526529
/**

ql/ql/src/codeql_ql/ast/internal/Predicate.qll

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -209,7 +209,9 @@ module PredConsistency {
209209
not exists(p0.getAlias())
210210
) and
211211
c > 1 and
212-
resolvePredicateExpr(pe, p)
212+
resolvePredicateExpr(pe, p) and
213+
// parameterized modules are expected to resolve to multiple.
214+
not exists(ClasslessPredicate sig | not sig.isSignature() and resolvePredicateExpr(pe, sig))
213215
}
214216

215217
query predicate multipleResolveCall(Call call, int c, PredicateOrBuiltin p) {
@@ -225,6 +227,6 @@ module PredConsistency {
225227
c > 1 and
226228
resolveCall(call, p) and
227229
// parameterized modules are expected to resolve to multiple.
228-
not exists(Predicate sig | not exists(sig.getBody()) and resolveCall(call, sig))
230+
not exists(ClasslessPredicate sig | not sig.isSignature() and resolveCall(call, sig))
229231
}
230232
}

0 commit comments

Comments
 (0)