Skip to content

Commit b9e11ea

Browse files
authored
[llvm][ir]: fix llc crashes on function definitions with label parameters (#136285)
Closes #136144. After the patch: ```llvm ; label-crash.ll define void @invalid_arg_type(i32 %0) { 1: call void @foo(label %1) ret void } declare void @foo(label) ``` ``` lambda@ubuntu22:~/test$ llc -o out.s label-crash.ll Function argument cannot be of label type! label %0 ptr @foo llc: error: 'label-crash.ll': input module cannot be verified ```
1 parent f9bd89b commit b9e11ea

File tree

2 files changed

+16
-0
lines changed

2 files changed

+16
-0
lines changed

llvm/lib/IR/Verifier.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2931,6 +2931,8 @@ void Verifier::visitFunction(const Function &F) {
29312931
FT->getParamType(i));
29322932
Check(Arg.getType()->isFirstClassType(),
29332933
"Function arguments must have first-class types!", &Arg);
2934+
Check(!Arg.getType()->isLabelTy(),
2935+
"Function argument cannot be of label type!", &Arg, &F);
29342936
if (!IsIntrinsic) {
29352937
Check(!Arg.getType()->isMetadataTy(),
29362938
"Function takes metadata but isn't an intrinsic", &Arg, &F);
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
; RUN: not llvm-as < %s 2>&1 | FileCheck %s
2+
3+
define void @invalid_arg_type(i32 %0) {
4+
1:
5+
call void @foo(label %1)
6+
ret void
7+
}
8+
9+
declare void @foo(label)
10+
; CHECK: Function argument cannot be of label type!
11+
; CHECK-NEXT: label %0
12+
; CHECK-NEXT: ptr @foo
13+
14+

0 commit comments

Comments
 (0)