Skip to content

Commit 4e5a80b

Browse files
committed
Rust: Remove restriction that blanket(-like) impls must have a constraint
1 parent cc4926a commit 4e5a80b

File tree

1 file changed

+6
-1
lines changed

1 file changed

+6
-1
lines changed

rust/ql/lib/codeql/rust/internal/typeinference/BlanketImplementation.qll

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,7 @@ module SatisfiesBlanketConstraint<
126126

127127
/**
128128
* Holds if the argument type `at` satisfies the first non-trivial blanket
129-
* constraint of `impl`.
129+
* constraint of `impl`, or if there are no non-trivial constraints of `impl`.
130130
*/
131131
pragma[nomagic]
132132
predicate satisfiesBlanketConstraint(ArgumentType at, ImplItemNode impl) {
@@ -135,6 +135,11 @@ module SatisfiesBlanketConstraint<
135135
SatisfiesBlanketConstraintInput::relevantConstraint(ato, impl, traitBound) and
136136
SatisfiesBlanketConstraint::satisfiesConstraintType(ato, TTrait(traitBound), _, _)
137137
)
138+
or
139+
exists(TypeParam blanketTypeParam |
140+
hasBlanketCandidate(at, impl, _, blanketTypeParam) and
141+
not hasFirstNonTrivialTraitBound(blanketTypeParam, _)
142+
)
138143
}
139144

140145
/**

0 commit comments

Comments
 (0)