| ; RUN: not llc -mtriple=bpf -mcpu=v3 < %s 2> %t1 |
| ; RUN: FileCheck %s < %t1 |
| ; CHECK: error: <unknown>:0:0: in function foo i64 (i32, i32, i32): {{(0x[0-9a-fA-F]+|t[0-9]+)}}: i64 = GlobalAddress<ptr @bar> 0 pass by value not supported |
| |
| ; Source code: |
| ; struct t { long a; long b; long c;}; |
| ; |
| ; long bar(int a1, int a2, int a3, int a4, int a5, struct t a6); |
| ; long foo(int a1, int a2, int a3) { |
| ; struct t tmp = {a1, a2, a3}; |
| ; return bar(a1, a2, a3, a2, a1, tmp); |
| ; } |
| |
| %struct.t = type { i64, i64, i64 } |
| |
| define dso_local i64 @foo(i32 noundef %0, i32 noundef %1, i32 noundef %2) local_unnamed_addr { |
| %4 = alloca %struct.t, align 8 |
| call void @llvm.lifetime.start.p0(ptr nonnull %4) |
| %5 = sext i32 %0 to i64 |
| store i64 %5, ptr %4, align 8 |
| %6 = getelementptr inbounds nuw i8, ptr %4, i64 8 |
| %7 = sext i32 %1 to i64 |
| store i64 %7, ptr %6, align 8 |
| %8 = getelementptr inbounds nuw i8, ptr %4, i64 16 |
| %9 = sext i32 %2 to i64 |
| store i64 %9, ptr %8, align 8 |
| %10 = tail call i64 @bar(i32 noundef %0, i32 noundef %1, i32 noundef %2, i32 noundef %1, i32 noundef %0, ptr noundef nonnull byval(%struct.t) align 8 %4) |
| call void @llvm.lifetime.end.p0(ptr nonnull %4) |
| ret i64 %10 |
| } |
| |
| declare void @llvm.lifetime.start.p0(ptr captures(none)) |
| |
| declare dso_local i64 @bar(i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, ptr noundef byval(%struct.t) align 8) local_unnamed_addr |
| |
| declare void @llvm.lifetime.end.p0(ptr captures(none)) |