#panics #assert #statically #assertions #present #whatsoever

no-panics-whatsoever

静态断言Rust编写的程序不发生恐慌

1 个不稳定版本

0.1.0 2021年2月3日

#2640Rust模式

MIT 许可证

4KB

no-panics-whatsoever

静态断言Rust编写的程序不发生恐慌

此crate用于静态断言最终程序中不包含任何恐慌。如果存在恐慌且没有被优化掉,编译将产生以下错误

error: the static assertion that no panics are present has failed

注意:此crate仅在编译时使用no_std才有效。

示例

#![no_std]
#![no_main]
#![feature(lang_items, test)]

extern crate libc;
extern crate no_panics_whatsoever;

#[lang = "eh_personality"]
extern "C" fn eh_personality() {}

fn foo(a: &[i32]) -> i32 {
    // a.get(0).copied().unwrap_or(1) // Compiles fine!
    a[0] // Fails to compile!
}

#[no_mangle] // ensure that this symbol is called `main` in the output
pub extern fn main(_argc: i32, _argv: *const *const u8) -> i32 {
    foo(core::hint::black_box(&[42]))
}

lib.rs:

此crate用于静态断言最终程序中不包含任何恐慌。如果存在恐慌且没有被优化掉,编译将产生以下错误

error: the static assertion that no panics are present has failed

注意:此crate仅在编译时使用no_std才有效。

示例

#![no_std]
#![no_main]
#![feature(lang_items, test)]

extern crate libc;
extern crate no_panics_whatsoever;

#[lang = "eh_personality"]
extern "C" fn eh_personality() {}

fn foo(a: &[i32]) -> i32 {
    // a.get(0).copied().unwrap_or(1) // Compiles fine!
    a[0] // Fails to compile!
}

#[no_mangle] // ensure that this symbol is called `main` in the output
pub extern fn main(_argc: i32, _argv: *const *const u8) -> i32 {
    foo(core::hint::black_box(&[42]))
}

无运行时依赖