Hi,

I am running into a debug scope SIL Verifier error when creating a new
function (NF) from an existing one (F). Can someone point me where I am
going wrong?

NF = M.createFunction(...., F->getDebugScope());
SILBasicBlock *NFBody = NF->createBasicBlock();
SILBuilder NFBuilder(NFBody);
SILOpenedArchetypesTracker OpenedArchetypesTrackerNF(NF);
NFBuilder.setOpenedArchetypesTracker(&OpenedArchetypesTrackerNF);
NFBuilder.setCurrentDebugScope(NFBody->getParent()->getDebugScope());
...
for (auto &param : params) { /* Assume all are generic types */
  auto GenericsSILType = ....
  auto NewArg = NFBody->createFunctionArgument(GenericSILType);
  auto Conformances = Mod->lookupConformance(...);
  auto *InitRef = NFBuilder.createInitExistentialRef( Loc,
ArgDesc.Arg->getType(),
NewArg->getType().getSwiftRValueType()->getCanonicalType(), NewArg,
Conformances);
  ...
}

The InitRef instruction created above runs into SIL verifier error:

SIL verification failed: debug scope of instruction belongs to a different
function: !DS || DS->getParentFunction() == I->getFunction()
Verifying instruction:
   %0 = argument of bb0 : $τ_0_0                 // user: %1
->   %1 = init_existential_ref %0 : $τ_0_0 : $τ_0_0, $SomeProtocol // user:
%2

The SIL looks correct to me though.

--Raj
_______________________________________________
swift-dev mailing list
swift-dev@swift.org
https://lists.swift.org/mailman/listinfo/swift-dev

Reply via email to