<div dir="ltr">Thanks Mark. You are right, the following assertion fails<div><br></div><div><div>require(!DS || DS-&gt;getParentFunction() == I-&gt;getFunction(),</div><div>            &quot;debug scope of instruction belongs to a different function&quot;);</div></div><div><br></div><div>I am not sure if we need such a check.  </div></div><div class="gmail_extra"><br><div class="gmail_quote">On Mon, Jan 15, 2018 at 4:16 PM, Mark Lacey <span dir="ltr">&lt;<a href="mailto:mark.lacey@apple.com" target="_blank">mark.lacey@apple.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div style="word-wrap:break-word;line-break:after-white-space"><br><div><span class=""><br><blockquote type="cite"><div>On Jan 15, 2018, at 12:54 PM, Raj Barik &lt;<a href="mailto:rkbarik@gmail.com" target="_blank">rkbarik@gmail.com</a>&gt; wrote:</div><br class="m_3833984575572660261Apple-interchange-newline"><div><div dir="ltr">Mark,<div><br></div><div>Thanks a lot for quick reply.</div><div> </div><div>Is there any reason this interface in SILInstruction should be private?</div><div>void setDebugScope(SILBuilder &amp;B, const SILDebugScope *DS);<br></div><div><br></div><div>In my case, I am splicing the old F into the new function NF. While splicing retains the debug scope, the new instruction (InitRef) that I am adding to NF is being created in some random scope (not F) even though I explicitly make Builder&#39;s debug scope point to F&#39;s. </div></div></div></blockquote><div><br></div></span><div>The assert you originally hit appears to indicate that the parentFunction of the debug scope for an instruction should be the same as the function the instruction is in. I am not very familiar with the requirements of our debug information and debug scopes, but this seems like a reasonable expectation.</div><div><br></div><div>I suggested looking at SILCloner because it is the primary way by which we clone functions, and clearly has to deal with debug scopes when it does so.</div><div><br></div><div>I’m not sure how much more help I can be on this matter, but perhaps someone more knowledgable can chime in.</div><span class="HOEnZb"><font color="#888888"><div><br></div><div>Mark</div></font></span><div><div class="h5"><div><br></div><div><br></div><div><br></div><br><blockquote type="cite"><div><div dir="ltr"><div><br></div><div>Best,</div><div>Raj</div><div><br></div><div><br></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Mon, Jan 15, 2018 at 9:52 AM, Mark Lacey <span dir="ltr">&lt;<a href="mailto:mark.lacey@apple.com" target="_blank">mark.lacey@apple.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">I’d suggest looking at SILCloner.h as well as ScopeCloner in SILBasicBlock.cpp to see how they are dealing with debug scopes.<br>
<br>
Mark<br>
<div><div class="m_3833984575572660261h5"><br>
&gt; On Jan 15, 2018, at 9:24 AM, Raj Barik via swift-dev &lt;<a href="mailto:swift-dev@swift.org" target="_blank">swift-dev@swift.org</a>&gt; wrote:<br>
&gt;<br>
&gt; Hi,<br>
&gt;<br>
&gt; 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?<br>
&gt;<br>
&gt; NF = M.createFunction(...., F-&gt;getDebugScope());<br>
&gt; SILBasicBlock *NFBody = NF-&gt;createBasicBlock();<br>
&gt; SILBuilder NFBuilder(NFBody);<br>
&gt; SILOpenedArchetypesTracker OpenedArchetypesTrackerNF(NF);<br>
&gt; NFBuilder.setOpenedArchetypesT<wbr>racker(&amp;OpenedArchetypesTracke<wbr>rNF);<br>
&gt; NFBuilder.setCurrentDebugScope<wbr>(NFBody-&gt;getParent()-&gt;<wbr>getDebugScope());<br>
&gt; ...<br>
&gt; for (auto &amp;param : params) { /* Assume all are generic types */<br>
&gt;   auto GenericsSILType = ....<br>
&gt;   auto NewArg = NFBody-&gt;createFunctionArgument<wbr>(GenericSILType);<br>
&gt;   auto Conformances = Mod-&gt;lookupConformance(...);<br>
&gt;   auto *InitRef = NFBuilder.createInitExistentia<wbr>lRef( Loc, ArgDesc.Arg-&gt;getType(), NewArg-&gt;getType().getSwiftRVal<wbr>ueType()-&gt;getCanonicalType(), NewArg, Conformances);<br>
&gt;   ...<br>
&gt; }<br>
&gt;<br>
&gt; The InitRef instruction created above runs into SIL verifier error:<br>
&gt;<br>
&gt; SIL verification failed: debug scope of instruction belongs to a different function: !DS || DS-&gt;getParentFunction() == I-&gt;getFunction()<br>
&gt; Verifying instruction:<br>
&gt;    %0 = argument of bb0 : $τ_0_0                 // user: %1<br>
&gt; -&gt;   %1 = init_existential_ref %0 : $τ_0_0 : $τ_0_0, $SomeProtocol // user: %2<br>
&gt;<br>
&gt; The SIL looks correct to me though.<br>
&gt;<br>
&gt; --Raj<br>
</div></div>&gt; ______________________________<wbr>_________________<br>
&gt; swift-dev mailing list<br>
&gt; <a href="mailto:swift-dev@swift.org" target="_blank">swift-dev@swift.org</a><br>
&gt; <a href="https://lists.swift.org/mailman/listinfo/swift-dev" rel="noreferrer" target="_blank">https://lists.swift.org/mailma<wbr>n/listinfo/swift-dev</a><br>
<br>
</blockquote></div><br></div>
</div></blockquote></div></div></div><br></div></blockquote></div><br></div>