[SILGen] Fix swift_once initializer signature for lazy global var

`Builtin.once` has type `(Builtin.RawPointer, (Builtin.RawPointer) -> ())`
at Swift level, but lazy global init passes its initializer as `() -> ()`,
so their callee and caller signatures doesn't match.
This commit is contained in:
Yuta Saito
2022-04-03 05:29:56 +00:00
parent ecf8a35dc1
commit 1a75b08188
8 changed files with 32 additions and 28 deletions

View File

@@ -228,6 +228,12 @@ void SILGenFunction::emitLazyGlobalInitializer(PatternBindingDecl *binding,
unsigned pbdEntry) {
MagicFunctionName = SILGenModule::getMagicFunctionName(binding->getDeclContext());
// Add unused context pointer argument required to pass to `Builtin.once`
SILBasicBlock &entry = *F.begin();
SILType rawPointerSILTy =
getLoweredLoadableType(getASTContext().TheRawPointerType);
entry.createFunctionArgument(rawPointerSILTy);
{
Scope scope(Cleanups, binding);