]> git.lizzy.rs Git - rust.git/blob - src/tools/clippy/tests/ui/crate_level_checks/no_std_main_recursion.rs
4a5c597dda51fa3304afafe4174630eb62655db2
[rust.git] / src / tools / clippy / tests / ui / crate_level_checks / no_std_main_recursion.rs
1 // compile-flags: -Clink-arg=-nostartfiles
2 // ignore-macos
3 // ignore-windows
4
5 #![feature(lang_items, start, libc)]
6 #![no_std]
7
8 use core::panic::PanicInfo;
9 use core::sync::atomic::{AtomicUsize, Ordering};
10
11 static N: AtomicUsize = AtomicUsize::new(0);
12
13 #[warn(clippy::main_recursion)]
14 #[start]
15 fn main(_argc: isize, _argv: *const *const u8) -> isize {
16     let x = N.load(Ordering::Relaxed);
17     N.store(x + 1, Ordering::Relaxed);
18
19     if x < 3 {
20         main(_argc, _argv);
21     }
22
23     0
24 }
25
26 #[allow(clippy::empty_loop)]
27 #[panic_handler]
28 fn panic(_info: &PanicInfo) -> ! {
29     loop {}
30 }
31
32 #[lang = "eh_personality"]
33 extern "C" fn eh_personality() {}