[llvm] r265514 - [IRVerifier] Avoid crashing on an invalid compile unit.

Davide Italiano via llvm-commits llvm-commits at lists.llvm.org
Wed Apr 6 09:21:29 PDT 2016


On Apr 6, 2016 8:25 AM, "David Blaikie" <dblaikie at gmail.com> wrote:
>
>
>
> On Tue, Apr 5, 2016 at 8:07 PM, Davide Italiano via llvm-commits <
llvm-commits at lists.llvm.org> wrote:
>>
>> Author: davide
>> Date: Tue Apr  5 22:07:58 2016
>> New Revision: 265514
>>
>> URL: http://llvm.org/viewvc/llvm-project?rev=265514&view=rev
>> Log:
>> [IRVerifier] Avoid crashing on an invalid compile unit.
>>
>> Added:
>>     llvm/trunk/test/Verifier/dbg-invalid-compileunit.ll
>> Modified:
>>     llvm/trunk/lib/IR/Verifier.cpp
>>
>> Modified: llvm/trunk/lib/IR/Verifier.cpp
>> URL:
http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/IR/Verifier.cpp?rev=265514&r1=265513&r2=265514&view=diff
>>
==============================================================================
>> --- llvm/trunk/lib/IR/Verifier.cpp (original)
>> +++ llvm/trunk/lib/IR/Verifier.cpp Tue Apr  5 22:07:58 2016
>> @@ -4376,13 +4376,14 @@ void Verifier::verifyTypeRefs() {
>>    // Visit all the compile units again to map the type references.
>>    SmallDenseMap<const MDString *, const DIType *, 32> TypeRefs;
>>    for (auto *CU : CUs->operands())
>> -    if (auto Ts = cast<DICompileUnit>(CU)->getRetainedTypes())
>> -      for (DIType *Op : Ts)
>> -        if (auto *T = dyn_cast_or_null<DICompositeType>(Op))
>> -          if (auto *S = T->getRawIdentifier()) {
>> -            UnresolvedTypeRefs.erase(S);
>> -            TypeRefs.insert(std::make_pair(S, T));
>> -          }
>> +    if (isa<DICompileUnit>(CU))
>> +      if (auto Ts = cast<DICompileUnit>(CU)->getRetainedTypes())
>> +        for (DIType *Op : Ts)
>> +          if (auto *T = dyn_cast_or_null<DICompositeType>(Op))
>
>
> Total aside. I assume something should be checking that there aren't any
null entries in the retained types list (or indeed any entries that aren't
composite types, either)
>

In my list, but I have other verifier fixes to land before. Thanks!

>>
>> +            if (auto *S = T->getRawIdentifier()) {
>> +              UnresolvedTypeRefs.erase(S);
>> +              TypeRefs.insert(std::make_pair(S, T));
>> +            }
>>
>>    // Verify debug info intrinsic bit piece expressions.  This needs a
second
>>    // pass through the intructions, since we haven't built TypeRefs yet
when
>>
>> Added: llvm/trunk/test/Verifier/dbg-invalid-compileunit.ll
>> URL:
http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Verifier/dbg-invalid-compileunit.ll?rev=265514&view=auto
>>
==============================================================================
>> --- llvm/trunk/test/Verifier/dbg-invalid-compileunit.ll (added)
>> +++ llvm/trunk/test/Verifier/dbg-invalid-compileunit.ll Tue Apr  5
22:07:58 2016
>> @@ -0,0 +1,8 @@
>> +; RUN: not llvm-as -disable-output <%s 2>&1 | FileCheck %s
>> +; CHECK:      assembly parsed, but does not verify
>> +
>> +!llvm.module.flags = !{!0}
>> +!llvm.dbg.cu = !{!1}
>> +
>> +!0 = !{i32 2, !"Debug Info Version", i32 3}
>> +!1 = !DIFile(filename: "davide.f", directory: "")
>>
>>
>> _______________________________________________
>> llvm-commits mailing list
>> llvm-commits at lists.llvm.org
>> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20160406/cd0c2a65/attachment.html>


More information about the llvm-commits mailing list