diff options
| author | Gary Guo <gary@garyguo.net> | 2022-05-07 02:57:42 +0100 |
|---|---|---|
| committer | Gary Guo <gary@garyguo.net> | 2022-05-07 03:32:27 +0100 |
| commit | b1c6c0648e430ffc8a9acd5e90c7984d76067cd8 (patch) | |
| tree | 44bf422767cbed7c779420c0a42a8471e67df929 /src | |
| parent | d93b03793d4b6bcbc5cd5c0715df31bfcff15845 (diff) | |
| download | rust-b1c6c0648e430ffc8a9acd5e90c7984d76067cd8.tar.gz rust-b1c6c0648e430ffc8a9acd5e90c7984d76067cd8.zip | |
Permit asm_const and asm_sym to reference outer generic params
Diffstat (limited to 'src')
| -rw-r--r-- | src/test/ui/asm/generic-const.rs | 30 | ||||
| -rw-r--r-- | src/test/ui/asm/type-check-1.rs | 1 | ||||
| -rw-r--r-- | src/test/ui/asm/type-check-1.stderr | 15 |
3 files changed, 33 insertions, 13 deletions
diff --git a/src/test/ui/asm/generic-const.rs b/src/test/ui/asm/generic-const.rs new file mode 100644 index 00000000000..55c5587804b --- /dev/null +++ b/src/test/ui/asm/generic-const.rs @@ -0,0 +1,30 @@ +// needs-asm-support +// build-pass + +#![feature(asm_const, asm_sym)] + +use std::arch::asm; + +fn foofoo<const N: usize>() {} + +unsafe fn foo<const N: usize>() { + asm!("/* {0} */", const N); + asm!("/* {0} */", const N + 1); + asm!("/* {0} */", sym foofoo::<N>); +} + +fn barbar<T>() {} + +unsafe fn bar<T>() { + asm!("/* {0} */", const std::mem::size_of::<T>()); + asm!("/* {0} */", const std::mem::size_of::<(T, T)>()); + asm!("/* {0} */", sym barbar::<T>); + asm!("/* {0} */", sym barbar::<(T, T)>); +} + +fn main() { + unsafe { + foo::<0>(); + bar::<usize>(); + } +} diff --git a/src/test/ui/asm/type-check-1.rs b/src/test/ui/asm/type-check-1.rs index 9f0121e11b4..367a035387b 100644 --- a/src/test/ui/asm/type-check-1.rs +++ b/src/test/ui/asm/type-check-1.rs @@ -63,7 +63,6 @@ fn main() { unsafe fn generic<T>() { asm!("{}", sym generic::<T>); - //~^ generic parameters may not be used in const operations } // Const operands must be integers and must be constants. diff --git a/src/test/ui/asm/type-check-1.stderr b/src/test/ui/asm/type-check-1.stderr index 7dba69fb745..bf5ea1befb6 100644 --- a/src/test/ui/asm/type-check-1.stderr +++ b/src/test/ui/asm/type-check-1.stderr @@ -33,15 +33,6 @@ LL | asm!("{}", sym x); | = help: `sym` operands must refer to either a function or a static -error: generic parameters may not be used in const operations - --> $DIR/type-check-1.rs:65:30 - | -LL | asm!("{}", sym generic::<T>); - | ^ cannot perform const operation using `T` - | - = note: type parameters may not be used in const expressions - = help: use `#![feature(generic_const_exprs)]` to allow generic const expressions - error[E0308]: mismatched types --> $DIR/type-check-1.rs:55:26 | @@ -109,13 +100,13 @@ LL | asm!("{}", inout(reg) v[..]); = note: all inline asm arguments must have a statically known size error[E0308]: mismatched types - --> $DIR/type-check-1.rs:74:25 + --> $DIR/type-check-1.rs:73:25 | LL | global_asm!("{}", const 0f32); | ^^^^ expected integer, found `f32` error[E0308]: mismatched types - --> $DIR/type-check-1.rs:76:25 + --> $DIR/type-check-1.rs:75:25 | LL | global_asm!("{}", const 0 as *mut u8); | ^^^^^^^^^^^^ expected integer, found *-ptr @@ -123,7 +114,7 @@ LL | global_asm!("{}", const 0 as *mut u8); = note: expected type `{integer}` found raw pointer `*mut u8` -error: aborting due to 15 previous errors +error: aborting due to 14 previous errors Some errors have detailed explanations: E0277, E0308, E0435. For more information about an error, try `rustc --explain E0277`. |
