diagnostics: tweak error message to give more rationale to unsafe Fn
This commit is contained in:
parent
dcf7ce8356
commit
6d18fbbc3f
5 changed files with 23 additions and 20 deletions
|
@ -61,8 +61,9 @@
|
||||||
),
|
),
|
||||||
on(
|
on(
|
||||||
_Self = "unsafe fn",
|
_Self = "unsafe fn",
|
||||||
|
note = "unsafe function cannot be called generically without an unsafe block",
|
||||||
// SAFETY: tidy is not smart enough to tell that the below unsafe block is a string
|
// SAFETY: tidy is not smart enough to tell that the below unsafe block is a string
|
||||||
note = "unsafe functions must be wrapped in closures: `|| unsafe {{ /* code */ }}`"
|
label = "call the function in a closure: `|| unsafe {{ /* code */ }}`"
|
||||||
),
|
),
|
||||||
message = "expected a `{Fn}<{Args}>` closure, found `{Self}`",
|
message = "expected a `{Fn}<{Args}>` closure, found `{Self}`",
|
||||||
label = "expected an `Fn<{Args}>` closure, found `{Self}`"
|
label = "expected an `Fn<{Args}>` closure, found `{Self}`"
|
||||||
|
@ -146,8 +147,9 @@ pub trait Fn<Args>: FnMut<Args> {
|
||||||
),
|
),
|
||||||
on(
|
on(
|
||||||
_Self = "unsafe fn",
|
_Self = "unsafe fn",
|
||||||
|
note = "unsafe function cannot be called generically without an unsafe block",
|
||||||
// SAFETY: tidy is not smart enough to tell that the below unsafe block is a string
|
// SAFETY: tidy is not smart enough to tell that the below unsafe block is a string
|
||||||
note = "unsafe functions must be wrapped in closures: `|| unsafe {{ /* code */ }}`"
|
label = "call the function in a closure: `|| unsafe {{ /* code */ }}`"
|
||||||
),
|
),
|
||||||
message = "expected a `{FnMut}<{Args}>` closure, found `{Self}`",
|
message = "expected a `{FnMut}<{Args}>` closure, found `{Self}`",
|
||||||
label = "expected an `FnMut<{Args}>` closure, found `{Self}`"
|
label = "expected an `FnMut<{Args}>` closure, found `{Self}`"
|
||||||
|
@ -223,8 +225,9 @@ pub trait FnMut<Args>: FnOnce<Args> {
|
||||||
),
|
),
|
||||||
on(
|
on(
|
||||||
_Self = "unsafe fn",
|
_Self = "unsafe fn",
|
||||||
|
note = "unsafe function cannot be called generically without an unsafe block",
|
||||||
// SAFETY: tidy is not smart enough to tell that the below unsafe block is a string
|
// SAFETY: tidy is not smart enough to tell that the below unsafe block is a string
|
||||||
note = "unsafe functions must be wrapped in closures: `|| unsafe {{ /* code */ }}`"
|
label = "call the function in a closure: `|| unsafe {{ /* code */ }}`"
|
||||||
),
|
),
|
||||||
message = "expected a `{FnOnce}<{Args}>` closure, found `{Self}`",
|
message = "expected a `{FnOnce}<{Args}>` closure, found `{Self}`",
|
||||||
label = "expected an `FnOnce<{Args}>` closure, found `{Self}`"
|
label = "expected an `FnOnce<{Args}>` closure, found `{Self}`"
|
||||||
|
|
|
@ -2,12 +2,12 @@ error[E0277]: expected a `FnOnce<(&str,)>` closure, found `unsafe extern "rust-i
|
||||||
--> $DIR/coerce-unsafe-to-closure.rs:2:44
|
--> $DIR/coerce-unsafe-to-closure.rs:2:44
|
||||||
|
|
|
|
||||||
LL | let x: Option<&[u8]> = Some("foo").map(std::mem::transmute);
|
LL | let x: Option<&[u8]> = Some("foo").map(std::mem::transmute);
|
||||||
| --- ^^^^^^^^^^^^^^^^^^^ expected an `FnOnce<(&str,)>` closure, found `unsafe extern "rust-intrinsic" fn(_) -> _ {transmute::<_, _>}`
|
| --- ^^^^^^^^^^^^^^^^^^^ call the function in a closure: `|| unsafe { /* code */ }`
|
||||||
| |
|
| |
|
||||||
| required by a bound introduced by this call
|
| required by a bound introduced by this call
|
||||||
|
|
|
|
||||||
= help: the trait `FnOnce<(&str,)>` is not implemented for `unsafe extern "rust-intrinsic" fn(_) -> _ {transmute::<_, _>}`
|
= help: the trait `FnOnce<(&str,)>` is not implemented for `unsafe extern "rust-intrinsic" fn(_) -> _ {transmute::<_, _>}`
|
||||||
= note: unsafe functions must be wrapped in closures: `|| unsafe { /* code */ }`
|
= note: unsafe function cannot be called generically without an unsafe block
|
||||||
note: required by a bound in `Option::<T>::map`
|
note: required by a bound in `Option::<T>::map`
|
||||||
--> $SRC_DIR/core/src/option.rs:LL:COL
|
--> $SRC_DIR/core/src/option.rs:LL:COL
|
||||||
|
|
|
|
||||||
|
|
|
@ -53,7 +53,7 @@ error[E0277]: expected a `Fn<()>` closure, found `unsafe fn() {foo_unsafe}`
|
||||||
--> $DIR/fn-traits.rs:28:10
|
--> $DIR/fn-traits.rs:28:10
|
||||||
|
|
|
|
||||||
LL | call(foo_unsafe);
|
LL | call(foo_unsafe);
|
||||||
| ---- ^^^^^^^^^^ expected an `Fn<()>` closure, found `unsafe fn() {foo_unsafe}`
|
| ---- ^^^^^^^^^^ call the function in a closure: `|| unsafe { /* code */ }`
|
||||||
| |
|
| |
|
||||||
| required by a bound introduced by this call
|
| required by a bound introduced by this call
|
||||||
|
|
|
|
||||||
|
@ -70,7 +70,7 @@ error[E0277]: expected a `FnMut<()>` closure, found `unsafe fn() {foo_unsafe}`
|
||||||
--> $DIR/fn-traits.rs:30:14
|
--> $DIR/fn-traits.rs:30:14
|
||||||
|
|
|
|
||||||
LL | call_mut(foo_unsafe);
|
LL | call_mut(foo_unsafe);
|
||||||
| -------- ^^^^^^^^^^ expected an `FnMut<()>` closure, found `unsafe fn() {foo_unsafe}`
|
| -------- ^^^^^^^^^^ call the function in a closure: `|| unsafe { /* code */ }`
|
||||||
| |
|
| |
|
||||||
| required by a bound introduced by this call
|
| required by a bound introduced by this call
|
||||||
|
|
|
|
||||||
|
@ -87,7 +87,7 @@ error[E0277]: expected a `FnOnce<()>` closure, found `unsafe fn() {foo_unsafe}`
|
||||||
--> $DIR/fn-traits.rs:32:15
|
--> $DIR/fn-traits.rs:32:15
|
||||||
|
|
|
|
||||||
LL | call_once(foo_unsafe);
|
LL | call_once(foo_unsafe);
|
||||||
| --------- ^^^^^^^^^^ expected an `FnOnce<()>` closure, found `unsafe fn() {foo_unsafe}`
|
| --------- ^^^^^^^^^^ call the function in a closure: `|| unsafe { /* code */ }`
|
||||||
| |
|
| |
|
||||||
| required by a bound introduced by this call
|
| required by a bound introduced by this call
|
||||||
|
|
|
|
||||||
|
|
|
@ -2,12 +2,12 @@ error[E0277]: expected a `Fn<(&isize,)>` closure, found `for<'r> unsafe fn(&'r i
|
||||||
--> $DIR/unboxed-closures-unsafe-extern-fn.rs:20:21
|
--> $DIR/unboxed-closures-unsafe-extern-fn.rs:20:21
|
||||||
|
|
|
|
||||||
LL | let x = call_it(&square, 22);
|
LL | let x = call_it(&square, 22);
|
||||||
| ------- ^^^^^^^ expected an `Fn<(&isize,)>` closure, found `for<'r> unsafe fn(&'r isize) -> isize {square}`
|
| ------- ^^^^^^^ call the function in a closure: `|| unsafe { /* code */ }`
|
||||||
| |
|
| |
|
||||||
| required by a bound introduced by this call
|
| required by a bound introduced by this call
|
||||||
|
|
|
|
||||||
= help: the trait `for<'r> Fn<(&'r isize,)>` is not implemented for `for<'r> unsafe fn(&'r isize) -> isize {square}`
|
= help: the trait `for<'r> Fn<(&'r isize,)>` is not implemented for `for<'r> unsafe fn(&'r isize) -> isize {square}`
|
||||||
= note: unsafe functions must be wrapped in closures: `|| unsafe { /* code */ }`
|
= note: unsafe function cannot be called generically without an unsafe block
|
||||||
note: required by a bound in `call_it`
|
note: required by a bound in `call_it`
|
||||||
--> $DIR/unboxed-closures-unsafe-extern-fn.rs:9:15
|
--> $DIR/unboxed-closures-unsafe-extern-fn.rs:9:15
|
||||||
|
|
|
|
||||||
|
@ -18,12 +18,12 @@ error[E0277]: expected a `FnMut<(&isize,)>` closure, found `for<'r> unsafe fn(&'
|
||||||
--> $DIR/unboxed-closures-unsafe-extern-fn.rs:25:25
|
--> $DIR/unboxed-closures-unsafe-extern-fn.rs:25:25
|
||||||
|
|
|
|
||||||
LL | let y = call_it_mut(&mut square, 22);
|
LL | let y = call_it_mut(&mut square, 22);
|
||||||
| ----------- ^^^^^^^^^^^ expected an `FnMut<(&isize,)>` closure, found `for<'r> unsafe fn(&'r isize) -> isize {square}`
|
| ----------- ^^^^^^^^^^^ call the function in a closure: `|| unsafe { /* code */ }`
|
||||||
| |
|
| |
|
||||||
| required by a bound introduced by this call
|
| required by a bound introduced by this call
|
||||||
|
|
|
|
||||||
= help: the trait `for<'r> FnMut<(&'r isize,)>` is not implemented for `for<'r> unsafe fn(&'r isize) -> isize {square}`
|
= help: the trait `for<'r> FnMut<(&'r isize,)>` is not implemented for `for<'r> unsafe fn(&'r isize) -> isize {square}`
|
||||||
= note: unsafe functions must be wrapped in closures: `|| unsafe { /* code */ }`
|
= note: unsafe function cannot be called generically without an unsafe block
|
||||||
note: required by a bound in `call_it_mut`
|
note: required by a bound in `call_it_mut`
|
||||||
--> $DIR/unboxed-closures-unsafe-extern-fn.rs:12:19
|
--> $DIR/unboxed-closures-unsafe-extern-fn.rs:12:19
|
||||||
|
|
|
|
||||||
|
@ -34,12 +34,12 @@ error[E0277]: expected a `FnOnce<(&isize,)>` closure, found `for<'r> unsafe fn(&
|
||||||
--> $DIR/unboxed-closures-unsafe-extern-fn.rs:30:26
|
--> $DIR/unboxed-closures-unsafe-extern-fn.rs:30:26
|
||||||
|
|
|
|
||||||
LL | let z = call_it_once(square, 22);
|
LL | let z = call_it_once(square, 22);
|
||||||
| ------------ ^^^^^^ expected an `FnOnce<(&isize,)>` closure, found `for<'r> unsafe fn(&'r isize) -> isize {square}`
|
| ------------ ^^^^^^ call the function in a closure: `|| unsafe { /* code */ }`
|
||||||
| |
|
| |
|
||||||
| required by a bound introduced by this call
|
| required by a bound introduced by this call
|
||||||
|
|
|
|
||||||
= help: the trait `for<'r> FnOnce<(&'r isize,)>` is not implemented for `for<'r> unsafe fn(&'r isize) -> isize {square}`
|
= help: the trait `for<'r> FnOnce<(&'r isize,)>` is not implemented for `for<'r> unsafe fn(&'r isize) -> isize {square}`
|
||||||
= note: unsafe functions must be wrapped in closures: `|| unsafe { /* code */ }`
|
= note: unsafe function cannot be called generically without an unsafe block
|
||||||
note: required by a bound in `call_it_once`
|
note: required by a bound in `call_it_once`
|
||||||
--> $DIR/unboxed-closures-unsafe-extern-fn.rs:15:20
|
--> $DIR/unboxed-closures-unsafe-extern-fn.rs:15:20
|
||||||
|
|
|
|
||||||
|
|
|
@ -2,12 +2,12 @@ error[E0277]: expected a `Fn<(&isize,)>` closure, found `unsafe fn(isize) -> isi
|
||||||
--> $DIR/unboxed-closures-wrong-arg-type-extern-fn.rs:21:21
|
--> $DIR/unboxed-closures-wrong-arg-type-extern-fn.rs:21:21
|
||||||
|
|
|
|
||||||
LL | let x = call_it(&square, 22);
|
LL | let x = call_it(&square, 22);
|
||||||
| ------- ^^^^^^^ expected an `Fn<(&isize,)>` closure, found `unsafe fn(isize) -> isize {square}`
|
| ------- ^^^^^^^ call the function in a closure: `|| unsafe { /* code */ }`
|
||||||
| |
|
| |
|
||||||
| required by a bound introduced by this call
|
| required by a bound introduced by this call
|
||||||
|
|
|
|
||||||
= help: the trait `for<'r> Fn<(&'r isize,)>` is not implemented for `unsafe fn(isize) -> isize {square}`
|
= help: the trait `for<'r> Fn<(&'r isize,)>` is not implemented for `unsafe fn(isize) -> isize {square}`
|
||||||
= note: unsafe functions must be wrapped in closures: `|| unsafe { /* code */ }`
|
= note: unsafe function cannot be called generically without an unsafe block
|
||||||
note: required by a bound in `call_it`
|
note: required by a bound in `call_it`
|
||||||
--> $DIR/unboxed-closures-wrong-arg-type-extern-fn.rs:10:15
|
--> $DIR/unboxed-closures-wrong-arg-type-extern-fn.rs:10:15
|
||||||
|
|
|
|
||||||
|
@ -18,12 +18,12 @@ error[E0277]: expected a `FnMut<(&isize,)>` closure, found `unsafe fn(isize) ->
|
||||||
--> $DIR/unboxed-closures-wrong-arg-type-extern-fn.rs:26:25
|
--> $DIR/unboxed-closures-wrong-arg-type-extern-fn.rs:26:25
|
||||||
|
|
|
|
||||||
LL | let y = call_it_mut(&mut square, 22);
|
LL | let y = call_it_mut(&mut square, 22);
|
||||||
| ----------- ^^^^^^^^^^^ expected an `FnMut<(&isize,)>` closure, found `unsafe fn(isize) -> isize {square}`
|
| ----------- ^^^^^^^^^^^ call the function in a closure: `|| unsafe { /* code */ }`
|
||||||
| |
|
| |
|
||||||
| required by a bound introduced by this call
|
| required by a bound introduced by this call
|
||||||
|
|
|
|
||||||
= help: the trait `for<'r> FnMut<(&'r isize,)>` is not implemented for `unsafe fn(isize) -> isize {square}`
|
= help: the trait `for<'r> FnMut<(&'r isize,)>` is not implemented for `unsafe fn(isize) -> isize {square}`
|
||||||
= note: unsafe functions must be wrapped in closures: `|| unsafe { /* code */ }`
|
= note: unsafe function cannot be called generically without an unsafe block
|
||||||
note: required by a bound in `call_it_mut`
|
note: required by a bound in `call_it_mut`
|
||||||
--> $DIR/unboxed-closures-wrong-arg-type-extern-fn.rs:13:19
|
--> $DIR/unboxed-closures-wrong-arg-type-extern-fn.rs:13:19
|
||||||
|
|
|
|
||||||
|
@ -34,12 +34,12 @@ error[E0277]: expected a `FnOnce<(&isize,)>` closure, found `unsafe fn(isize) ->
|
||||||
--> $DIR/unboxed-closures-wrong-arg-type-extern-fn.rs:31:26
|
--> $DIR/unboxed-closures-wrong-arg-type-extern-fn.rs:31:26
|
||||||
|
|
|
|
||||||
LL | let z = call_it_once(square, 22);
|
LL | let z = call_it_once(square, 22);
|
||||||
| ------------ ^^^^^^ expected an `FnOnce<(&isize,)>` closure, found `unsafe fn(isize) -> isize {square}`
|
| ------------ ^^^^^^ call the function in a closure: `|| unsafe { /* code */ }`
|
||||||
| |
|
| |
|
||||||
| required by a bound introduced by this call
|
| required by a bound introduced by this call
|
||||||
|
|
|
|
||||||
= help: the trait `for<'r> FnOnce<(&'r isize,)>` is not implemented for `unsafe fn(isize) -> isize {square}`
|
= help: the trait `for<'r> FnOnce<(&'r isize,)>` is not implemented for `unsafe fn(isize) -> isize {square}`
|
||||||
= note: unsafe functions must be wrapped in closures: `|| unsafe { /* code */ }`
|
= note: unsafe function cannot be called generically without an unsafe block
|
||||||
note: required by a bound in `call_it_once`
|
note: required by a bound in `call_it_once`
|
||||||
--> $DIR/unboxed-closures-wrong-arg-type-extern-fn.rs:16:20
|
--> $DIR/unboxed-closures-wrong-arg-type-extern-fn.rs:16:20
|
||||||
|
|
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue