Files
rust/tests/codegen-llvm/bpf-abi-indirect-return.rs
Alessandro Decina 056c2da339 bpf: return results larger than one register indirectly
Fixes triggering the "only small returns supported" error in the BPF
target.
2025-10-13 16:52:12 +00:00

44 lines
899 B
Rust

// Checks that results larger than one register are returned indirectly
//@ only-bpf
//@ needs-llvm-components: bpf
//@ compile-flags: --target bpfel-unknown-none
#![no_std]
#![no_main]
#[no_mangle]
fn outer(a: u64) -> u64 {
let v = match inner_res(a) {
Ok(v) => v,
Err(()) => 0,
};
inner_big(v).a[0] as u64
}
// CHECK-LABEL: define {{.*}} @_ZN{{.*}}inner_res{{.*}}E(
// CHECK-SAME: ptr{{[^,]*}},
// CHECK-SAME: i64{{[^)]*}}
#[inline(never)]
fn inner_res(a: u64) -> Result<u64, ()> {
if a == 0 { Err(()) } else { Ok(a + 1) }
}
struct Big {
a: [u16; 32],
b: u64,
}
// CHECK-LABEL: define {{.*}} @_ZN{{.*}}inner_big{{.*}}E(
// CHECK-SAME: ptr{{[^,]*}},
// CHECK-SAME: i64{{[^)]*}}
#[inline(never)]
fn inner_big(a: u64) -> Big {
Big { a: [a as u16; 32], b: 42 }
}
#[panic_handler]
fn panic(_info: &core::panic::PanicInfo) -> ! {
loop {}
}