aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/Analysis/Lint.cpp3
-rw-r--r--test/Other/lint.ll4
2 files changed, 6 insertions, 1 deletions
diff --git a/lib/Analysis/Lint.cpp b/lib/Analysis/Lint.cpp
index 949bbbd8b6..5624430332 100644
--- a/lib/Analysis/Lint.cpp
+++ b/lib/Analysis/Lint.cpp
@@ -519,6 +519,9 @@ void Lint::visitVAArgInst(VAArgInst &I) {
void Lint::visitIndirectBrInst(IndirectBrInst &I) {
visitMemoryReference(I, I.getAddress(), ~0u, 0, 0, MemRef::Branchee);
+
+ Assert1(I.getNumDestinations() != 0,
+ "Undefined behavior: indirectbr with no destinations", &I);
}
void Lint::visitExtractElementInst(ExtractElementInst &I) {
diff --git a/test/Other/lint.ll b/test/Other/lint.ll
index dee3d11d2f..fcef7ee2d5 100644
--- a/test/Other/lint.ll
+++ b/test/Other/lint.ll
@@ -161,5 +161,7 @@ declare i32 @nonstruct_callee() nounwind
define void @struct_caller() nounwind {
entry:
call %struct bitcast (i32 ()* @foo to %struct ()*)()
- ret void
+
+ ; CHECK: Undefined behavior: indirectbr with no destinations
+ indirectbr i8* null, []
}