Skip to content

Commit fb06e8b

Browse files
committed
IRGen/ABI: fix count of requirements in getAddrOfGenericEnvironment
`irgen::addGenericRequirements` will later filter out Copyable and Escapable requirements, so this field's count isn't accurate if it's using the pre-filtered number. This should in theory only affect the metadata emission for keypaths, specifically, the caller `IRGenModule::getAddrOfKeyPathPattern`.
1 parent e39a31a commit fb06e8b

File tree

1 file changed

+6
-2
lines changed

1 file changed

+6
-2
lines changed

lib/IRGen/GenProto.cpp

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4622,9 +4622,13 @@ llvm::Constant *IRGenModule::getAddrOfGenericEnvironment(
46224622
}
46234623
genericParamCounts.push_back(genericParamCount);
46244624

4625+
SmallVector<Requirement, 2> reqs;
4626+
SmallVector<InverseRequirement, 2> inverses;
4627+
signature->getRequirementsWithInverses(reqs, inverses);
4628+
46254629
auto flags = GenericEnvironmentFlags()
46264630
.withNumGenericParameterLevels(genericParamCounts.size())
4627-
.withNumGenericRequirements(signature.getRequirements().size());
4631+
.withNumGenericRequirements(reqs.size());
46284632

46294633
ConstantStructBuilder fields = builder.beginStruct();
46304634
fields.setPacked(true);
@@ -4651,7 +4655,7 @@ llvm::Constant *IRGenModule::getAddrOfGenericEnvironment(
46514655
fields.addAlignmentPadding(Alignment(4));
46524656

46534657
// Generic requirements
4654-
irgen::addGenericRequirements(*this, fields, signature);
4658+
irgen::addGenericRequirements(*this, fields, signature, reqs, inverses);
46554659
return fields.finishAndCreateFuture();
46564660
});
46574661
}

0 commit comments

Comments
 (0)