Add recursion check on main function
Changes: - Add MainRecursion lint to clippy - Check for no-std setup fixes #333
This commit is contained in:
parent
ca6a9beb31
commit
4eab691db6
6 changed files with 104 additions and 0 deletions
31
tests/ui/crate_level_checks/no_std_main_recursion.rs
Normal file
31
tests/ui/crate_level_checks/no_std_main_recursion.rs
Normal file
|
|
@ -0,0 +1,31 @@
|
|||
#![feature(lang_items, link_args, start, libc)]
|
||||
#![link_args="-nostartfiles"]
|
||||
#![no_std]
|
||||
|
||||
use core::panic::PanicInfo;
|
||||
use core::sync::atomic::{AtomicUsize, Ordering};
|
||||
|
||||
static N: AtomicUsize = AtomicUsize::new(0);
|
||||
|
||||
#[warn(clippy::main_recursion)]
|
||||
#[allow(unconditional_recursion)]
|
||||
#[start]
|
||||
fn main(argc: isize, argv: *const *const u8) -> isize {
|
||||
let x = N.load(Ordering::Relaxed);
|
||||
N.store(x + 1, Ordering::Relaxed);
|
||||
|
||||
if x < 3 {
|
||||
main(argc, argv);
|
||||
}
|
||||
|
||||
0
|
||||
}
|
||||
|
||||
#[allow(clippy::empty_loop)]
|
||||
#[panic_handler]
|
||||
fn panic(_info: &PanicInfo) -> ! {
|
||||
loop {}
|
||||
}
|
||||
|
||||
#[lang = "eh_personality"]
|
||||
extern fn eh_personality() {}
|
||||
0
tests/ui/crate_level_checks/no_std_main_recursion.stderr
Normal file
0
tests/ui/crate_level_checks/no_std_main_recursion.stderr
Normal file
5
tests/ui/crate_level_checks/std_main_recursion.rs
Normal file
5
tests/ui/crate_level_checks/std_main_recursion.rs
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
#[warn(clippy::main_recursion)]
|
||||
#[allow(unconditional_recursion)]
|
||||
fn main() {
|
||||
main();
|
||||
}
|
||||
11
tests/ui/crate_level_checks/std_main_recursion.stderr
Normal file
11
tests/ui/crate_level_checks/std_main_recursion.stderr
Normal file
|
|
@ -0,0 +1,11 @@
|
|||
error: You are recursing into main()
|
||||
--> $DIR/std_main_recursion.rs:4:5
|
||||
|
|
||||
LL | main();
|
||||
| ^^^^^^
|
||||
|
|
||||
= note: `-D clippy::main-recursion` implied by `-D warnings`
|
||||
= help: Consider using another function for this recursion
|
||||
|
||||
error: aborting due to previous error
|
||||
|
||||
Loading…
Add table
Add a link
Reference in a new issue