mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-01-01 00:33:09 +00:00
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:
parent
0b8cd1dee9
commit
cefca10039
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
23
test/Assembler/mdsubroutinetype.ll
Normal file
23
test/Assembler/mdsubroutinetype.ll
Normal 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)
|
Loading…
Reference in New Issue
Block a user