[llvm] r266102 - [IR/Verifier] Each DISubprogram with isDefinition: true must belong to a CU.

Rafael EspĂ­ndola via llvm-commits llvm-commits at lists.llvm.org
Tue Apr 12 12:16:35 PDT 2016


You probably want to check the error message in the test.
On Apr 12, 2016 2:28 PM, "Davide Italiano via llvm-commits" <
llvm-commits at lists.llvm.org> wrote:

> Author: davide
> Date: Tue Apr 12 13:22:33 2016
> New Revision: 266102
>
> URL: http://llvm.org/viewvc/llvm-project?rev=266102&view=rev
> Log:
> [IR/Verifier] Each DISubprogram with isDefinition: true must belong to a
> CU.
>
> Add a check to catch violations. ~60 tests were broken and prevented
> this change to be committed. Adrian and I (thanks Adrian!) went
> through them in the last week or so updating. The check can be
> done more efficiently but I'd still like to get this in ASAP to
> avoid more broken tests to be checked in (if any).
>
> PR:  27101
>
> Added:
>     llvm/trunk/test/Verifier/disubprogram-nocu.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=266102&r1=266101&r2=266102&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/IR/Verifier.cpp (original)
> +++ llvm/trunk/lib/IR/Verifier.cpp Tue Apr 12 13:22:33 2016
> @@ -1011,6 +1011,22 @@ void Verifier::visitDISubprogram(const D
>
>    if (N.isDefinition())
>      Assert(N.isDistinct(), "subprogram definitions must be distinct", &N);
> +
> +  // Ensure that every DISubprogram with isDefinition: true belongs
> +  // to a DICompileUnit.
> +  // FIXME: This is a very inefficient way of handling the problem.
> +  // Use a SmallSetPtr which contains the Listed DISubprograms in the CU
> +  // instead.
> +  if (N.isDefinition()) {
> +    auto *CUs = M->getNamedMetadata("llvm.dbg.cu");
> +    Assert(CUs, "subprogram must belong to a compile unit", &N);
> +    for (auto *CU : CUs->operands())
> +      if (auto Subprograms = cast<DICompileUnit>(CU)->getSubprograms())
> +        for (const auto *Sp : Subprograms)
> +          if (Sp == &N)
> +            return;
> +    Assert(false, "subprogram not found in any compile unit", &N);
> +  }
>  }
>
>  void Verifier::visitDILexicalBlockBase(const DILexicalBlockBase &N) {
>
> Added: llvm/trunk/test/Verifier/disubprogram-nocu.ll
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Verifier/disubprogram-nocu.ll?rev=266102&view=auto
>
> ==============================================================================
> --- llvm/trunk/test/Verifier/disubprogram-nocu.ll (added)
> +++ llvm/trunk/test/Verifier/disubprogram-nocu.ll Tue Apr 12 13:22:33 2016
> @@ -0,0 +1,22 @@
> +; Reject if DISubprogram does not belong to a DICompileUnit.
> +; RUN: not llvm-as %s
> +
> + at _ZZNK4llvm6object15MachOObjectFile21getRelocationTypeNameENS0_11DataRefImplERNS_15SmallVectorImplIcEEE5Table
> = external unnamed_addr constant [6 x i8*], align 16
> +
> +!llvm.dbg.cu = !{!0}
> +!llvm.module.flags = !{!13}
> +
> +!0 = distinct !DICompileUnit(language: DW_LANG_C_plus_plus, file: !1,
> isOptimized: false, runtimeVersion: 0, emissionKind: 0, globals: !2,
> imports: !9)
> +!1 = !DIFile(filename: "../lib/Object/MachOObjectFile.cpp", directory:
> "/home/davide/work/llvm/build-lto-debug")
> +!2 = !{!3, !8}
> +!3 = !DIGlobalVariable(name: "Table", scope: !4, isLocal: false,
> isDefinition: true, variable: [6 x i8*]*
> @_ZZNK4llvm6object15MachOObjectFile21getRelocationTypeNameENS0_11DataRefImplERNS_15SmallVectorImplIcEEE5Table)
> +!4 = distinct !DILexicalBlock(scope: !5, line: 722, column: 23)
> +!5 = distinct !DILexicalBlock(scope: !6, line: 721, column: 17)
> +!6 = distinct !DISubprogram(name: "getRelocationTypeName", scope: null,
> isLocal: false, isDefinition: true, isOptimized: false, variables: !7)
> +!7 = !{}
> +!8 = !DIGlobalVariable(name: "IsLittleEndianHost", scope: null, isLocal:
> false, isDefinition: true, variable: i1 true)
> +!9 = !{!10, !12}
> +!10 = !DIImportedEntity(tag: DW_TAG_imported_declaration, scope: !11,
> line: 121)
> +!11 = !DINamespace(name: "std", scope: null, line: 1967)
> +!12 = !DIImportedEntity(tag: DW_TAG_imported_module, scope: !0, line: 32)
> +!13 = !{i32 2, !"Debug Info Version", i32 3}
>
>
> _______________________________________________
> 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/20160412/197d4a8e/attachment.html>


More information about the llvm-commits mailing list