<div dir="ltr"><br><div class="gmail_extra"><br><div class="gmail_quote">On Wed, Feb 15, 2017 at 8:31 AM, David Blaikie <span dir="ltr"><<a href="mailto:dblaikie@gmail.com" target="_blank">dblaikie@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><br><br><div class="gmail_quote"><span class="gmail-"><div dir="ltr">On Wed, Feb 15, 2017 at 7:46 AM Teresa Johnson <<a href="mailto:tejohnson@google.com" target="_blank">tejohnson@google.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr" class="gmail-m_-4606175218847169607gmail_msg"><div class="gmail_extra gmail-m_-4606175218847169607gmail_msg"><div class="gmail_quote gmail-m_-4606175218847169607gmail_msg">On Tue, Feb 14, 2017 at 7:55 PM, Teresa Johnson <span dir="ltr" class="gmail-m_-4606175218847169607gmail_msg"><<a href="mailto:tejohnson@google.com" class="gmail-m_-4606175218847169607gmail_msg" target="_blank">tejohnson@google.com</a>></span> wrote:<br class="gmail-m_-4606175218847169607gmail_msg"><blockquote class="gmail_quote gmail-m_-4606175218847169607gmail_msg" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr" class="gmail-m_-4606175218847169607gmail_msg"><br class="gmail-m_-4606175218847169607gmail_msg"><div class="gmail_extra gmail-m_-4606175218847169607gmail_msg"><br class="gmail-m_-4606175218847169607gmail_msg"><div class="gmail_quote gmail-m_-4606175218847169607gmail_msg"><span class="gmail-m_-4606175218847169607m_8095805773368322678gmail-m_5490049026779165918gmail- gmail-m_-4606175218847169607gmail_msg">On Tue, Feb 14, 2017 at 2:36 PM, David Blaikie <span dir="ltr" class="gmail-m_-4606175218847169607gmail_msg"><<a href="mailto:dblaikie@gmail.com" class="gmail-m_-4606175218847169607gmail_msg" target="_blank">dblaikie@gmail.com</a>></span> wrote:<br class="gmail-m_-4606175218847169607gmail_msg"></span><span class="gmail-m_-4606175218847169607m_8095805773368322678gmail-m_5490049026779165918gmail- gmail-m_-4606175218847169607gmail_msg"><blockquote class="gmail_quote gmail-m_-4606175218847169607gmail_msg" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr" class="gmail-m_-4606175218847169607gmail_msg">I think this is probably the right thing (patch attached, and text here for readability):<br class="gmail-m_-4606175218847169607gmail_msg"><br class="gmail-m_-4606175218847169607gmail_msg"><div class="gmail-m_-4606175218847169607gmail_msg">diff --git lib/CodeGen/LexicalScopes.cpp lib/CodeGen/LexicalScopes.cpp</div><div class="gmail-m_-4606175218847169607gmail_msg">index fc84ddb1f6b..31203689b3a 100644</div><div class="gmail-m_-4606175218847169607gmail_msg">--- lib/CodeGen/LexicalScopes.cpp</div><div class="gmail-m_-4606175218847169607gmail_msg">+++ lib/CodeGen/LexicalScopes.cpp</div><div class="gmail-m_-4606175218847169607gmail_msg">@@ -127,6 +127,9 @@ LexicalScope *LexicalScopes::<wbr>findLexicalScope(const DILocation *DL) {</div><div class="gmail-m_-4606175218847169607gmail_msg"> LexicalScope *LexicalScopes::<wbr>getOrCreateLexicalScope(const DILocalScope *Scope,</div><div class="gmail-m_-4606175218847169607gmail_msg">                                                      const DILocation *IA) {</div><div class="gmail-m_-4606175218847169607gmail_msg">   if (IA) {</div><div class="gmail-m_-4606175218847169607gmail_msg">+    if (Scope->getSubprogram()-><wbr>getUnit()->getEmissionKind() ==</div><div class="gmail-m_-4606175218847169607gmail_msg">+        DICompileUnit::NoDebug)</div><div class="gmail-m_-4606175218847169607gmail_msg">+      return getOrCreateLexicalScope(IA-><wbr>getScope());</div></div></blockquote><div class="gmail-m_-4606175218847169607gmail_msg"><br class="gmail-m_-4606175218847169607gmail_msg"></div></span><div class="gmail-m_-4606175218847169607gmail_msg">I had to change the above line slightly, to:</div><div class="gmail-m_-4606175218847169607gmail_msg">   return getOrCreateLexicalScope(IA);</div><div class="gmail-m_-4606175218847169607gmail_msg"><br class="gmail-m_-4606175218847169607gmail_msg"></div><div class="gmail-m_-4606175218847169607gmail_msg">(which essentially ends up mapping to: "return getOrCreateLexicalScope(IA-><wbr>getScope(), IA->getInlinedAt());")</div><div class="gmail-m_-4606175218847169607gmail_msg"><br class="gmail-m_-4606175218847169607gmail_msg"></div><div class="gmail-m_-4606175218847169607gmail_msg">Otherwise, with the source file I tried, I the new recursive call to getOrCreateLexicalScope (where the IA->getScope() passed it was also in the NoDebug CU) ended up calling getOrCreateRegularScope, which asserted because Parent==nullptr and CurrentFnLexicalScope != nullptr.</div><div class="gmail-m_-4606175218847169607gmail_msg"><br class="gmail-m_-4606175218847169607gmail_msg"></div><div class="gmail-m_-4606175218847169607gmail_msg">Does my tweak make sense?</div></div></div></div></blockquote><div class="gmail-m_-4606175218847169607gmail_msg"><br class="gmail-m_-4606175218847169607gmail_msg"></div></div></div></div><div dir="ltr" class="gmail-m_-4606175218847169607gmail_msg"><div class="gmail_extra gmail-m_-4606175218847169607gmail_msg"><div class="gmail_quote gmail-m_-4606175218847169607gmail_msg"><div class="gmail-m_-4606175218847169607gmail_msg">I verified that your change + my tweak (along with the original fix in extractLexicalScopes) allows the entire internal app to build.</div></div></div></div></blockquote></span><div><br>Cool - I'm trying to understand/think about whether the original fix in extractLexicalScopes is avoidable - I'd like to try to consolidate/collapse the state space as much as possible rather than having several pieces, if possible.<br> </div><span class="gmail-"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr" class="gmail-m_-4606175218847169607gmail_msg"><div class="gmail_extra gmail-m_-4606175218847169607gmail_msg"><div class="gmail_quote gmail-m_-4606175218847169607gmail_msg"><div class="gmail-m_-4606175218847169607gmail_msg">However, I went back and tried your below test case with these changes + some extra assertion checking. I added asserts in getOrCreateLexicalScope on the new LexicalScope returned by both getOrCreateInlinedScope and getOrCreateRegularScope, to ensure that neither is from a NoDebug CU.<br></div></div></div></div></blockquote></span><div><br>Ah, good idea!<br> </div><span class="gmail-"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr" class="gmail-m_-4606175218847169607gmail_msg"><div class="gmail_extra gmail-m_-4606175218847169607gmail_msg"><div class="gmail_quote gmail-m_-4606175218847169607gmail_msg"><div class="gmail-m_-4606175218847169607gmail_msg"><br class="gmail-m_-4606175218847169607gmail_msg"></div><div class="gmail-m_-4606175218847169607gmail_msg">Without the above fix, we as expected hit one of these asserts when we have called getOrCreateInlinedScope for f3, when extracting lexical scopes for f4 (which has f3 and f2 inlined into it).</div><div class="gmail-m_-4606175218847169607gmail_msg"><br class="gmail-m_-4606175218847169607gmail_msg"></div><div class="gmail-m_-4606175218847169607gmail_msg">However, with the above fix, we hit the assert when checking the return of getOrCreateRegularScope. This happens when extracting lexical scopes for f3, which has f2 inlined into it. </div></div></div></div></blockquote><div><br></div></span><div>f3 is the nodebug function, right? I imagine LexicalScopes should never be built for f3. So I'd probably look at why they're built at all, rather than trying to make building them work (& again, could have an assertion to check that it never happens)</div></div></div></blockquote><div><br></div><div>The check added previously in this patch was to the instruction's SP within the function, and in this case we had an instruction from f2 (inlined into f3). I just confirmed that I can also fix the new issue in the test case by adding the following check so that we never extractLexicalScopes in a NoDebug function:</div><div><br></div><div><div> /// initialize - Scan machine function and constuct lexical scope nest.</div><div> void LexicalScopes::initialize(const MachineFunction &Fn) {</div><div>+  if (Fn.getFunction()->getSubprogram()->getUnit()->getEmissionKind() ==</div><div>+      DICompileUnit::NoDebug)</div><div>+    return;</div></div><div><br></div><div>(this is just above the invocation of extractLexicalScopes). I.e. instead of adding the new guard before invoking getOrCreateRegularScope. I can use that fix instead, since you're right, it doesn't make sense to attempt any lexical scope creation for this function.</div><div><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div class="gmail_quote"><span class="gmail-"><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr" class="gmail-m_-4606175218847169607gmail_msg"><div class="gmail_extra gmail-m_-4606175218847169607gmail_msg"><div class="gmail_quote gmail-m_-4606175218847169607gmail_msg"><div class="gmail-m_-4606175218847169607gmail_msg">In that case when we call getOrCreateLexicalScope for the Scope f3 (invoked from getOrCreateInlinedScope for f2), it does not have an inlinedAt so we instead invoke getOrCreateRegularScope, which did not have the new check. Interestingly, this does not hit the original AsmPrinter failure I saw when trying to generate dwarf DIEs. However, I assume we want to be consistent and not have the LexicalScope generated ever for a NoDebug CU's SPs, right?</div><div class="gmail-m_-4606175218847169607gmail_msg"><br class="gmail-m_-4606175218847169607gmail_msg"></div><div class="gmail-m_-4606175218847169607gmail_msg">I fixed the above issue by adding the following before invoking <wbr>getOrCreateRegularScope from getOrCreateLexicalScope:</div><div class="gmail-m_-4606175218847169607gmail_msg"><br class="gmail-m_-4606175218847169607gmail_msg"></div><div class="gmail-m_-4606175218847169607gmail_msg"></div></div></div></div><div dir="ltr" class="gmail-m_-4606175218847169607gmail_msg"><div class="gmail_extra gmail-m_-4606175218847169607gmail_msg"><div class="gmail_quote gmail-m_-4606175218847169607gmail_msg"><div class="gmail-m_-4606175218847169607gmail_msg"><div class="gmail-m_-4606175218847169607gmail_msg">  if (Scope->getSubprogram()-><wbr>getUnit()->getEmissionKind() ==</div></div></div></div></div><div dir="ltr" class="gmail-m_-4606175218847169607gmail_msg"><div class="gmail_extra gmail-m_-4606175218847169607gmail_msg"><div class="gmail_quote gmail-m_-4606175218847169607gmail_msg"><div class="gmail-m_-4606175218847169607gmail_msg"><div class="gmail-m_-4606175218847169607gmail_msg">      DICompileUnit::NoDebug)</div><div class="gmail-m_-4606175218847169607gmail_msg">    return nullptr;</div></div><div class="gmail-m_-4606175218847169607gmail_msg"><br class="gmail-m_-4606175218847169607gmail_msg"></div><div class="gmail-m_-4606175218847169607gmail_msg">I think it may be useful to add in some NDEBUG assertion checking like the kind I had that caught the above issue, to ensure we never create a LexicalScope for a NoDebug CU - does that sound reasonable? I am going to rebuild the internal app with the above fix and assertion checking added.</div></div></div></div></blockquote><div><br></div></span><div>Sure, sounds reasonable/good. Not sure which/where the best spot for the asserts would be, but certainly sounds like suring up some invariants here would be a good thing.</div></div></div></blockquote><div><br></div><div>I decided to add an assert before the returns of getOrCreateInlinedScope and getOrCreateRegularScope when we have constructed a new LexicalScope (presumably not needed before the earlier return if we found an existing LexicalScope in the map).</div><div><br></div><div>I'll finish testing with the latest fixes and update the patch including the test case.</div><div><br></div><div>Thanks,</div><div>Teresa</div><div><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div class="gmail_quote"><span class="gmail-"><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr" class="gmail-m_-4606175218847169607gmail_msg"><div class="gmail_extra gmail-m_-4606175218847169607gmail_msg"><div class="gmail_quote gmail-m_-4606175218847169607gmail_msg"><div class="gmail-m_-4606175218847169607gmail_msg"><br class="gmail-m_-4606175218847169607gmail_msg"></div><div class="gmail-m_-4606175218847169607gmail_msg">Also, I noticed that one of the first things done in both getOrCreateInlinedScope and getOrCreateRegularScope is:</div><div class="gmail-m_-4606175218847169607gmail_msg">  Scope = Scope-><wbr>getNonLexicalBlockFileScope();<br class="gmail-m_-4606175218847169607gmail_msg"></div><div class="gmail-m_-4606175218847169607gmail_msg">Do we need to check this resulting Scope, or will it always be the case that both the original and new Scope above will come from the same CU? I am not familiar with LexicalBlockFileScope and there aren't any comments about this class in DebugInfoMetadata.h. =(</div></div></div></div></blockquote></span><div><br>LexicalBlockFile is for changes to the current file that don't change the scope (eg: if a file is textually #included inside a function definition, the file would change). Scope->getSubprogram() and Scope-><wbr>getNonLexicalBlockFileScope()-<wbr>>getSubprogram() should always be the same, I believe.<br><br>- Dave<br> </div><div><div class="gmail-h5"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr" class="gmail-m_-4606175218847169607gmail_msg"><div class="gmail_extra gmail-m_-4606175218847169607gmail_msg"><div class="gmail_quote gmail-m_-4606175218847169607gmail_msg"><div class="gmail-m_-4606175218847169607gmail_msg"><br class="gmail-m_-4606175218847169607gmail_msg"></div><div class="gmail-m_-4606175218847169607gmail_msg">Thanks,</div><div class="gmail-m_-4606175218847169607gmail_msg">Teresa</div></div></div></div><div dir="ltr" class="gmail-m_-4606175218847169607gmail_msg"><div class="gmail_extra gmail-m_-4606175218847169607gmail_msg"><div class="gmail_quote gmail-m_-4606175218847169607gmail_msg"><div class="gmail-m_-4606175218847169607gmail_msg"><br class="gmail-m_-4606175218847169607gmail_msg"></div><blockquote class="gmail_quote gmail-m_-4606175218847169607gmail_msg" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr" class="gmail-m_-4606175218847169607gmail_msg"><div class="gmail_extra gmail-m_-4606175218847169607gmail_msg"><div class="gmail_quote gmail-m_-4606175218847169607gmail_msg"><span class="gmail-m_-4606175218847169607m_8095805773368322678gmail-m_5490049026779165918gmail-HOEnZb gmail-m_-4606175218847169607gmail_msg"><font color="#888888" class="gmail-m_-4606175218847169607gmail_msg"><div class="gmail-m_-4606175218847169607gmail_msg"><br class="gmail-m_-4606175218847169607gmail_msg"></div><div class="gmail-m_-4606175218847169607gmail_msg">Teresa</div></font></span><div class="gmail-m_-4606175218847169607gmail_msg"><div class="gmail-m_-4606175218847169607m_8095805773368322678gmail-m_5490049026779165918gmail-h5 gmail-m_-4606175218847169607gmail_msg"><div class="gmail-m_-4606175218847169607gmail_msg"><br class="gmail-m_-4606175218847169607gmail_msg"></div><blockquote class="gmail_quote gmail-m_-4606175218847169607gmail_msg" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr" class="gmail-m_-4606175218847169607gmail_msg"><div class="gmail-m_-4606175218847169607gmail_msg">     // Create an abstract scope for inlined function.</div><div class="gmail-m_-4606175218847169607gmail_msg">     getOrCreateAbstractScope(<wbr>Scope);</div><div class="gmail-m_-4606175218847169607gmail_msg">     // Create an inlined scope for inlined function.<br class="gmail-m_-4606175218847169607gmail_msg"><br class="gmail-m_-4606175218847169607gmail_msg">And here's my test case:<br class="gmail-m_-4606175218847169607gmail_msg"><br class="gmail-m_-4606175218847169607gmail_msg"><div class="gmail-m_-4606175218847169607gmail_msg"><font face="monospace" class="gmail-m_-4606175218847169607gmail_msg">$ cat a.cpp</font></div><div class="gmail-m_-4606175218847169607gmail_msg"><font face="monospace" class="gmail-m_-4606175218847169607gmail_msg">void f1();</font></div><div class="gmail-m_-4606175218847169607gmail_msg"><font face="monospace" class="gmail-m_-4606175218847169607gmail_msg">__attribute__((always_inline)) void f2() {</font></div><div class="gmail-m_-4606175218847169607gmail_msg"><font face="monospace" class="gmail-m_-4606175218847169607gmail_msg">  f1();</font></div><div class="gmail-m_-4606175218847169607gmail_msg"><font face="monospace" class="gmail-m_-4606175218847169607gmail_msg">}</font></div><div class="gmail-m_-4606175218847169607gmail_msg"><font face="monospace" class="gmail-m_-4606175218847169607gmail_msg">void f3();</font></div><div class="gmail-m_-4606175218847169607gmail_msg"><font face="monospace" class="gmail-m_-4606175218847169607gmail_msg">void f4() {</font></div><div class="gmail-m_-4606175218847169607gmail_msg"><font face="monospace" class="gmail-m_-4606175218847169607gmail_msg">  f3();</font></div><div class="gmail-m_-4606175218847169607gmail_msg"><font face="monospace" class="gmail-m_-4606175218847169607gmail_msg">}</font></div><div class="gmail-m_-4606175218847169607gmail_msg"><font face="monospace" class="gmail-m_-4606175218847169607gmail_msg">$ cat b.cpp</font></div><div class="gmail-m_-4606175218847169607gmail_msg"><font face="monospace" class="gmail-m_-4606175218847169607gmail_msg">void f2();</font></div><div class="gmail-m_-4606175218847169607gmail_msg"><font face="monospace" class="gmail-m_-4606175218847169607gmail_msg">__attribute__((always_inline)) void f3() {</font></div><div class="gmail-m_-4606175218847169607gmail_msg"><font face="monospace" class="gmail-m_-4606175218847169607gmail_msg">  f2();</font></div><div class="gmail-m_-4606175218847169607gmail_msg"><font face="monospace" class="gmail-m_-4606175218847169607gmail_msg">}</font></div></div><div class="gmail-m_-4606175218847169607gmail_msg"><font face="monospace" class="gmail-m_-4606175218847169607gmail_msg">$ clang++ -flto a.cpp -g -c</font></div><div class="gmail-m_-4606175218847169607gmail_msg"><font face="monospace" class="gmail-m_-4606175218847169607gmail_msg">$ clang++ -flto b.cpp -Rpass=inline -c</font></div><div class="gmail-m_-4606175218847169607gmail_msg"><font face="monospace" class="gmail-m_-4606175218847169607gmail_msg">$ llvm-link {a,b}.o -o - | opt -O2 - -o ab.bc</font></div><div class="gmail-m_-4606175218847169607gmail_msg"><font face="monospace" class="gmail-m_-4606175218847169607gmail_msg">$ llc ab.bc</font></div><br class="gmail-m_-4606175218847169607gmail_msg"><br class="gmail-m_-4606175218847169607gmail_msg">It might be worth testing with more than one level of nodebug function in the middle (f2_1, f2_2) - my first pass I called "getOrCreateRegularScope" which would've been incorrect in that case, I think. (you could change it back to that, demonstrate that it breaks, and that using getOrCreateLexicalScope fixes it - if you like) - I'm not sure I'd bother committing such test cases - this one seems to suffice, but just for some general confidence in the change.<br class="gmail-m_-4606175218847169607gmail_msg"><br class="gmail-m_-4606175218847169607gmail_msg">But it's probably good as-is/without worrying too much, I think.<br class="gmail-m_-4606175218847169607gmail_msg"><br class="gmail-m_-4606175218847169607gmail_msg">- Dave<div class="gmail-m_-4606175218847169607gmail_msg"><div class="gmail-m_-4606175218847169607m_8095805773368322678gmail-m_5490049026779165918gmail-m_5704362587694747824gmail-h5 gmail-m_-4606175218847169607gmail_msg"><br class="gmail-m_-4606175218847169607gmail_msg"><br class="gmail-m_-4606175218847169607gmail_msg"><div class="gmail_quote gmail-m_-4606175218847169607gmail_msg"><div dir="ltr" class="gmail-m_-4606175218847169607gmail_msg">On Tue, Feb 14, 2017 at 9:48 AM David Blaikie <<a href="mailto:dblaikie@gmail.com" class="gmail-m_-4606175218847169607gmail_msg" target="_blank">dblaikie@gmail.com</a>> wrote:<br class="gmail-m_-4606175218847169607gmail_msg"></div><blockquote class="gmail_quote gmail-m_-4606175218847169607gmail_msg" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr" class="gmail-m_-4606175218847169607m_8095805773368322678gmail-m_5490049026779165918gmail-m_5704362587694747824gmail-m_8251086938961588333gmail_msg gmail-m_-4606175218847169607gmail_msg"><div class="gmail_quote gmail-m_-4606175218847169607m_8095805773368322678gmail-m_5490049026779165918gmail-m_5704362587694747824gmail-m_8251086938961588333gmail_msg gmail-m_-4606175218847169607gmail_msg"><div dir="ltr" class="gmail-m_-4606175218847169607m_8095805773368322678gmail-m_5490049026779165918gmail-m_5704362587694747824gmail-m_8251086938961588333gmail_msg gmail-m_-4606175218847169607gmail_msg">On Tue, Feb 14, 2017 at 9:41 AM Teresa Johnson via Phabricator <<a href="mailto:reviews@reviews.llvm.org" class="gmail-m_-4606175218847169607m_8095805773368322678gmail-m_5490049026779165918gmail-m_5704362587694747824gmail-m_8251086938961588333gmail_msg gmail-m_-4606175218847169607gmail_msg" target="_blank">reviews@reviews.llvm.org</a>> wrote:<br class="gmail-m_-4606175218847169607m_8095805773368322678gmail-m_5490049026779165918gmail-m_5704362587694747824gmail-m_8251086938961588333gmail_msg gmail-m_-4606175218847169607gmail_msg"></div><blockquote class="gmail_quote gmail-m_-4606175218847169607m_8095805773368322678gmail-m_5490049026779165918gmail-m_5704362587694747824gmail-m_8251086938961588333gmail_msg gmail-m_-4606175218847169607gmail_msg" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">tejohnson added inline comments.<br class="gmail-m_-4606175218847169607m_8095805773368322678gmail-m_5490049026779165918gmail-m_5704362587694747824gmail-m_8251086938961588333gmail_msg gmail-m_-4606175218847169607gmail_msg">
<br class="gmail-m_-4606175218847169607m_8095805773368322678gmail-m_5490049026779165918gmail-m_5704362587694747824gmail-m_8251086938961588333gmail_msg gmail-m_-4606175218847169607gmail_msg">
<br class="gmail-m_-4606175218847169607m_8095805773368322678gmail-m_5490049026779165918gmail-m_5704362587694747824gmail-m_8251086938961588333gmail_msg gmail-m_-4606175218847169607gmail_msg">
================<br class="gmail-m_-4606175218847169607m_8095805773368322678gmail-m_5490049026779165918gmail-m_5704362587694747824gmail-m_8251086938961588333gmail_msg gmail-m_-4606175218847169607gmail_msg">
Comment at: lib/CodeGen/LexicalScopes.cpp:<wbr>82<br class="gmail-m_-4606175218847169607m_8095805773368322678gmail-m_5490049026779165918gmail-m_5704362587694747824gmail-m_8251086938961588333gmail_msg gmail-m_-4606175218847169607gmail_msg">
+      // Ignore locations linked from a NoDebug compile unit.<br class="gmail-m_-4606175218847169607m_8095805773368322678gmail-m_5490049026779165918gmail-m_5704362587694747824gmail-m_8251086938961588333gmail_msg gmail-m_-4606175218847169607gmail_msg">
+      auto *SP = dyn_cast<DISubprogram>(MIDL-><wbr>getScope());<br class="gmail-m_-4606175218847169607m_8095805773368322678gmail-m_5490049026779165918gmail-m_5704362587694747824gmail-m_8251086938961588333gmail_msg gmail-m_-4606175218847169607gmail_msg">
+      if (SP && SP->getUnit()-><wbr>getEmissionKind() == DICompileUnit::NoDebug) {<br class="gmail-m_-4606175218847169607m_8095805773368322678gmail-m_5490049026779165918gmail-m_5704362587694747824gmail-m_8251086938961588333gmail_msg gmail-m_-4606175218847169607gmail_msg">
----------------<br class="gmail-m_-4606175218847169607m_8095805773368322678gmail-m_5490049026779165918gmail-m_5704362587694747824gmail-m_8251086938961588333gmail_msg gmail-m_-4606175218847169607gmail_msg">
dblaikie wrote:<br class="gmail-m_-4606175218847169607m_8095805773368322678gmail-m_5490049026779165918gmail-m_5704362587694747824gmail-m_8251086938961588333gmail_msg gmail-m_-4606175218847169607gmail_msg">
> This probably won't catch all cases - if the location was in a subscope within the function (eg: try adding a {} to the function which should add an extra scope). Walking the scope chain until a DISubprogram is probably needed here - I forget if we have a nice wrapped up utility for that. Don't see one at a glance.<br class="gmail-m_-4606175218847169607m_8095805773368322678gmail-m_5490049026779165918gmail-m_5704362587694747824gmail-m_8251086938961588333gmail_msg gmail-m_-4606175218847169607gmail_msg">
><br class="gmail-m_-4606175218847169607m_8095805773368322678gmail-m_5490049026779165918gmail-m_5704362587694747824gmail-m_8251086938961588333gmail_msg gmail-m_-4606175218847169607gmail_msg">
> It should be an invariant/guaranteed that a DISubprogram is reached (& is the end of the scope chain), so something like:<br class="gmail-m_-4606175218847169607m_8095805773368322678gmail-m_5490049026779165918gmail-m_5704362587694747824gmail-m_8251086938961588333gmail_msg gmail-m_-4606175218847169607gmail_msg">
><br class="gmail-m_-4606175218847169607m_8095805773368322678gmail-m_5490049026779165918gmail-m_5704362587694747824gmail-m_8251086938961588333gmail_msg gmail-m_-4606175218847169607gmail_msg">
> oh, wait, no, here it is: <a href="http://llvm.org/docs/doxygen/html/classllvm_1_1DILocalScope.html#a747dd1690fc477a8d9638fa37a30ced8" rel="noreferrer" class="gmail-m_-4606175218847169607m_8095805773368322678gmail-m_5490049026779165918gmail-m_5704362587694747824gmail-m_8251086938961588333gmail_msg gmail-m_-4606175218847169607gmail_msg" target="_blank">http://llvm.org/docs/doxygen/<wbr>html/classllvm_1_<wbr>1DILocalScope.html#<wbr>a747dd1690fc477a8d9638fa37a30c<wbr>ed8</a><br class="gmail-m_-4606175218847169607m_8095805773368322678gmail-m_5490049026779165918gmail-m_5704362587694747824gmail-m_8251086938961588333gmail_msg gmail-m_-4606175218847169607gmail_msg">
><br class="gmail-m_-4606175218847169607m_8095805773368322678gmail-m_5490049026779165918gmail-m_5704362587694747824gmail-m_8251086938961588333gmail_msg gmail-m_-4606175218847169607gmail_msg">
> so, I think, maybe:<br class="gmail-m_-4606175218847169607m_8095805773368322678gmail-m_5490049026779165918gmail-m_5704362587694747824gmail-m_8251086938961588333gmail_msg gmail-m_-4606175218847169607gmail_msg">
><br class="gmail-m_-4606175218847169607m_8095805773368322678gmail-m_5490049026779165918gmail-m_5704362587694747824gmail-m_8251086938961588333gmail_msg gmail-m_-4606175218847169607gmail_msg">
>   if (cast<DILocalScope>(MIDL-><wbr>getScope())->getSubprogram()-><wbr>getUnit()->getEmissionKind() == DICompileUnit::NoDebug) {<br class="gmail-m_-4606175218847169607m_8095805773368322678gmail-m_5490049026779165918gmail-m_5704362587694747824gmail-m_8251086938961588333gmail_msg gmail-m_-4606175218847169607gmail_msg">
>     ...<br class="gmail-m_-4606175218847169607m_8095805773368322678gmail-m_5490049026779165918gmail-m_5704362587694747824gmail-m_8251086938961588333gmail_msg gmail-m_-4606175218847169607gmail_msg">
I had just found the DILocalScope::getSubprogram() helper, since I was still getting the original seg fault when I tried the original failing internal code with this change. So now I have:<br class="gmail-m_-4606175218847169607m_8095805773368322678gmail-m_5490049026779165918gmail-m_5704362587694747824gmail-m_8251086938961588333gmail_msg gmail-m_-4606175218847169607gmail_msg">
<br class="gmail-m_-4606175218847169607m_8095805773368322678gmail-m_5490049026779165918gmail-m_5704362587694747824gmail-m_8251086938961588333gmail_msg gmail-m_-4606175218847169607gmail_msg">
      // Ignore locations linked from a NoDebug compile unit.<br class="gmail-m_-4606175218847169607m_8095805773368322678gmail-m_5490049026779165918gmail-m_5704362587694747824gmail-m_8251086938961588333gmail_msg gmail-m_-4606175218847169607gmail_msg">
      auto *SP = MIDL->getScope()-><wbr>getSubprogram();<br class="gmail-m_-4606175218847169607m_8095805773368322678gmail-m_5490049026779165918gmail-m_5704362587694747824gmail-m_8251086938961588333gmail_msg gmail-m_-4606175218847169607gmail_msg">
      if (SP->getUnit()-><wbr>getEmissionKind() == DICompileUnit::NoDebug) {<br class="gmail-m_-4606175218847169607m_8095805773368322678gmail-m_5490049026779165918gmail-m_5704362587694747824gmail-m_8251086938961588333gmail_msg gmail-m_-4606175218847169607gmail_msg">
        PrevMI = &MInsn;<br class="gmail-m_-4606175218847169607m_8095805773368322678gmail-m_5490049026779165918gmail-m_5704362587694747824gmail-m_8251086938961588333gmail_msg gmail-m_-4606175218847169607gmail_msg">
        continue;<br class="gmail-m_-4606175218847169607m_8095805773368322678gmail-m_5490049026779165918gmail-m_5704362587694747824gmail-m_8251086938961588333gmail_msg gmail-m_-4606175218847169607gmail_msg">
      }<br class="gmail-m_-4606175218847169607m_8095805773368322678gmail-m_5490049026779165918gmail-m_5704362587694747824gmail-m_8251086938961588333gmail_msg gmail-m_-4606175218847169607gmail_msg">
<br class="gmail-m_-4606175218847169607m_8095805773368322678gmail-m_5490049026779165918gmail-m_5704362587694747824gmail-m_8251086938961588333gmail_msg gmail-m_-4606175218847169607gmail_msg">
(Don't need to cast MIDL->getScope() since it returns a DILocalScope).</blockquote><div class="gmail-m_-4606175218847169607m_8095805773368322678gmail-m_5490049026779165918gmail-m_5704362587694747824gmail-m_8251086938961588333gmail_msg gmail-m_-4606175218847169607gmail_msg"><br class="gmail-m_-4606175218847169607m_8095805773368322678gmail-m_5490049026779165918gmail-m_5704362587694747824gmail-m_8251086938961588333gmail_msg gmail-m_-4606175218847169607gmail_msg"></div></div></div><div dir="ltr" class="gmail-m_-4606175218847169607m_8095805773368322678gmail-m_5490049026779165918gmail-m_5704362587694747824gmail-m_8251086938961588333gmail_msg gmail-m_-4606175218847169607gmail_msg"><div class="gmail_quote gmail-m_-4606175218847169607m_8095805773368322678gmail-m_5490049026779165918gmail-m_5704362587694747824gmail-m_8251086938961588333gmail_msg gmail-m_-4606175218847169607gmail_msg"><div class="gmail-m_-4606175218847169607m_8095805773368322678gmail-m_5490049026779165918gmail-m_5704362587694747824gmail-m_8251086938961588333gmail_msg gmail-m_-4606175218847169607gmail_msg">Ah, handy!</div></div></div><div dir="ltr" class="gmail-m_-4606175218847169607m_8095805773368322678gmail-m_5490049026779165918gmail-m_5704362587694747824gmail-m_8251086938961588333gmail_msg gmail-m_-4606175218847169607gmail_msg"><div class="gmail_quote gmail-m_-4606175218847169607m_8095805773368322678gmail-m_5490049026779165918gmail-m_5704362587694747824gmail-m_8251086938961588333gmail_msg gmail-m_-4606175218847169607gmail_msg"><div class="gmail-m_-4606175218847169607m_8095805773368322678gmail-m_5490049026779165918gmail-m_5704362587694747824gmail-m_8251086938961588333gmail_msg gmail-m_-4606175218847169607gmail_msg"> </div><blockquote class="gmail_quote gmail-m_-4606175218847169607m_8095805773368322678gmail-m_5490049026779165918gmail-m_5704362587694747824gmail-m_8251086938961588333gmail_msg gmail-m_-4606175218847169607gmail_msg" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"> But I am *still* getting the original seg fault. Any idea what else I could be missing?<br class="gmail-m_-4606175218847169607m_8095805773368322678gmail-m_5490049026779165918gmail-m_5704362587694747824gmail-m_8251086938961588333gmail_msg gmail-m_-4606175218847169607gmail_msg"></blockquote><div class="gmail-m_-4606175218847169607m_8095805773368322678gmail-m_5490049026779165918gmail-m_5704362587694747824gmail-m_8251086938961588333gmail_msg gmail-m_-4606175218847169607gmail_msg"><br class="gmail-m_-4606175218847169607m_8095805773368322678gmail-m_5490049026779165918gmail-m_5704362587694747824gmail-m_8251086938961588333gmail_msg gmail-m_-4606175218847169607gmail_msg"></div></div></div><div dir="ltr" class="gmail-m_-4606175218847169607m_8095805773368322678gmail-m_5490049026779165918gmail-m_5704362587694747824gmail-m_8251086938961588333gmail_msg gmail-m_-4606175218847169607gmail_msg"><div class="gmail_quote gmail-m_-4606175218847169607m_8095805773368322678gmail-m_5490049026779165918gmail-m_5704362587694747824gmail-m_8251086938961588333gmail_msg gmail-m_-4606175218847169607gmail_msg"><div class="gmail-m_-4606175218847169607m_8095805773368322678gmail-m_5490049026779165918gmail-m_5704362587694747824gmail-m_8251086938961588333gmail_msg gmail-m_-4606175218847169607gmail_msg">Not sure, no, sorry :/ I know reducing LTO test cases is difficult, but if this works for the simple test case and doesn't in the original failing situation it'll be good to understand why.</div></div></div><div dir="ltr" class="gmail-m_-4606175218847169607m_8095805773368322678gmail-m_5490049026779165918gmail-m_5704362587694747824gmail-m_8251086938961588333gmail_msg gmail-m_-4606175218847169607gmail_msg"><div class="gmail_quote gmail-m_-4606175218847169607m_8095805773368322678gmail-m_5490049026779165918gmail-m_5704362587694747824gmail-m_8251086938961588333gmail_msg gmail-m_-4606175218847169607gmail_msg"><div class="gmail-m_-4606175218847169607m_8095805773368322678gmail-m_5490049026779165918gmail-m_5704362587694747824gmail-m_8251086938961588333gmail_msg gmail-m_-4606175218847169607gmail_msg"> </div><blockquote class="gmail_quote gmail-m_-4606175218847169607m_8095805773368322678gmail-m_5490049026779165918gmail-m_5704362587694747824gmail-m_8251086938961588333gmail_msg gmail-m_-4606175218847169607gmail_msg" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
<br class="gmail-m_-4606175218847169607m_8095805773368322678gmail-m_5490049026779165918gmail-m_5704362587694747824gmail-m_8251086938961588333gmail_msg gmail-m_-4606175218847169607gmail_msg">
<br class="gmail-m_-4606175218847169607m_8095805773368322678gmail-m_5490049026779165918gmail-m_5704362587694747824gmail-m_8251086938961588333gmail_msg gmail-m_-4606175218847169607gmail_msg">
================<br class="gmail-m_-4606175218847169607m_8095805773368322678gmail-m_5490049026779165918gmail-m_5704362587694747824gmail-m_8251086938961588333gmail_msg gmail-m_-4606175218847169607gmail_msg">
Comment at: test/DebugInfo/Generic/debug_<wbr>and_nodebug_CUs.ll:4<br class="gmail-m_-4606175218847169607m_8095805773368322678gmail-m_5490049026779165918gmail-m_5704362587694747824gmail-m_8251086938961588333gmail_msg gmail-m_-4606175218847169607gmail_msg">
+<br class="gmail-m_-4606175218847169607m_8095805773368322678gmail-m_5490049026779165918gmail-m_5704362587694747824gmail-m_8251086938961588333gmail_msg gmail-m_-4606175218847169607gmail_msg">
+; RUN: llc %s -o - | FileCheck %s<br class="gmail-m_-4606175218847169607m_8095805773368322678gmail-m_5490049026779165918gmail-m_5704362587694747824gmail-m_8251086938961588333gmail_msg gmail-m_-4606175218847169607gmail_msg">
+; CHECK-DAG: # debug.c:<br class="gmail-m_-4606175218847169607m_8095805773368322678gmail-m_5490049026779165918gmail-m_5704362587694747824gmail-m_8251086938961588333gmail_msg gmail-m_-4606175218847169607gmail_msg">
----------------<br class="gmail-m_-4606175218847169607m_8095805773368322678gmail-m_5490049026779165918gmail-m_5704362587694747824gmail-m_8251086938961588333gmail_msg gmail-m_-4606175218847169607gmail_msg">
dblaikie wrote:<br class="gmail-m_-4606175218847169607m_8095805773368322678gmail-m_5490049026779165918gmail-m_5704362587694747824gmail-m_8251086938961588333gmail_msg gmail-m_-4606175218847169607gmail_msg">
> Include the steps for reproducing this test case (basically the RUN lines, and the original C source/steps for producing the IR, from the first version of the test) - helps to visualize/document/reproduce the situation.<br class="gmail-m_-4606175218847169607m_8095805773368322678gmail-m_5490049026779165918gmail-m_5704362587694747824gmail-m_8251086938961588333gmail_msg gmail-m_-4606175218847169607gmail_msg">
Will do<br class="gmail-m_-4606175218847169607m_8095805773368322678gmail-m_5490049026779165918gmail-m_5704362587694747824gmail-m_8251086938961588333gmail_msg gmail-m_-4606175218847169607gmail_msg">
<br class="gmail-m_-4606175218847169607m_8095805773368322678gmail-m_5490049026779165918gmail-m_5704362587694747824gmail-m_8251086938961588333gmail_msg gmail-m_-4606175218847169607gmail_msg">
<br class="gmail-m_-4606175218847169607m_8095805773368322678gmail-m_5490049026779165918gmail-m_5704362587694747824gmail-m_8251086938961588333gmail_msg gmail-m_-4606175218847169607gmail_msg">
<a href="https://reviews.llvm.org/D29765" rel="noreferrer" class="gmail-m_-4606175218847169607m_8095805773368322678gmail-m_5490049026779165918gmail-m_5704362587694747824gmail-m_8251086938961588333gmail_msg gmail-m_-4606175218847169607gmail_msg" target="_blank">https://reviews.llvm.org/<wbr>D29765</a><br class="gmail-m_-4606175218847169607m_8095805773368322678gmail-m_5490049026779165918gmail-m_5704362587694747824gmail-m_8251086938961588333gmail_msg gmail-m_-4606175218847169607gmail_msg">
<br class="gmail-m_-4606175218847169607m_8095805773368322678gmail-m_5490049026779165918gmail-m_5704362587694747824gmail-m_8251086938961588333gmail_msg gmail-m_-4606175218847169607gmail_msg">
<br class="gmail-m_-4606175218847169607m_8095805773368322678gmail-m_5490049026779165918gmail-m_5704362587694747824gmail-m_8251086938961588333gmail_msg gmail-m_-4606175218847169607gmail_msg">
<br class="gmail-m_-4606175218847169607m_8095805773368322678gmail-m_5490049026779165918gmail-m_5704362587694747824gmail-m_8251086938961588333gmail_msg gmail-m_-4606175218847169607gmail_msg">
</blockquote></div></div></blockquote></div></div></div></div>
</blockquote></div></div></div><br class="gmail-m_-4606175218847169607gmail_msg"><br clear="all" class="gmail-m_-4606175218847169607gmail_msg"><span class="gmail-m_-4606175218847169607m_8095805773368322678gmail-m_5490049026779165918gmail- gmail-m_-4606175218847169607gmail_msg"><div class="gmail-m_-4606175218847169607gmail_msg"><br class="gmail-m_-4606175218847169607gmail_msg"></div>-- <br class="gmail-m_-4606175218847169607gmail_msg"><div class="gmail-m_-4606175218847169607m_8095805773368322678gmail-m_5490049026779165918gmail-m_5704362587694747824gmail_signature gmail-m_-4606175218847169607gmail_msg"><span style="font-family:times;font-size:medium" class="gmail-m_-4606175218847169607gmail_msg"><table cellspacing="0" cellpadding="0" class="gmail-m_-4606175218847169607gmail_msg"><tbody class="gmail-m_-4606175218847169607gmail_msg"><tr style="color:rgb(85,85,85);font-family:sans-serif;font-size:small" class="gmail-m_-4606175218847169607gmail_msg"><td nowrap style="border-top:2px solid rgb(213,15,37)" class="gmail-m_-4606175218847169607gmail_msg">Teresa Johnson |</td><td nowrap style="border-top:2px solid rgb(51,105,232)" class="gmail-m_-4606175218847169607gmail_msg"> Software Engineer |</td><td nowrap style="border-top:2px solid rgb(0,153,57)" class="gmail-m_-4606175218847169607gmail_msg"> <a href="mailto:tejohnson@google.com" class="gmail-m_-4606175218847169607gmail_msg" target="_blank">tejohnson@google.com</a> |</td><td nowrap style="border-top:2px solid rgb(238,178,17)" class="gmail-m_-4606175218847169607gmail_msg"> <a href="tel:(408)%20460-2413" value="+14084602413" class="gmail-m_-4606175218847169607gmail_msg" target="_blank">408-460-2413</a></td></tr></tbody></table></span></div>
</span></div></div>
</blockquote></div></div></div><div dir="ltr" class="gmail-m_-4606175218847169607gmail_msg"><div class="gmail_extra gmail-m_-4606175218847169607gmail_msg"><br class="gmail-m_-4606175218847169607gmail_msg"><br clear="all" class="gmail-m_-4606175218847169607gmail_msg"><div class="gmail-m_-4606175218847169607gmail_msg"><br class="gmail-m_-4606175218847169607gmail_msg"></div>-- <br class="gmail-m_-4606175218847169607gmail_msg"><div class="gmail-m_-4606175218847169607m_8095805773368322678gmail-m_5490049026779165918gmail_signature gmail-m_-4606175218847169607gmail_msg"><span style="font-family:times;font-size:medium" class="gmail-m_-4606175218847169607gmail_msg"><table cellspacing="0" cellpadding="0" class="gmail-m_-4606175218847169607gmail_msg"><tbody class="gmail-m_-4606175218847169607gmail_msg"><tr style="color:rgb(85,85,85);font-family:sans-serif;font-size:small" class="gmail-m_-4606175218847169607gmail_msg"><td nowrap style="border-top:2px solid rgb(213,15,37)" class="gmail-m_-4606175218847169607gmail_msg">Teresa Johnson |</td><td nowrap style="border-top:2px solid rgb(51,105,232)" class="gmail-m_-4606175218847169607gmail_msg"> Software Engineer |</td><td nowrap style="border-top:2px solid rgb(0,153,57)" class="gmail-m_-4606175218847169607gmail_msg"> <a href="mailto:tejohnson@google.com" class="gmail-m_-4606175218847169607gmail_msg" target="_blank">tejohnson@google.com</a> |</td><td nowrap style="border-top:2px solid rgb(238,178,17)" class="gmail-m_-4606175218847169607gmail_msg"> <a href="tel:(408)%20460-2413" value="+14084602413" class="gmail-m_-4606175218847169607gmail_msg" target="_blank">408-460-2413</a></td></tr></tbody></table></span></div>
</div></div></blockquote></div></div></div></div>
</blockquote></div><br><br clear="all"><div><br></div>-- <br><div class="gmail_signature"><span style="font-family:times;font-size:medium"><table cellspacing="0" cellpadding="0"><tbody><tr style="color:rgb(85,85,85);font-family:sans-serif;font-size:small"><td nowrap style="border-top:2px solid rgb(213,15,37)">Teresa Johnson |</td><td nowrap style="border-top:2px solid rgb(51,105,232)"> Software Engineer |</td><td nowrap style="border-top:2px solid rgb(0,153,57)"> <a href="mailto:tejohnson@google.com" target="_blank">tejohnson@google.com</a> |</td><td nowrap style="border-top:2px solid rgb(238,178,17)"> 408-460-2413</td></tr></tbody></table></span></div>
</div></div>