Skip to content

Commit f66331e

Browse files
authored
[llubi] Improve diagnostics and add stacktrace (#195449)
This PR improves UB diagnostics by making `reportImmediateUB` return a temporary streamable object. Stacktrace on UB is also added.
1 parent 7d925b9 commit f66331e

40 files changed

Lines changed: 277 additions & 83 deletions

llvm/test/tools/llubi/alloca_large_count.ll

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,5 +6,7 @@ define void @main() {
66
ret void
77
}
88
; CHECK: Entering function: main
9-
; CHECK-NEXT: Immediate UB detected: Alloca with large array size that overflows uint64_t.
9+
; CHECK-NEXT: Stacktrace:
10+
; CHECK-NEXT: #0 %alloc_dyn = alloca i32, i128 -1, align 4 at @main
11+
; CHECK-NEXT: Immediate UB detected: Alloca with large array size that overflows uint64_t. Size: -1
1012
; CHECK-NEXT: error: Execution of function 'main' failed.

llvm/test/tools/llubi/alloca_large_size.ll

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,5 +6,7 @@ define void @main() {
66
ret void
77
}
88
; CHECK: Entering function: main
9+
; CHECK-NEXT: Stacktrace:
10+
; CHECK-NEXT: #0 %alloc_dyn = alloca i32, i32 100, align 4 at @main
911
; CHECK-NEXT: Error: Insufficient stack space.
1012
; CHECK-NEXT: error: Execution of function 'main' failed.

llvm/test/tools/llubi/alloca_poison_count.ll

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,5 +6,7 @@ define void @main() {
66
ret void
77
}
88
; CHECK: Entering function: main
9+
; CHECK-NEXT: Stacktrace:
10+
; CHECK-NEXT: #0 %alloc_dyn = alloca i32, i32 poison, align 4 at @main
911
; CHECK-NEXT: Immediate UB detected: Alloca with poison array size.
1012
; CHECK-NEXT: error: Execution of function 'main' failed.

llvm/test/tools/llubi/alloca_size_overflow.ll

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,5 +6,7 @@ define void @main() {
66
ret void
77
}
88
; CHECK: Entering function: main
9-
; CHECK-NEXT: Immediate UB detected: Alloca with allocation size that overflows uint64_t.
9+
; CHECK-NEXT: Stacktrace:
10+
; CHECK-NEXT: #0 %alloc_dyn = alloca i32, i64 -1, align 4 at @main
11+
; CHECK-NEXT: Immediate UB detected: Alloca with allocation size that overflows uint64_t. Size: -1
1012
; CHECK-NEXT: error: Execution of function 'main' failed.

llvm/test/tools/llubi/assume_false.ll

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,5 +6,7 @@ define void @main() {
66
ret void
77
}
88
; CHECK: Entering function: main
9+
; CHECK-NEXT: Stacktrace:
10+
; CHECK-NEXT: #0 call void @llvm.assume(i1 false) at @main
911
; CHECK-NEXT: Immediate UB detected: Assume on false or poison condition.
1012
; CHECK-NEXT: error: Execution of function 'main' failed.

llvm/test/tools/llubi/assume_poison.ll

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,5 +6,7 @@ define void @main() {
66
ret void
77
}
88
; CHECK: Entering function: main
9+
; CHECK-NEXT: Stacktrace:
10+
; CHECK-NEXT: #0 call void @llvm.assume(i1 poison) at @main
911
; CHECK-NEXT: Immediate UB detected: Assume on false or poison condition.
1012
; CHECK-NEXT: error: Execution of function 'main' failed.

llvm/test/tools/llubi/br_poison.ll

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,5 +9,7 @@ exit:
99
ret void
1010
}
1111
; CHECK: Entering function: main
12+
; CHECK-NEXT: Stacktrace:
13+
; CHECK-NEXT: #0 br i1 poison, label %exit, label %exit at @main
1214
; CHECK-NEXT: Immediate UB detected: Branch on poison condition.
1315
; CHECK-NEXT: error: Execution of function 'main' failed.

llvm/test/tools/llubi/call_mismatched_signature.ll

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,5 +10,7 @@ define void @main() {
1010
ret void
1111
}
1212
; CHECK: Entering function: main
13-
; CHECK-NEXT: Immediate UB detected: Indirect call through a function pointer with mismatched signature.
13+
; CHECK-NEXT: Stacktrace:
14+
; CHECK-NEXT: #0 call void @foo() at @main
15+
; CHECK-NEXT: Immediate UB detected: Indirect call through a function pointer with mismatched signature. Expected: void (), Actual: i32 ()
1416
; CHECK-NEXT: error: Execution of function 'main' failed.

llvm/test/tools/llubi/call_poison.ll

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,5 +7,7 @@ entry:
77
ret void
88
}
99
; CHECK: Entering function: main
10+
; CHECK-NEXT: Stacktrace:
11+
; CHECK-NEXT: #0 call void poison() at @main
1012
; CHECK-NEXT: Immediate UB detected: Indirect call through poison function pointer.
1113
; CHECK-NEXT: error: Execution of function 'main' failed.

llvm/test/tools/llubi/divrem_ub1.ll

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,5 +8,7 @@ define void @main() {
88
ret void
99
}
1010
; CHECK: Entering function: main
11+
; CHECK-NEXT: Stacktrace:
12+
; CHECK-NEXT: #0 %res = {{sdiv|udiv|srem|urem}} <2 x i32> splat (i32 10), zeroinitializer at @main
1113
; CHECK-NEXT: Immediate UB detected: Division by zero.
1214
; CHECK-NEXT: error: Execution of function 'main' failed.

0 commit comments

Comments
 (0)