Skip to content

Commit 463d591

Browse files
committed
RequirementMachine: Verify that generic parameter symbols are valid within the current signature
1 parent e29b081 commit 463d591

File tree

1 file changed

+15
-0
lines changed

1 file changed

+15
-0
lines changed

lib/AST/RequirementMachine/RequirementMachine.cpp

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -238,6 +238,21 @@ void RewriteSystemBuilder::addRequirement(const Requirement &req,
238238

239239
void RequirementMachine::verify(const MutableTerm &term) const {
240240
#ifndef NDEBUG
241+
// If the term is in the generic parameter domain, ensure we have a valid
242+
// generic parameter.
243+
if (term.begin()->getKind() == Symbol::Kind::GenericParam) {
244+
auto *genericParam = term.begin()->getGenericParam();
245+
auto genericParams = Sig.getGenericParams();
246+
auto found = std::find(genericParams.begin(),
247+
genericParams.end(),
248+
genericParam);
249+
if (found == genericParams.end()) {
250+
llvm::errs() << "Bad generic parameter in " << term << "\n";
251+
dump(llvm::errs());
252+
abort();
253+
}
254+
}
255+
241256
MutableTerm erased;
242257

243258
// First, "erase" resolved associated types from the term, and try

0 commit comments

Comments
 (0)