blob: 916c64ee743581838e87fa51ae7eae5c6698dfdf [file] [log] [blame] [edit]
//@ only-aarch64
//@ edition:2021
#![allow(incomplete_features, internal_features)]
#![feature(
core_intrinsics,
simd_ffi,
rustc_attrs,
link_llvm_intrinsics
)]
use core::intrinsics::transmute_unchecked;
#[rustc_scalable_vector(4)]
#[allow(non_camel_case_types)]
pub struct svint32_t(i32);
#[target_feature(enable = "sve")]
pub unsafe fn svdup_n_s32(op: i32) -> svint32_t {
extern "C" {
#[cfg_attr(target_arch = "aarch64", link_name = "llvm.aarch64.sve.dup.x.nxv4i32")]
fn _svdup_n_s32(op: i32) -> svint32_t;
}
unsafe { _svdup_n_s32(op) }
}
#[target_feature(enable = "sve")]
async fn another() -> i32 {
42
}
#[no_mangle]
#[target_feature(enable = "sve")]
pub async fn test_function() {
unsafe {
let x = svdup_n_s32(1); //~ ERROR: scalable vectors cannot be held over await points
let temp = another().await;
let y: svint32_t = transmute_unchecked(x);
}
}
fn main() {
let _ = unsafe { test_function() };
}