<div dir="ltr">Thanks, I was able to reproduce this and am getting a test case soon. I haven't checked if it's fragment related yet, but I suspect not since it's -O0.</div><div class="gmail_extra"><br><div class="gmail_quote">On Thu, Oct 12, 2017 at 9:52 AM, Björn Steinbrink <span dir="ltr"><<a href="mailto:bsteinbr@gmail.com" target="_blank">bsteinbr@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Can you check what kind of conflict is this? Two non-fragment<br>
expressions, or a non-fragment expression conflicting with a fragment<br>
expression?<br>
<div class="HOEnZb"><div class="h5"><br>
2017-10-12 15:25 GMT+02:00 Daniel Jasper <<a href="mailto:djasper@google.com">djasper@google.com</a>>:<br>
> With this change, we are actually running into the assertion "conflicting<br>
> locations for variable". I have re-instantiated the previous detection logic<br>
> in r315576.<br>
> What would lead to such two variables conflicting?<br>
> Reid, can you help generate a test case? I'll forward repro instructions of<br>
> internal tests to you.<br>
><br>
> On Tue, Oct 10, 2017 at 8:46 AM, Bjorn Steinbrink via llvm-commits<br>
> <<a href="mailto:llvm-commits@lists.llvm.org">llvm-commits@lists.llvm.org</a>> wrote:<br>
>><br>
>> Author: bsteinbr<br>
>> Date: Tue Oct 10 00:46:17 2017<br>
>> New Revision: 315279<br>
>><br>
>> URL: <a href="http://llvm.org/viewvc/llvm-project?rev=315279&view=rev" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project?rev=315279&view=rev</a><br>
>> Log:<br>
>> Ignore all duplicate frame index expression<br>
>><br>
>> Some passes might duplicate calls to llvm.dbg.declare creating<br>
>> duplicate frame index expression which currently trigger an assertion<br>
>> which is meant to catch erroneous, overlapping fragment declarations.<br>
>> But identical frame index expressions are just redundant and don't<br>
>> actually conflict with each other, so we can be more lenient and just<br>
>> ignore the duplicates.<br>
>><br>
>> Reviewers: aprantl, rnk<br>
>><br>
>> Subscribers: llvm-commits, JDevlieghere<br>
>><br>
>> Differential Revision: <a href="https://reviews.llvm.org/D38540" rel="noreferrer" target="_blank">https://reviews.llvm.org/<wbr>D38540</a><br>
>><br>
>> Modified:<br>
>>     llvm/trunk/lib/CodeGen/<wbr>AsmPrinter/DwarfDebug.cpp<br>
>>     llvm/trunk/lib/CodeGen/<wbr>AsmPrinter/DwarfDebug.h<br>
>><br>
>> Modified: llvm/trunk/lib/CodeGen/<wbr>AsmPrinter/DwarfDebug.cpp<br>
>> URL:<br>
>> <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp?rev=315279&r1=315278&r2=315279&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/llvm/trunk/lib/<wbr>CodeGen/AsmPrinter/DwarfDebug.<wbr>cpp?rev=315279&r1=315278&r2=<wbr>315279&view=diff</a><br>
>><br>
>> ==============================<wbr>==============================<wbr>==================<br>
>> --- llvm/trunk/lib/CodeGen/<wbr>AsmPrinter/DwarfDebug.cpp (original)<br>
>> +++ llvm/trunk/lib/CodeGen/<wbr>AsmPrinter/DwarfDebug.cpp Tue Oct 10 00:46:17<br>
>> 2017<br>
>> @@ -220,9 +220,34 @@ ArrayRef<DbgVariable::<wbr>FrameIndexExpr> Db<br>
>>                return A.Expr->getFragmentInfo()-><wbr>OffsetInBits <<br>
>>                       B.Expr->getFragmentInfo()-><wbr>OffsetInBits;<br>
>>              });<br>
>> +<br>
>>    return FrameIndexExprs;<br>
>>  }<br>
>><br>
>> +void DbgVariable::addMMIEntry(const DbgVariable &V) {<br>
>> +  assert(DebugLocListIndex == ~0U && !MInsn && "not an MMI entry");<br>
>> +  assert(V.DebugLocListIndex == ~0U && !V.MInsn && "not an MMI entry");<br>
>> +  assert(V.Var == Var && "conflicting variable");<br>
>> +  assert(V.IA == IA && "conflicting inlined-at location");<br>
>> +<br>
>> +  assert(!FrameIndexExprs.empty(<wbr>) && "Expected an MMI entry");<br>
>> +  assert(!V.FrameIndexExprs.<wbr>empty() && "Expected an MMI entry");<br>
>> +<br>
>> +  for (const auto &FIE : V.FrameIndexExprs)<br>
>> +    // Ignore duplicate entries.<br>
>> +    if (llvm::none_of(<wbr>FrameIndexExprs, [&](const FrameIndexExpr &Other) {<br>
>> +          return <a href="http://FIE.FI" rel="noreferrer" target="_blank">FIE.FI</a> == Other.FI && FIE.Expr == Other.Expr;<br>
>> +        }))<br>
>> +      FrameIndexExprs.push_back(FIE)<wbr>;<br>
>> +<br>
>> +  assert((FrameIndexExprs.size() == 1 ||<br>
>> +          llvm::all_of(FrameIndexExprs,<br>
>> +                       [](FrameIndexExpr &FIE) {<br>
>> +                         return FIE.Expr && FIE.Expr->isFragment();<br>
>> +                       })) &&<br>
>> +         "conflicting locations for variable");<br>
>> +}<br>
>> +<br>
>>  static const DwarfAccelTable::Atom TypeAtoms[] = {<br>
>>      DwarfAccelTable::Atom(dwarf::<wbr>DW_ATOM_die_offset,<br>
>> dwarf::DW_FORM_data4),<br>
>>      DwarfAccelTable::Atom(dwarf::<wbr>DW_ATOM_die_tag, dwarf::DW_FORM_data2),<br>
>><br>
>> Modified: llvm/trunk/lib/CodeGen/<wbr>AsmPrinter/DwarfDebug.h<br>
>> URL:<br>
>> <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.h?rev=315279&r1=315278&r2=315279&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/llvm/trunk/lib/<wbr>CodeGen/AsmPrinter/DwarfDebug.<wbr>h?rev=315279&r1=315278&r2=<wbr>315279&view=diff</a><br>
>><br>
>> ==============================<wbr>==============================<wbr>==================<br>
>> --- llvm/trunk/lib/CodeGen/<wbr>AsmPrinter/DwarfDebug.h (original)<br>
>> +++ llvm/trunk/lib/CodeGen/<wbr>AsmPrinter/DwarfDebug.h Tue Oct 10 00:46:17<br>
>> 2017<br>
>> @@ -138,30 +138,7 @@ public:<br>
>>    /// Get the FI entries, sorted by fragment offset.<br>
>>    ArrayRef<FrameIndexExpr> getFrameIndexExprs() const;<br>
>>    bool hasFrameIndexExprs() const { return !FrameIndexExprs.empty(); }<br>
>> -<br>
>> -  void addMMIEntry(const DbgVariable &V) {<br>
>> -    assert(DebugLocListIndex == ~0U && !MInsn && "not an MMI entry");<br>
>> -    assert(V.DebugLocListIndex == ~0U && !V.MInsn && "not an MMI entry");<br>
>> -    assert(V.Var == Var && "conflicting variable");<br>
>> -    assert(V.IA == IA && "conflicting inlined-at location");<br>
>> -<br>
>> -    assert(!FrameIndexExprs.empty(<wbr>) && "Expected an MMI entry");<br>
>> -    assert(!V.FrameIndexExprs.<wbr>empty() && "Expected an MMI entry");<br>
>> -<br>
>> -    if (FrameIndexExprs.size()) {<br>
>> -      auto *Expr = FrameIndexExprs.back().Expr;<br>
>> -      // Get rid of duplicate non-fragment entries. More than one<br>
>> non-fragment<br>
>> -      // dbg.declare makes no sense so ignore all but the first.<br>
>> -      if (!Expr || !Expr->isFragment())<br>
>> -        return;<br>
>> -    }<br>
>> -    FrameIndexExprs.append(V.<wbr>FrameIndexExprs.begin(),<br>
>> V.FrameIndexExprs.end());<br>
>> -    assert(llvm::all_of(<wbr>FrameIndexExprs,<br>
>> -                        [](FrameIndexExpr &FIE) {<br>
>> -                          return FIE.Expr && FIE.Expr->isFragment();<br>
>> -                        }) &&<br>
>> -           "conflicting locations for variable");<br>
>> -  }<br>
>> +  void addMMIEntry(const DbgVariable &V);<br>
>><br>
>>    // Translate tag to proper Dwarf tag.<br>
>>    dwarf::Tag getTag() const {<br>
>><br>
>><br>
>> ______________________________<wbr>_________________<br>
>> llvm-commits mailing list<br>
>> <a href="mailto:llvm-commits@lists.llvm.org">llvm-commits@lists.llvm.org</a><br>
>> <a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/<wbr>mailman/listinfo/llvm-commits</a><br>
><br>
><br>
</div></div></blockquote></div><br></div>