mirror of
https://github.com/rust-lang/rust.git
synced 2025-04-13 04:26:48 +00:00
Add test cases for suggestions with unsafe operations contained inside macros
This commit is contained in:
parent
8f3e876e52
commit
802c1d5979
4
tests/ui/unsafe/auxiliary/external_unsafe_macro.rs
Normal file
4
tests/ui/unsafe/auxiliary/external_unsafe_macro.rs
Normal file
@ -0,0 +1,4 @@
|
||||
pub unsafe fn unsf() {}
|
||||
|
||||
#[macro_export]
|
||||
macro_rules! unsafe_macro { () => ($crate::unsf()) }
|
@ -1,7 +1,10 @@
|
||||
// run-rustfix
|
||||
// aux-build:external_unsafe_macro.rs
|
||||
|
||||
#![deny(unsafe_op_in_unsafe_fn)] //~ NOTE
|
||||
|
||||
extern crate external_unsafe_macro;
|
||||
|
||||
unsafe fn unsf() {}
|
||||
|
||||
pub unsafe fn foo() { unsafe {
|
||||
@ -35,4 +38,29 @@ pub unsafe fn baz() -> i32 { unsafe {
|
||||
//~| NOTE
|
||||
}}
|
||||
|
||||
macro_rules! unsafe_macro { () => (unsf()) }
|
||||
//~^ ERROR call to unsafe function is unsafe
|
||||
//~| NOTE
|
||||
//~| NOTE
|
||||
//~| ERROR call to unsafe function 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() {}
|
||||
|
@ -1,7 +1,10 @@
|
||||
// run-rustfix
|
||||
// aux-build:external_unsafe_macro.rs
|
||||
|
||||
#![deny(unsafe_op_in_unsafe_fn)] //~ NOTE
|
||||
|
||||
extern crate external_unsafe_macro;
|
||||
|
||||
unsafe fn unsf() {}
|
||||
|
||||
pub unsafe fn foo() {
|
||||
@ -35,4 +38,29 @@ pub unsafe fn baz() -> i32 {
|
||||
//~| NOTE
|
||||
}
|
||||
|
||||
macro_rules! unsafe_macro { () => (unsf()) }
|
||||
//~^ ERROR call to unsafe function is unsafe
|
||||
//~| NOTE
|
||||
//~| NOTE
|
||||
//~| ERROR call to unsafe function is unsafe
|
||||
//~| NOTE
|
||||
//~| NOTE
|
||||
|
||||
pub unsafe fn unsafe_in_macro() {
|
||||
//~^ 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() {}
|
||||
|
@ -1,21 +1,3 @@
|
||||
error: call to unsafe function is unsafe and requires unsafe block (error E0133)
|
||||
--> $DIR/wrapping-unsafe-block-sugg.rs:9:5
|
||||
|
|
||||
LL | unsf();
|
||||
| ^^^^^^ call to unsafe function
|
||||
|
|
||||
= note: consult the function's documentation for information on how to avoid undefined behavior
|
||||
note: an unsafe function restricts its caller, but its body is safe by default
|
||||
--> $DIR/wrapping-unsafe-block-sugg.rs:7:1
|
||||
|
|
||||
LL | pub unsafe fn foo() {
|
||||
| ^^^^^^^^^^^^^^^^^^^
|
||||
note: the lint level is defined here
|
||||
--> $DIR/wrapping-unsafe-block-sugg.rs:3:9
|
||||
|
|
||||
LL | #![deny(unsafe_op_in_unsafe_fn)]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: call to unsafe function is unsafe and requires unsafe block (error E0133)
|
||||
--> $DIR/wrapping-unsafe-block-sugg.rs:12:5
|
||||
|
|
||||
@ -23,22 +5,40 @@ LL | unsf();
|
||||
| ^^^^^^ call to unsafe function
|
||||
|
|
||||
= note: consult the function's documentation for information on how to avoid undefined behavior
|
||||
note: an unsafe function restricts its caller, but its body is safe by default
|
||||
--> $DIR/wrapping-unsafe-block-sugg.rs:10:1
|
||||
|
|
||||
LL | pub unsafe fn foo() {
|
||||
| ^^^^^^^^^^^^^^^^^^^
|
||||
note: the lint level is defined here
|
||||
--> $DIR/wrapping-unsafe-block-sugg.rs:4:9
|
||||
|
|
||||
LL | #![deny(unsafe_op_in_unsafe_fn)]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: call to unsafe function is unsafe and requires unsafe block (error E0133)
|
||||
--> $DIR/wrapping-unsafe-block-sugg.rs:15:5
|
||||
|
|
||||
LL | unsf();
|
||||
| ^^^^^^ call to unsafe function
|
||||
|
|
||||
= note: consult the function's documentation for information on how to avoid undefined behavior
|
||||
|
||||
error: dereference of raw pointer is unsafe and requires unsafe block (error E0133)
|
||||
--> $DIR/wrapping-unsafe-block-sugg.rs:19:13
|
||||
--> $DIR/wrapping-unsafe-block-sugg.rs:22:13
|
||||
|
|
||||
LL | let y = *x;
|
||||
| ^^ dereference of raw pointer
|
||||
|
|
||||
= note: raw pointers may be null, dangling or unaligned; they can violate aliasing rules and cause data races: all of these are undefined behavior
|
||||
note: an unsafe function restricts its caller, but its body is safe by default
|
||||
--> $DIR/wrapping-unsafe-block-sugg.rs:17:1
|
||||
--> $DIR/wrapping-unsafe-block-sugg.rs:20:1
|
||||
|
|
||||
LL | pub unsafe fn bar(x: *const i32) -> i32 {
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: dereference of raw pointer is unsafe and requires unsafe block (error E0133)
|
||||
--> $DIR/wrapping-unsafe-block-sugg.rs:22:9
|
||||
--> $DIR/wrapping-unsafe-block-sugg.rs:25:9
|
||||
|
|
||||
LL | y + *x
|
||||
| ^^ dereference of raw pointer
|
||||
@ -46,25 +46,54 @@ LL | y + *x
|
||||
= note: raw pointers may be null, dangling or unaligned; they can violate aliasing rules and cause data races: all of these are undefined behavior
|
||||
|
||||
error: use of mutable static is unsafe and requires unsafe block (error E0133)
|
||||
--> $DIR/wrapping-unsafe-block-sugg.rs:30:13
|
||||
--> $DIR/wrapping-unsafe-block-sugg.rs:33:13
|
||||
|
|
||||
LL | let y = BAZ;
|
||||
| ^^^ use of mutable static
|
||||
|
|
||||
= note: mutable statics can be mutated by multiple threads: aliasing violations or data races will cause undefined behavior
|
||||
note: an unsafe function restricts its caller, but its body is safe by default
|
||||
--> $DIR/wrapping-unsafe-block-sugg.rs:28:1
|
||||
--> $DIR/wrapping-unsafe-block-sugg.rs:31:1
|
||||
|
|
||||
LL | pub unsafe fn baz() -> i32 {
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: use of mutable static is unsafe and requires unsafe block (error E0133)
|
||||
--> $DIR/wrapping-unsafe-block-sugg.rs:33:9
|
||||
--> $DIR/wrapping-unsafe-block-sugg.rs:36:9
|
||||
|
|
||||
LL | y + BAZ
|
||||
| ^^^ use of mutable static
|
||||
|
|
||||
= note: mutable statics can be mutated by multiple threads: aliasing violations or data races will cause undefined behavior
|
||||
|
||||
error: aborting due to 6 previous errors
|
||||
error: call to unsafe function is unsafe and requires unsafe block (error E0133)
|
||||
--> $DIR/wrapping-unsafe-block-sugg.rs:41:36
|
||||
|
|
||||
LL | macro_rules! unsafe_macro { () => (unsf()) }
|
||||
| ^^^^^^ call to unsafe function
|
||||
...
|
||||
LL | unsafe_macro!();
|
||||
| --------------- in this macro invocation
|
||||
|
|
||||
= note: consult the function's documentation for information on how to avoid undefined behavior
|
||||
note: an unsafe function restricts its caller, but its body is safe by default
|
||||
--> $DIR/wrapping-unsafe-block-sugg.rs:49:1
|
||||
|
|
||||
LL | pub unsafe fn unsafe_in_macro() {
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
= note: this error originates in the macro `unsafe_macro` (in Nightly builds, run with -Z macro-backtrace for more info)
|
||||
|
||||
error: call to unsafe function is unsafe and requires unsafe block (error E0133)
|
||||
--> $DIR/wrapping-unsafe-block-sugg.rs:41:36
|
||||
|
|
||||
LL | macro_rules! unsafe_macro { () => (unsf()) }
|
||||
| ^^^^^^ call to unsafe function
|
||||
...
|
||||
LL | unsafe_macro!();
|
||||
| --------------- in this macro invocation
|
||||
|
|
||||
= note: consult the function's documentation for information on how to avoid undefined behavior
|
||||
= note: this error originates in the macro `unsafe_macro` (in Nightly builds, run with -Z macro-backtrace for more info)
|
||||
|
||||
error: aborting due to 8 previous errors
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user