// 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 { 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 {} }