| //@ compile-flags: -Zoffload=Test -Zunstable-options -C opt-level=0 -Clto=fat |
| //@ no-prefer-dynamic |
| //@ needs-offload |
| |
| // This test verifies that selecting an unavailable `device` in the `offload` macro panics. |
| |
| #![feature(gpu_offload)] |
| #![no_main] |
| |
| #[unsafe(no_mangle)] |
| fn main() { |
| core::offload::offload! { |
| kernel = kernel, |
| device = 99, |
| args = (), |
| } |
| } |
| |
| #[unsafe(no_mangle)] |
| fn kernel() {} |
| |
| // CHECK-LABEL: define{{( dso_local)?}} void @main() |
| // CHECK: store i32 99, ptr %device, align 4 |
| // CHECK-NEXT: %{{[0-9_]+}} = call i32 @omp_get_num_devices() |
| // CHECK-NEXT: %{{[0-9_]+}} = load i32, ptr %device, align 4 |
| // CHECK-NEXT: %{{[0-9_]+}} = icmp slt i32 %{{[0-9_]+}}, %{{[0-9_]+}} |
| // CHECK-NEXT: br i1 %{{[0-9_]+}}, label %bb{{[0-9]+}}, label %bb{{[0-9]+}} |
| // CHECK: call void @{{.*}}panic_fmt |
| // CHECK: unreachable |
| // CHECK: call i32 @__tgt_target_kernel |