| // run-rustfix |
| // aux-build:external_unsafe_macro.rs |
| |
| #![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(); //~ ERROR call to unsafe function `unsf` is unsafe |
| //~^ NOTE call to unsafe function |
| //~| NOTE for more information, see issue #71668 |
| //~| NOTE consult the function's documentation |
| unsf(); //~ ERROR call to unsafe function `unsf` is unsafe |
| //~^ NOTE call to unsafe function |
| //~| NOTE for more information, see issue #71668 |
| //~| NOTE consult the function's documentation |
| }} |
| |
| 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 dereference of raw pointer |
| //~| NOTE for more information, see issue #71668 |
| //~| NOTE raw pointers may be null |
| y + *x //~ ERROR dereference of raw pointer is unsafe and requires unsafe block |
| //~^ NOTE dereference of raw pointer |
| //~| NOTE for more information, see issue #71668 |
| //~| NOTE raw pointers may be null |
| }} |
| |
| 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 use of mutable static |
| //~| NOTE for more information, see issue #71668 |
| //~| NOTE mutable statics can be mutated by multiple threads |
| y + BAZ //~ ERROR use of mutable static is unsafe and requires unsafe block |
| //~^ NOTE use of mutable static |
| //~| NOTE for more information, see issue #71668 |
| //~| NOTE mutable statics can be mutated by multiple threads |
| }} |
| |
| macro_rules! unsafe_macro { () => (unsf()) } |
| //~^ ERROR call to unsafe function `unsf` is unsafe |
| //~| NOTE call to unsafe function |
| //~| NOTE for more information, see issue #71668 |
| //~| NOTE consult the function's documentation |
| //~| ERROR call to unsafe function `unsf` is unsafe |
| //~| NOTE call to unsafe function |
| //~| NOTE for more information, see issue #71668 |
| //~| NOTE consult the function's documentation |
| |
| pub unsafe fn unsafe_in_macro() { unsafe { |
| //~^ NOTE an unsafe function restricts its caller, but its body is safe by default |
| unsafe_macro!(); |
| //~^ NOTE in this expansion |
| //~| NOTE in this expansion |
| //~| NOTE in this expansion |
| unsafe_macro!(); |
| //~^ NOTE in this expansion |
| //~| NOTE in this expansion |
| //~| NOTE in this expansion |
| }} |
| |
| 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() {} |