// run-rustfix // aux-build:external_unsafe_macro.rs // revisions: mir thir // [thir]compile-flags: -Zthir-unsafeck #![deny(unsafe_op_in_unsafe_fn)] //~ NOTE #![crate_name = "wrapping_unsafe_block_sugg"] extern crate external_unsafe_macro; unsafe fn unsf() {} pub unsafe fn foo() { unsafe { //~^ NOTE an unsafe function restricts its caller, but its body is safe by default unsf(); //[mir]~ ERROR call to unsafe function is unsafe //[thir]~^ ERROR call to unsafe function `unsf` is unsafe //~^^ NOTE //~| NOTE unsf(); //[mir]~ ERROR call to unsafe function is unsafe //[thir]~^ ERROR call to unsafe function `unsf` is unsafe //~^^ NOTE //~| NOTE }} pub unsafe fn bar(x: *const i32) -> i32 { unsafe { //~^ NOTE an unsafe function restricts its caller, but its body is safe by default let y = *x; //~ ERROR dereference of raw pointer is unsafe and requires unsafe block //~^ NOTE //~| NOTE y + *x //~ ERROR dereference of raw pointer is unsafe and requires unsafe block //~^ NOTE //~| NOTE }} static mut BAZ: i32 = 0; pub unsafe fn baz() -> i32 { unsafe { //~^ NOTE an unsafe function restricts its caller, but its body is safe by default let y = BAZ; //~ ERROR use of mutable static is unsafe and requires unsafe block //~^ NOTE //~| NOTE y + BAZ //~ ERROR use of mutable static is unsafe and requires unsafe block //~^ NOTE //~| NOTE }} macro_rules! unsafe_macro { () => (unsf()) } //[mir]~^ ERROR call to unsafe function is unsafe //[thir]~^^ ERROR call to unsafe function `unsf` is unsafe //~| NOTE //~| NOTE //[mir]~| ERROR call to unsafe function is unsafe //[thir]~| ERROR call to unsafe function `unsf` is unsafe //~| NOTE //~| NOTE pub unsafe fn unsafe_in_macro() { unsafe { //~^ NOTE an unsafe function restricts its caller, but its body is safe by default unsafe_macro!(); //~^ NOTE //~| NOTE unsafe_macro!(); //~^ NOTE //~| NOTE }} pub unsafe fn unsafe_in_external_macro() { // FIXME: https://github.com/rust-lang/rust/issues/112504 // FIXME: ~^ NOTE an unsafe function restricts its caller, but its body is safe by default external_unsafe_macro::unsafe_macro!(); external_unsafe_macro::unsafe_macro!(); } fn main() {}