Skip to content
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Commit 2fc9ce7

Browse files
authoredDec 14, 2024
Rollup merge of #134262 - adetaylor:revert-diagnostics, r=compiler-errors
Arbitrary self types v2: adjust diagnostic. The recently landed PR #132961 to adjust arbitrary self types was a bit overenthusiastic, advising folks to use the new Receiver trait even before it's been stabilized. Revert to the older wording of the lint in such cases. Tracking issue #44874 r? ``@wesleywiser``
2 parents cb459fa + 174dae6 commit 2fc9ce7

12 files changed

+45
-23
lines changed
 

‎compiler/rustc_hir_analysis/messages.ftl

+6
Original file line numberDiff line numberDiff line change
@@ -246,6 +246,12 @@ hir_analysis_invalid_receiver_ty = invalid `self` parameter type: `{$receiver_ty
246246
hir_analysis_invalid_receiver_ty_help =
247247
consider changing to `self`, `&self`, `&mut self`, or a type implementing `Receiver` such as `self: Box<Self>`, `self: Rc<Self>`, or `self: Arc<Self>`
248248
249+
hir_analysis_invalid_receiver_ty_help_no_arbitrary_self_types =
250+
consider changing to `self`, `&self`, `&mut self`, `self: Box<Self>`, `self: Rc<Self>`, `self: Arc<Self>`, or `self: Pin<P>` (where P is one of the previous types except `Self`)
251+
252+
hir_analysis_invalid_receiver_ty_no_arbitrary_self_types = invalid `self` parameter type: `{$receiver_ty}`
253+
.note = type of `self` must be `Self` or a type that dereferences to it
254+
249255
hir_analysis_invalid_union_field =
250256
field must implement `Copy` or be wrapped in `ManuallyDrop<...>` to be used in a union
251257
.note = union fields must not have drop side-effects, which is currently enforced via either `Copy` or `ManuallyDrop<...>`

‎compiler/rustc_hir_analysis/src/check/wfcheck.rs

+7-1
Original file line numberDiff line numberDiff line change
@@ -1748,9 +1748,15 @@ fn check_method_receiver<'tcx>(
17481748
// Report error; would not have worked with `arbitrary_self_types[_pointers]`.
17491749
{
17501750
match receiver_validity_err {
1751-
ReceiverValidityError::DoesNotDeref => {
1751+
ReceiverValidityError::DoesNotDeref if arbitrary_self_types_level.is_some() => {
17521752
tcx.dcx().emit_err(errors::InvalidReceiverTy { span, receiver_ty })
17531753
}
1754+
ReceiverValidityError::DoesNotDeref => {
1755+
tcx.dcx().emit_err(errors::InvalidReceiverTyNoArbitrarySelfTypes {
1756+
span,
1757+
receiver_ty,
1758+
})
1759+
}
17541760
ReceiverValidityError::MethodGenericParamUsed => {
17551761
tcx.dcx().emit_err(errors::InvalidGenericReceiverTy { span, receiver_ty })
17561762
}

‎compiler/rustc_hir_analysis/src/errors.rs

+10
Original file line numberDiff line numberDiff line change
@@ -1655,6 +1655,16 @@ pub(crate) struct NonConstRange {
16551655
pub span: Span,
16561656
}
16571657

1658+
#[derive(Diagnostic)]
1659+
#[diag(hir_analysis_invalid_receiver_ty_no_arbitrary_self_types, code = E0307)]
1660+
#[note]
1661+
#[help(hir_analysis_invalid_receiver_ty_help_no_arbitrary_self_types)]
1662+
pub(crate) struct InvalidReceiverTyNoArbitrarySelfTypes<'tcx> {
1663+
#[primary_span]
1664+
pub span: Span,
1665+
pub receiver_ty: Ty<'tcx>,
1666+
}
1667+
16581668
#[derive(Diagnostic)]
16591669
#[diag(hir_analysis_invalid_receiver_ty, code = E0307)]
16601670
#[note]

‎tests/ui/async-await/inference_var_self_argument.stderr

+2-2
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@ error[E0307]: invalid `self` parameter type: `&dyn Foo`
44
LL | async fn foo(self: &dyn Foo) {
55
| ^^^^^^^^
66
|
7-
= note: type of `self` must be `Self` or some type implementing `Receiver`
8-
= help: consider changing to `self`, `&self`, `&mut self`, or a type implementing `Receiver` such as `self: Box<Self>`, `self: Rc<Self>`, or `self: Arc<Self>`
7+
= note: type of `self` must be `Self` or a type that dereferences to it
8+
= help: consider changing to `self`, `&self`, `&mut self`, `self: Box<Self>`, `self: Rc<Self>`, `self: Arc<Self>`, or `self: Pin<P>` (where P is one of the previous types except `Self`)
99

1010
error[E0038]: the trait `Foo` cannot be made into an object
1111
--> $DIR/inference_var_self_argument.rs:5:5

‎tests/ui/async-await/issue-66312.stderr

+2-2
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@ error[E0307]: invalid `self` parameter type: `T`
44
LL | fn is_some(self: T);
55
| ^
66
|
7-
= note: type of `self` must be `Self` or some type implementing `Receiver`
8-
= help: consider changing to `self`, `&self`, `&mut self`, or a type implementing `Receiver` such as `self: Box<Self>`, `self: Rc<Self>`, or `self: Arc<Self>`
7+
= note: type of `self` must be `Self` or a type that dereferences to it
8+
= help: consider changing to `self`, `&self`, `&mut self`, `self: Box<Self>`, `self: Rc<Self>`, `self: Arc<Self>`, or `self: Pin<P>` (where P is one of the previous types except `Self`)
99

1010
error[E0308]: mismatched types
1111
--> $DIR/issue-66312.rs:9:8

‎tests/ui/feature-gates/feature-gate-dispatch-from-dyn-cell.stderr

+2-2
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@ error[E0307]: invalid `self` parameter type: `Cell<&Self>`
44
LL | fn cell(self: Cell<&Self>);
55
| ^^^^^^^^^^^
66
|
7-
= note: type of `self` must be `Self` or some type implementing `Receiver`
8-
= help: consider changing to `self`, `&self`, `&mut self`, or a type implementing `Receiver` such as `self: Box<Self>`, `self: Rc<Self>`, or `self: Arc<Self>`
7+
= note: type of `self` must be `Self` or a type that dereferences to it
8+
= help: consider changing to `self`, `&self`, `&mut self`, `self: Box<Self>`, `self: Rc<Self>`, `self: Arc<Self>`, or `self: Pin<P>` (where P is one of the previous types except `Self`)
99

1010
error: aborting due to 1 previous error
1111

‎tests/ui/issues/issue-56806.stderr

+2-2
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@ error[E0307]: invalid `self` parameter type: `Box<(dyn Trait + 'static)>`
44
LL | fn dyn_instead_of_self(self: Box<dyn Trait>);
55
| ^^^^^^^^^^^^^^
66
|
7-
= note: type of `self` must be `Self` or some type implementing `Receiver`
8-
= help: consider changing to `self`, `&self`, `&mut self`, or a type implementing `Receiver` such as `self: Box<Self>`, `self: Rc<Self>`, or `self: Arc<Self>`
7+
= note: type of `self` must be `Self` or a type that dereferences to it
8+
= help: consider changing to `self`, `&self`, `&mut self`, `self: Box<Self>`, `self: Rc<Self>`, `self: Arc<Self>`, or `self: Pin<P>` (where P is one of the previous types except `Self`)
99

1010
error: aborting due to 1 previous error
1111

‎tests/ui/self/arbitrary-self-opaque.stderr

+2-2
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@ error[E0307]: invalid `self` parameter type: `Bar`
44
LL | fn foo(self: Bar) {}
55
| ^^^
66
|
7-
= note: type of `self` must be `Self` or some type implementing `Receiver`
8-
= help: consider changing to `self`, `&self`, `&mut self`, or a type implementing `Receiver` such as `self: Box<Self>`, `self: Rc<Self>`, or `self: Arc<Self>`
7+
= note: type of `self` must be `Self` or a type that dereferences to it
8+
= help: consider changing to `self`, `&self`, `&mut self`, `self: Box<Self>`, `self: Rc<Self>`, `self: Arc<Self>`, or `self: Pin<P>` (where P is one of the previous types except `Self`)
99

1010
error: item does not constrain `Bar::{opaque#0}`, but has it in its signature
1111
--> $DIR/arbitrary-self-opaque.rs:7:8

‎tests/ui/span/issue-27522.stderr

+2-2
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@ error[E0307]: invalid `self` parameter type: `&SomeType`
44
LL | fn handler(self: &SomeType);
55
| ^^^^^^^^^
66
|
7-
= note: type of `self` must be `Self` or some type implementing `Receiver`
8-
= help: consider changing to `self`, `&self`, `&mut self`, or a type implementing `Receiver` such as `self: Box<Self>`, `self: Rc<Self>`, or `self: Arc<Self>`
7+
= note: type of `self` must be `Self` or a type that dereferences to it
8+
= help: consider changing to `self`, `&self`, `&mut self`, `self: Box<Self>`, `self: Rc<Self>`, `self: Arc<Self>`, or `self: Pin<P>` (where P is one of the previous types except `Self`)
99

1010
error: aborting due to 1 previous error
1111

‎tests/ui/suggestions/dyn-incompatible-trait-should-use-where-sized.stderr

+2-2
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,8 @@ error[E0307]: invalid `self` parameter type: `()`
3232
LL | fn bar(self: ()) {}
3333
| ^^
3434
|
35-
= note: type of `self` must be `Self` or some type implementing `Receiver`
36-
= help: consider changing to `self`, `&self`, `&mut self`, or a type implementing `Receiver` such as `self: Box<Self>`, `self: Rc<Self>`, or `self: Arc<Self>`
35+
= note: type of `self` must be `Self` or a type that dereferences to it
36+
= help: consider changing to `self`, `&self`, `&mut self`, `self: Box<Self>`, `self: Rc<Self>`, `self: Arc<Self>`, or `self: Pin<P>` (where P is one of the previous types except `Self`)
3737

3838
error: aborting due to 2 previous errors
3939

‎tests/ui/traits/issue-78372.stderr

+2-2
Original file line numberDiff line numberDiff line change
@@ -61,8 +61,8 @@ error[E0307]: invalid `self` parameter type: `Smaht<Self, T>`
6161
LL | fn foo(self: Smaht<Self, T>);
6262
| ^^^^^^^^^^^^^^
6363
|
64-
= note: type of `self` must be `Self` or some type implementing `Receiver`
65-
= help: consider changing to `self`, `&self`, `&mut self`, or a type implementing `Receiver` such as `self: Box<Self>`, `self: Rc<Self>`, or `self: Arc<Self>`
64+
= note: type of `self` must be `Self` or a type that dereferences to it
65+
= help: consider changing to `self`, `&self`, `&mut self`, `self: Box<Self>`, `self: Rc<Self>`, `self: Arc<Self>`, or `self: Pin<P>` (where P is one of the previous types except `Self`)
6666

6767
error[E0378]: the trait `DispatchFromDyn` may only be implemented for a coercion between structures
6868
--> $DIR/issue-78372.rs:3:1

‎tests/ui/ufcs/ufcs-explicit-self-bad.stderr

+6-6
Original file line numberDiff line numberDiff line change
@@ -22,26 +22,26 @@ error[E0307]: invalid `self` parameter type: `isize`
2222
LL | fn foo(self: isize, x: isize) -> isize {
2323
| ^^^^^
2424
|
25-
= note: type of `self` must be `Self` or some type implementing `Receiver`
26-
= help: consider changing to `self`, `&self`, `&mut self`, or a type implementing `Receiver` such as `self: Box<Self>`, `self: Rc<Self>`, or `self: Arc<Self>`
25+
= note: type of `self` must be `Self` or a type that dereferences to it
26+
= help: consider changing to `self`, `&self`, `&mut self`, `self: Box<Self>`, `self: Rc<Self>`, `self: Arc<Self>`, or `self: Pin<P>` (where P is one of the previous types except `Self`)
2727

2828
error[E0307]: invalid `self` parameter type: `Bar<isize>`
2929
--> $DIR/ufcs-explicit-self-bad.rs:19:18
3030
|
3131
LL | fn foo(self: Bar<isize>, x: isize) -> isize {
3232
| ^^^^^^^^^^
3333
|
34-
= note: type of `self` must be `Self` or some type implementing `Receiver`
35-
= help: consider changing to `self`, `&self`, `&mut self`, or a type implementing `Receiver` such as `self: Box<Self>`, `self: Rc<Self>`, or `self: Arc<Self>`
34+
= note: type of `self` must be `Self` or a type that dereferences to it
35+
= help: consider changing to `self`, `&self`, `&mut self`, `self: Box<Self>`, `self: Rc<Self>`, `self: Arc<Self>`, or `self: Pin<P>` (where P is one of the previous types except `Self`)
3636

3737
error[E0307]: invalid `self` parameter type: `&Bar<usize>`
3838
--> $DIR/ufcs-explicit-self-bad.rs:23:18
3939
|
4040
LL | fn bar(self: &Bar<usize>, x: isize) -> isize {
4141
| ^^^^^^^^^^^
4242
|
43-
= note: type of `self` must be `Self` or some type implementing `Receiver`
44-
= help: consider changing to `self`, `&self`, `&mut self`, or a type implementing `Receiver` such as `self: Box<Self>`, `self: Rc<Self>`, or `self: Arc<Self>`
43+
= note: type of `self` must be `Self` or a type that dereferences to it
44+
= help: consider changing to `self`, `&self`, `&mut self`, `self: Box<Self>`, `self: Rc<Self>`, `self: Arc<Self>`, or `self: Pin<P>` (where P is one of the previous types except `Self`)
4545

4646
error[E0308]: mismatched `self` parameter type
4747
--> $DIR/ufcs-explicit-self-bad.rs:37:21

0 commit comments

Comments
 (0)
Failed to load comments.