diff options
| author | Duncan P. N. Exon Smith <dexonsmith@apple.com> | 2015-03-28 02:43:53 +0000 |
|---|---|---|
| committer | Duncan P. N. Exon Smith <dexonsmith@apple.com> | 2015-03-28 02:43:53 +0000 |
| commit | a8b3a1f374598c97d3fb52e95f81d17a3b78514f (patch) | |
| tree | b2e259e17261f2754f13803db9fde1494f30915b /llvm | |
| parent | d989386f74c7ffcc346bdda9cbf651a5b5420186 (diff) | |
| download | bcm5719-llvm-a8b3a1f374598c97d3fb52e95f81d17a3b78514f.tar.gz bcm5719-llvm-a8b3a1f374598c97d3fb52e95f81d17a3b78514f.zip | |
Verifier: Allow subroutine types to have no type array
Loosen one check from r233446: as long as `DIBuilder` requires a
non-null type for every subprogram, we should allow a null type array.
Also add tests for the rest of `MDSubroutineType`, which were somehow
missing.
llvm-svn: 233468
Diffstat (limited to 'llvm')
| -rw-r--r-- | llvm/lib/IR/Verifier.cpp | 11 | ||||
| -rw-r--r-- | llvm/test/Assembler/mdsubroutinetype.ll | 23 |
2 files changed, 28 insertions, 6 deletions
diff --git a/llvm/lib/IR/Verifier.cpp b/llvm/lib/IR/Verifier.cpp index b2a86e27b75..af79984f59a 100644 --- a/llvm/lib/IR/Verifier.cpp +++ b/llvm/lib/IR/Verifier.cpp @@ -758,12 +758,11 @@ void Verifier::visitMDCompositeType(const MDCompositeType &N) { void Verifier::visitMDSubroutineType(const MDSubroutineType &N) { Assert(N.getTag() == dwarf::DW_TAG_subroutine_type, "invalid tag", &N); - Assert(N.getRawElements() && isa<MDTuple>(N.getRawElements()), - "invalid composite elements", &N, N.getRawElements()); - - for (Metadata *Ty : N.getTypeArray()->operands()) { - Assert(isTypeRef(Ty), "invalid subroutine type ref", &N, N.getTypeArray(), - Ty); + if (auto *Types = N.getRawTypeArray()) { + Assert(isa<MDTuple>(Types), "invalid composite elements", &N, Types); + for (Metadata *Ty : N.getTypeArray()->operands()) { + Assert(isTypeRef(Ty), "invalid subroutine type ref", &N, Types, Ty); + } } } diff --git a/llvm/test/Assembler/mdsubroutinetype.ll b/llvm/test/Assembler/mdsubroutinetype.ll new file mode 100644 index 00000000000..936cbf4ec7b --- /dev/null +++ b/llvm/test/Assembler/mdsubroutinetype.ll @@ -0,0 +1,23 @@ +; RUN: llvm-as < %s | llvm-dis | llvm-as | llvm-dis | FileCheck %s +; RUN: verify-uselistorder %s + +; CHECK: !named = !{!0, !1, !2, !3, !4, !5, !6, !7, !8} +!named = !{!0, !1, !2, !3, !4, !5, !6, !7, !8} + +!0 = !MDBasicType(name: "int", size: 32, align: 32, encoding: DW_ATE_signed) +!1 = !{null} +!2 = !{null, !0} +!3 = !{!0, !0, !0} + + +; CHECK: !4 = !MDSubroutineType(types: !1) +; CHECK: !5 = !MDSubroutineType(types: !2) +; CHECK: !6 = !MDSubroutineType(types: !3) +; CHECK: !7 = !MDSubroutineType(flags: DIFlagLValueReference, types: !3) +!4 = !MDSubroutineType(types: !1) +!5 = !MDSubroutineType(types: !2) +!6 = !MDSubroutineType(types: !3) +!7 = !MDSubroutineType(flags: DIFlagLValueReference, types: !3) + +; CHECK: !8 = !MDSubroutineType(types: null) +!8 = !MDSubroutineType(types: null) |

