1
Fork 0

Try to render shorthand differently

This commit is contained in:
Oli Scherer 2024-12-15 20:26:18 +00:00
parent 33651f49a0
commit 1952b87780
2 changed files with 12 additions and 9 deletions

View file

@ -205,9 +205,15 @@ impl<'tcx> TypeErrCtxt<'_, 'tcx> {
if self_ty.is_fn() { if self_ty.is_fn() {
let fn_sig = self_ty.fn_sig(self.tcx); let fn_sig = self_ty.fn_sig(self.tcx);
let shortname = match fn_sig.safety() { let shortname = if let ty::FnDef(def_id, _) = self_ty.kind()
hir::Safety::Safe => "fn", && self.tcx.codegen_fn_attrs(def_id).safe_target_features
hir::Safety::Unsafe => "unsafe fn", {
"#[target_feature] fn"
} else {
match fn_sig.safety() {
hir::Safety::Safe => "fn",
hir::Safety::Unsafe => "unsafe fn",
}
}; };
flags.push((sym::_Self, Some(shortname.to_owned()))); flags.push((sym::_Self, Some(shortname.to_owned())));
} }

View file

@ -2,12 +2,11 @@ error[E0277]: expected a `Fn()` closure, found `#[target_features] fn() {foo}`
--> $DIR/fn-traits.rs:24:10 --> $DIR/fn-traits.rs:24:10
| |
LL | call(foo); LL | call(foo);
| ---- ^^^ call the function in a closure: `|| unsafe { /* code */ }` | ---- ^^^ expected an `Fn()` closure, found `#[target_features] fn() {foo}`
| | | |
| required by a bound introduced by this call | required by a bound introduced by this call
| |
= help: the trait `Fn()` is not implemented for fn item `#[target_features] fn() {foo}` = help: the trait `Fn()` is not implemented for fn item `#[target_features] fn() {foo}`
= note: unsafe function cannot be called generically without an unsafe block
= note: wrap the `#[target_features] fn() {foo}` in a closure with no arguments: `|| { /* code */ }` = note: wrap the `#[target_features] fn() {foo}` in a closure with no arguments: `|| { /* code */ }`
= note: `#[target_feature]` functions do not implement the `Fn` traits = note: `#[target_feature]` functions do not implement the `Fn` traits
note: required by a bound in `call` note: required by a bound in `call`
@ -20,12 +19,11 @@ error[E0277]: expected a `FnMut()` closure, found `#[target_features] fn() {foo}
--> $DIR/fn-traits.rs:25:14 --> $DIR/fn-traits.rs:25:14
| |
LL | call_mut(foo); LL | call_mut(foo);
| -------- ^^^ call the function in a closure: `|| unsafe { /* code */ }` | -------- ^^^ expected an `FnMut()` closure, found `#[target_features] fn() {foo}`
| | | |
| required by a bound introduced by this call | required by a bound introduced by this call
| |
= help: the trait `FnMut()` is not implemented for fn item `#[target_features] fn() {foo}` = help: the trait `FnMut()` is not implemented for fn item `#[target_features] fn() {foo}`
= note: unsafe function cannot be called generically without an unsafe block
= note: wrap the `#[target_features] fn() {foo}` in a closure with no arguments: `|| { /* code */ }` = note: wrap the `#[target_features] fn() {foo}` in a closure with no arguments: `|| { /* code */ }`
= note: `#[target_feature]` functions do not implement the `Fn` traits = note: `#[target_feature]` functions do not implement the `Fn` traits
note: required by a bound in `call_mut` note: required by a bound in `call_mut`
@ -38,12 +36,11 @@ error[E0277]: expected a `FnOnce()` closure, found `#[target_features] fn() {foo
--> $DIR/fn-traits.rs:26:15 --> $DIR/fn-traits.rs:26:15
| |
LL | call_once(foo); LL | call_once(foo);
| --------- ^^^ call the function in a closure: `|| unsafe { /* code */ }` | --------- ^^^ expected an `FnOnce()` closure, found `#[target_features] fn() {foo}`
| | | |
| required by a bound introduced by this call | required by a bound introduced by this call
| |
= help: the trait `FnOnce()` is not implemented for fn item `#[target_features] fn() {foo}` = help: the trait `FnOnce()` is not implemented for fn item `#[target_features] fn() {foo}`
= note: unsafe function cannot be called generically without an unsafe block
= note: wrap the `#[target_features] fn() {foo}` in a closure with no arguments: `|| { /* code */ }` = note: wrap the `#[target_features] fn() {foo}` in a closure with no arguments: `|| { /* code */ }`
= note: `#[target_feature]` functions do not implement the `Fn` traits = note: `#[target_feature]` functions do not implement the `Fn` traits
note: required by a bound in `call_once` note: required by a bound in `call_once`