[llvm] r226588 - Add an assertion and prefer a crash over an infinite loop.

Duncan P. N. Exon Smith dexonsmith at apple.com
Tue Jan 20 11:03:49 PST 2015


> On 2015 Jan 20, at 10:58, Adrian Prantl <aprantl at apple.com> wrote:
> 
> 
> 
>> Begin forwarded message:
>> 
>> Subject: Re: [llvm] r226588 - Add an assertion and prefer a crash over an infinite loop.
>> From: "Duncan P. N. Exon Smith" <dexonsmith at apple.com>
>> Date: January 20, 2015 at 10:53:38 AM PST
>> Cc: llvm-commits at cs.uiuc.edu
>> To: Adrian Prantl <aprantl at apple.com>
>> 
>> 
>>> On 2015 Jan 20, at 10:03, Adrian Prantl <aprantl at apple.com> wrote:
>>> 
>>> Author: adrian
>>> Date: Tue Jan 20 12:03:37 2015
>>> New Revision: 226588
>>> 
>>> URL: http://llvm.org/viewvc/llvm-project?rev=226588&view=rev
>>> Log:
>>> Add an assertion and prefer a crash over an infinite loop.
>>> 
>>> Modified:
>>>  llvm/trunk/lib/IR/DebugInfo.cpp
>>> 
>>> Modified: llvm/trunk/lib/IR/DebugInfo.cpp
>>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/IR/DebugInfo.cpp?rev=226588&r1=226587&r2=226588&view=diff
>>> ==============================================================================
>>> --- llvm/trunk/lib/IR/DebugInfo.cpp (original)
>>> +++ llvm/trunk/lib/IR/DebugInfo.cpp Tue Jan 20 12:03:37 2015
>>> @@ -527,12 +527,15 @@ bool DISubprogram::Verify() const {
>>>       while ((IA = DL.getInlinedAt()))
>>>         DL = DebugLoc::getFromDILocation(IA);
>>>       DL.getScopeAndInlinedAt(Scope, IA);
>>> +        assert(Scope && "debug location has no scope");
>>>       assert(!IA);
>>>       while (!DIDescriptor(Scope).isSubprogram()) {
>>>         DILexicalBlockFile D(Scope);
>>>         Scope = D.isLexicalBlockFile()
>>>                     ? D.getScope()
>>>                     : DebugLoc::getFromDILexicalBlock(Scope).getScope();
>>> +          if (!Scope)
>>> +            llvm_unreachable("lexical block file has no scope");
>> 
>> It's strange that this isn't simply an assertion:
>> 
>>   assert(Scope && "lexical block file has no scope");
>> 
>> But I guess that's so that it crashes even when NDEBUG?  (Is that
>> reliable?)
> 
> Yes, that’s the intention (and llvm_unreachable is meant to be used that way).
>> 
>> If that's the reason, you should probably add a comment to that
>> effect since otherwise I'm likely to switch it to an assert next
>> time I look at it ;).
>> 
>> (Also, do you know when this situation arises?)
> 
> Happened to me when I compiled an old .ll file without the MDLocation upgrade.

Ah.  Is it worth testing this?

Also, can you merge this into the 3.6 branch?

> 
> -- adrian
> 
>> 
>>>       }
>>>       if (!DISubprogram(Scope).describes(F))
>>>         return false;
>>> 
>>> 
>>> _______________________________________________
>>> llvm-commits mailing list
>>> llvm-commits at cs.uiuc.edu
>>> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits





More information about the llvm-commits mailing list