]> git.lizzy.rs Git - rust.git/blob - src/test/ui/asm/naked-params.rs
Use `summary_opts()` in another spot
[rust.git] / src / test / ui / asm / naked-params.rs
1 // Check that use of function parameters is validate in naked functions.
2 //
3 // ignore-wasm32 asm unsupported
4 #![feature(asm)]
5 #![feature(naked_functions)]
6 #![feature(or_patterns)]
7 #![crate_type = "lib"]
8
9 #[repr(C)]
10 pub struct P { x: u8, y: u16 }
11
12 #[naked]
13 pub unsafe extern "C" fn f(
14     mut a: u32,
15     //~^ ERROR patterns not allowed in naked function parameters
16     &b: &i32,
17     //~^ ERROR patterns not allowed in naked function parameters
18     (None | Some(_)): Option<std::ptr::NonNull<u8>>,
19     //~^ ERROR patterns not allowed in naked function parameters
20     P { x, y }: P,
21     //~^ ERROR patterns not allowed in naked function parameters
22 ) {
23     asm!("", options(noreturn))
24 }
25
26 #[naked]
27 pub unsafe extern "C" fn inc(a: u32) -> u32 {
28     a + 1
29     //~^ ERROR use of parameters not allowed inside naked functions
30 }
31
32 #[naked]
33 pub unsafe extern "C" fn inc_asm(a: u32) -> u32 {
34     asm!("/* {0} */", in(reg) a, options(noreturn));
35     //~^ ERROR use of parameters not allowed inside naked functions
36 }
37
38 #[naked]
39 pub unsafe extern "C" fn sum(x: u32, y: u32) -> u32 {
40     // FIXME: Should be detected by asm-only check.
41     (|| { x + y})()
42 }
43
44 pub fn outer(x: u32) -> extern "C" fn(usize) -> usize {
45     #[naked]
46     pub extern "C" fn inner(y: usize) -> usize {
47         *&y
48         //~^ ERROR use of parameters not allowed inside naked functions
49     }
50     inner
51 }