@@ -188,6 +188,35 @@ class IRABIDetailsProviderImpl {
188
188
result.metadataSourceTypes .push_back (canType);
189
189
});
190
190
}
191
+ // Verify that the signature param count matches the IR param count.
192
+ size_t signatureParamCount = 0 ;
193
+ result.visitParameterList (
194
+ [&](const IRABIDetailsProvider::LoweredFunctionSignature::
195
+ IndirectResultValue &indirectResult) { ++signatureParamCount; },
196
+ [&](const IRABIDetailsProvider::LoweredFunctionSignature::
197
+ DirectParameter ¶m) {
198
+ param.enumerateRecordMembers ([&](clang::CharUnits, clang::CharUnits,
199
+ Type) { ++signatureParamCount; });
200
+ },
201
+ [&](const IRABIDetailsProvider::LoweredFunctionSignature::
202
+ IndirectParameter ¶m) { ++signatureParamCount; },
203
+ [&](const IRABIDetailsProvider::LoweredFunctionSignature::
204
+ GenericRequirementParameter &genericRequirementParam) {
205
+ ++signatureParamCount;
206
+ },
207
+ [&](const IRABIDetailsProvider::LoweredFunctionSignature::
208
+ MetadataSourceParameter &metadataSrcParam) {
209
+ ++signatureParamCount;
210
+ },
211
+ [&](const IRABIDetailsProvider::LoweredFunctionSignature::
212
+ ContextParameter &) { ++signatureParamCount; },
213
+ [&](const IRABIDetailsProvider::LoweredFunctionSignature::
214
+ ErrorResultValue &) { ++signatureParamCount; });
215
+ // Return nothing if we were unable to represent the exact signature
216
+ // parameters.
217
+ if (signatureParamCount != abiDetails->numParamIRTypesInSignature )
218
+ return None;
219
+
191
220
return result;
192
221
}
193
222
0 commit comments