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.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@233468 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Duncan P. N. Exon Smith 2015-03-28 02:43:53 +00:00
parent 0b8cd1dee9
commit cefca10039
2 changed files with 28 additions and 6 deletions

View File

@ -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);
}
}
}

View File

@ -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)