diff options
| author | Taiki Endo <te316e89@gmail.com> | 2023-08-23 21:57:18 +0900 |
|---|---|---|
| committer | Taiki Endo <te316e89@gmail.com> | 2023-08-23 21:57:18 +0900 |
| commit | 03fd2d4379cc0f5d6a04dd1708c75d2f828f598e (patch) | |
| tree | 8640eaea99a8f194e9ca56410c0700a70902c00a /tests/codegen | |
| parent | 6046aa06b6e2548ae0bfcfb0d61f33e8908e50a1 (diff) | |
| download | rust-03fd2d4379cc0f5d6a04dd1708c75d2f828f598e.tar.gz rust-03fd2d4379cc0f5d6a04dd1708c75d2f828f598e.zip | |
Allow MaybeUninit in input and output of inline assembly
Diffstat (limited to 'tests/codegen')
| -rw-r--r-- | tests/codegen/asm-maybe-uninit.rs | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/tests/codegen/asm-maybe-uninit.rs b/tests/codegen/asm-maybe-uninit.rs new file mode 100644 index 00000000000..d7e4a948954 --- /dev/null +++ b/tests/codegen/asm-maybe-uninit.rs @@ -0,0 +1,27 @@ +// compile-flags: -O +// only-x86_64 + +#![crate_type = "rlib"] +#![allow(asm_sub_register)] + +use std::mem::MaybeUninit; +use std::arch::asm; + +// CHECK-LABEL: @int +#[no_mangle] +pub unsafe fn int(x: MaybeUninit<i32>) -> MaybeUninit<i32> { + let y: MaybeUninit<i32>; + asm!("/*{}{}*/", in(reg) x, out(reg) y); + y +} + +// CHECK-LABEL: @inout +#[no_mangle] +pub unsafe fn inout(mut x: i32) -> MaybeUninit<u32> { + let mut y: MaybeUninit<u32>; + asm!("/*{}*/", inout(reg) x => y); + asm!("/*{}*/", inout(reg) y => x); + asm!("/*{}*/", inlateout(reg) x => y); + asm!("/*{}*/", inlateout(reg) y => x); + y +} |
