summaryrefslogtreecommitdiffstats
path: root/llvm
diff options
context:
space:
mode:
authorDuncan P. N. Exon Smith <dexonsmith@apple.com>2015-03-28 02:43:53 +0000
committerDuncan P. N. Exon Smith <dexonsmith@apple.com>2015-03-28 02:43:53 +0000
commita8b3a1f374598c97d3fb52e95f81d17a3b78514f (patch)
treeb2e259e17261f2754f13803db9fde1494f30915b /llvm
parentd989386f74c7ffcc346bdda9cbf651a5b5420186 (diff)
downloadbcm5719-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.cpp11
-rw-r--r--llvm/test/Assembler/mdsubroutinetype.ll23
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)
OpenPOWER on IntegriCloud