rust/tests/ui/self
Michael Goulet 0bb00e2085
Rollup merge of #137289 - compiler-errors:coerce-unsized-errors, r=oli-obk
Consolidate and improve error messaging for `CoerceUnsized` and `DispatchFromDyn`

Firstly, this PR consolidates and reworks the error diagnostics for `CoercePointee` and `DispatchFromDyn`. There was a ton of duplication for no reason -- this reworks both the errors and also the error codes, since they can be shared between both traits since they report the same thing.

Secondly, when encountering a struct with multiple fields that must be coerced, point out the field spans, rather than mentioning the fields by name. This makes the error message clearer, but also means that we don't mention the `__S` dummy parameter for `derive(CoercePointee)`.

Thirdly, emit a custom error message when we encounter a trait error that comes from the recursive field `CoerceUnsized`/`DispatchFromDyn` trait check. **Note:** This is the only one I'm not too satisfied with -- I think it could use some more refinement, but ideally it explains that the field must be an unsize-able pointer... Feedback welcome.

Finally, don't emit `DispatchFromDyn` validity errors if we detect `CoerceUnsized` validity errors from an impl of the same ADT.

This is best reviewed per commit.

r? `@oli-obk` perhaps?

cc `@dingxiangfei2009` -- sorry for making my own attempt at this PR, but I wanted to see if I could implement a fix for #136796 in a less complicated way, since communicating over github review comments can be a bit slow. I'll leave comments inline to explain my thinking about the diagnostics changes.
2025-02-24 19:21:45 -05:00
..
auxiliary
elision Bless ui tests. 2024-10-04 23:38:41 +00:00
arbitrary_self_type_infinite_recursion.rs Arbitrary self types v2: recursion test 2025-02-05 08:18:38 +00:00
arbitrary_self_type_infinite_recursion.stderr Arbitrary self types v2: recursion test 2025-02-05 08:18:38 +00:00
arbitrary_self_type_mut_difference.rs
arbitrary_self_type_mut_difference.stderr Show diff suggestion format on verbose replacement 2025-02-10 20:21:39 +00:00
arbitrary_self_types_by_value_reborrow.rs Arbitrary self types v2: detect shadowing problems. 2024-12-11 11:59:13 +00:00
arbitrary_self_types_dispatch_to_vtable.rs Make sure to use Receiver trait when extracting object method candidate 2025-01-07 02:27:15 +00:00
arbitrary_self_types_generic_over_receiver.rs Arbitrary self types v2: use Receiver trait 2024-12-11 11:59:12 +00:00
arbitrary_self_types_generic_over_receiver.stderr Arbitrary self types v2: use Receiver trait 2024-12-11 11:59:12 +00:00
arbitrary_self_types_generic_receiver.rs Arbitrary self types v2: generics test. 2024-12-11 11:59:13 +00:00
arbitrary_self_types_generic_receiver.stderr Arbitrary self types v2: generics test. 2024-12-11 11:59:13 +00:00
arbitrary_self_types_lifetime_elision.rs Arbitrary self types v2: use Receiver trait 2024-12-11 11:59:12 +00:00
arbitrary_self_types_needing_box_or_arc_wrapping.fixed
arbitrary_self_types_needing_box_or_arc_wrapping.rs
arbitrary_self_types_needing_box_or_arc_wrapping.stderr
arbitrary_self_types_needing_mut_pin.fixed
arbitrary_self_types_needing_mut_pin.rs
arbitrary_self_types_needing_mut_pin.stderr
arbitrary_self_types_nested.rs
arbitrary_self_types_niche_deshadowing.rs Arbitrary self types v2: niche deshadowing test 2024-12-19 12:02:08 +00:00
arbitrary_self_types_no_generics.rs Arbitrary self types v2: use Receiver trait 2024-12-11 11:59:12 +00:00
arbitrary_self_types_nonnull.rs Arbitrary self types v2: Weak, NonNull hints 2024-12-14 20:27:15 +00:00
arbitrary_self_types_nonnull.stderr Arbitrary self types v2: Weak, NonNull hints 2024-12-14 20:27:15 +00:00
arbitrary_self_types_not_allow_call_with_no_deref.rs Arbitrary self types v2: use Receiver trait 2024-12-11 11:59:12 +00:00
arbitrary_self_types_not_allow_call_with_no_deref.stderr More sophisticated span trimming 2025-02-21 00:41:17 +00:00
arbitrary_self_types_pin_getref.feature.stderr Arbitrary self types v2: no deshadow pre feature. 2024-12-20 12:29:00 +00:00
arbitrary_self_types_pin_getref.rs Arbitrary self types v2: no deshadow pre feature. 2024-12-20 12:29:00 +00:00
arbitrary_self_types_pin_lifetime_impl_trait-async.rs
arbitrary_self_types_pin_lifetime_impl_trait-async.stderr Bless test fallout 2024-08-17 12:43:25 -04:00
arbitrary_self_types_pin_lifetime_impl_trait.rs
arbitrary_self_types_pin_lifetime_impl_trait.stderr Bless test fallout 2024-08-17 12:43:25 -04:00
arbitrary_self_types_pin_lifetime_mismatch-async.rs
arbitrary_self_types_pin_lifetime_mismatch-async.stderr Bless ui tests. 2024-10-04 23:38:41 +00:00
arbitrary_self_types_pin_lifetime_mismatch.rs Run rustfmt on modified tests 2024-05-17 20:31:13 +00:00
arbitrary_self_types_pin_lifetime_mismatch.stderr Detect when a lifetime is being reused in suggestion 2024-05-17 21:23:47 +00:00
arbitrary_self_types_pin_lifetime-async.rs
arbitrary_self_types_pin_lifetime.rs
arbitrary_self_types_pin_needing_borrow.rs
arbitrary_self_types_pin_needing_borrow.stderr
arbitrary_self_types_pointers_and_wrappers.rs UI tests: Rename "object safe" to "dyn compatible" 2024-10-10 01:13:29 +02:00
arbitrary_self_types_raw_pointer_struct.rs Arbitrary self types v2: pointers feature gate. 2024-08-27 17:32:35 +00:00
arbitrary_self_types_raw_pointer_trait.rs Arbitrary self types v2: pointers feature gate. 2024-08-27 17:32:35 +00:00
arbitrary_self_types_recursive_receiver.rs Arbitrary self types v2: explain test. 2025-01-27 11:11:27 +00:00
arbitrary_self_types_shadowing_val_constptr.rs Arbitrary self types v2: detect shadowing problems. 2024-12-11 11:59:13 +00:00
arbitrary_self_types_silly.rs
arbitrary_self_types_stdlib_pointers.rs
arbitrary_self_types_struct_receiver_trait.rs Arbitrary self types v2: use Receiver trait 2024-12-11 11:59:12 +00:00
arbitrary_self_types_struct.rs
arbitrary_self_types_trait_receiver_trait.rs Arbitrary self types v2: use Receiver trait 2024-12-11 11:59:12 +00:00
arbitrary_self_types_trait.rs
arbitrary_self_types_unshadowing_ptrs.rs Arbitrary self types v2: detect shadowing problems. 2024-12-11 11:59:13 +00:00
arbitrary_self_types_unshadowing_ptrs.stderr Arbitrary self types v2: detect shadowing problems. 2024-12-11 11:59:13 +00:00
arbitrary_self_types_unshadowing.rs Arbitrary self types v2: detect shadowing problems. 2024-12-11 11:59:13 +00:00
arbitrary_self_types_unshadowing.stderr Arbitrary self types v2: detect shadowing problems. 2024-12-11 11:59:13 +00:00
arbitrary_self_types_unsized_struct.rs
arbitrary_self_types_weak.rs Arbitrary self types v2: Weak, NonNull hints 2024-12-14 20:27:15 +00:00
arbitrary_self_types_weak.stderr Arbitrary self types v2: Weak, NonNull hints 2024-12-14 20:27:15 +00:00
arbitrary-self-from-method-substs-ice.rs Do not consider traits that have unsatisfied const conditions to be conditionally const 2025-01-14 18:52:42 +00:00
arbitrary-self-from-method-substs-ice.stderr Do not consider traits that have unsatisfied const conditions to be conditionally const 2025-01-14 18:52:42 +00:00
arbitrary-self-from-method-substs-with-receiver.rs Arbitrary self types v2: use Receiver trait 2024-12-11 11:59:12 +00:00
arbitrary-self-from-method-substs-with-receiver.stderr Do not assume const params are printed after type params 2025-01-24 16:51:20 +00:00
arbitrary-self-from-method-substs.default.stderr Arbitrary self types v2: use Receiver trait 2024-12-11 11:59:12 +00:00
arbitrary-self-from-method-substs.feature.stderr Do not assume const params are printed after type params 2025-01-24 16:51:20 +00:00
arbitrary-self-from-method-substs.rs Reject generic self types. 2024-10-30 10:48:08 +00:00
arbitrary-self-opaque.rs Avoid opaque type not constrained errors in the presence of other errors 2024-12-04 10:16:04 +00:00
arbitrary-self-opaque.stderr Arbitrary self types v2: adjust diagnostic. 2024-12-13 15:40:37 +00:00
arbitrary-self-types-dyn-incompatible.curr.stderr Compiler: Finalize dyn compatibility renaming 2025-01-26 21:20:31 +01:00
arbitrary-self-types-dyn-incompatible.rs Remove dyn_compatible_for_dispatch 2025-02-24 18:48:40 +00:00
arbitrary-self-types-dyn-incompatible.stderr Remove dyn_compatible_for_dispatch 2025-02-24 18:48:40 +00:00
builtin-superkinds-self-type.rs
by-value-self-in-mut-slot.rs
class-missing-self.rs
class-missing-self.stderr
conflicting_inner2.rs Arbitrary self types v2: detect shadowing problems. 2024-12-11 11:59:13 +00:00
conflicting_inner.rs Arbitrary self types v2: detect shadowing problems. 2024-12-11 11:59:13 +00:00
dispatch-from-dyn-layout-2.rs Remove unnecessary layout assertions for object-safe receivers 2025-02-04 01:50:31 +00:00
dispatch-from-dyn-layout-3.rs Remove unnecessary layout assertions for object-safe receivers 2025-02-04 01:50:31 +00:00
dispatch-from-dyn-layout.rs Remove unnecessary layout assertions for object-safe receivers 2025-02-04 01:50:31 +00:00
dispatch-from-dyn-zst-transmute-zst-nonzst.rs Consolidate and rework CoercePointee and DispatchFromDyn errors 2025-02-24 19:34:54 +00:00
dispatch-from-dyn-zst-transmute-zst-nonzst.stderr Consolidate and rework CoercePointee and DispatchFromDyn errors 2025-02-24 19:34:54 +00:00
dispatch-from-dyn-zst-transmute.rs Consolidate and rework CoercePointee and DispatchFromDyn errors 2025-02-24 19:34:54 +00:00
dispatch-from-dyn-zst-transmute.stderr Consolidate and rework CoercePointee and DispatchFromDyn errors 2025-02-24 19:34:54 +00:00
dyn-compatibility-sized-self-by-value-self.rs UI tests: Rename "object safe" to "dyn compatible" 2024-10-10 01:13:29 +02:00
dyn-compatibility-sized-self-generic-method.rs UI tests: Rename "object safe" to "dyn compatible" 2024-10-10 01:13:29 +02:00
dyn-compatibility-sized-self-return-Self.rs UI tests: Rename "object safe" to "dyn compatible" 2024-10-10 01:13:29 +02:00
explicit_self_xcrate_exe.rs tests: remove //@ pretty-expanded usages 2024-11-26 02:50:48 +08:00
explicit-self-closures.rs tests: remove //@ pretty-expanded usages 2024-11-26 02:50:48 +08:00
explicit-self-generic.rs
explicit-self-objects-uniq.rs
explicit-self.rs
invalid-self-dyn-receiver.rs Delay bug when method confirmation cannot upcast object pick of self 2025-02-04 04:23:04 +00:00
invalid-self-dyn-receiver.stderr Delay bug when method confirmation cannot upcast object pick of self 2025-02-04 04:23:04 +00:00
issue-61882-2.rs
issue-61882-2.stderr
issue-61882.rs
issue-61882.stderr
move-self.rs
objects-owned-object-owned-method.rs
phantomdata-in-coerce-and-dispatch-impls.rs Normalize field before checking PhantomData in coerce/dispatch impl validation 2025-01-14 18:47:23 +00:00
point-at-arbitrary-self-type-method.rs
point-at-arbitrary-self-type-method.stderr
point-at-arbitrary-self-type-trait-method.rs
point-at-arbitrary-self-type-trait-method.stderr
self_lifetime-async.rs elided_named_lifetimes: bless & add tests 2024-08-31 15:35:42 +03:00
self_lifetime-async.stderr elided_named_lifetimes: bless & add tests 2024-08-31 15:35:42 +03:00
self_lifetime.rs elided_named_lifetimes: bless & add tests 2024-08-31 15:35:42 +03:00
self_lifetime.stderr elided_named_lifetimes: bless & add tests 2024-08-31 15:35:42 +03:00
self_type_keyword-2.rs
self_type_keyword-2.stderr
self_type_keyword.rs
self_type_keyword.stderr Deny keyword lifetimes pre-expansion 2024-07-16 12:06:25 -04:00
self-ctor-nongeneric.rs Warn/error on self ctor from outer item in inner item 2024-05-18 13:08:34 -04:00
self-ctor-nongeneric.stderr Warn/error on self ctor from outer item in inner item 2024-05-18 13:08:34 -04:00
self-ctor.rs Warn/error on self ctor from outer item in inner item 2024-05-18 13:08:34 -04:00
self-ctor.stderr Warn/error on self ctor from outer item in inner item 2024-05-18 13:08:34 -04:00
self-impl-2.rs tests: remove //@ pretty-expanded usages 2024-11-26 02:50:48 +08:00
self-impl.rs
self-impl.stderr
self-in-mut-slot-default-method.rs
self-in-mut-slot-immediate-value.rs
self-in-typedefs.rs
self-infer.rs
self-infer.stderr Show diff suggestion format on verbose replacement 2025-02-10 20:21:39 +00:00
self-re-assign.rs
self-shadowing-import.rs
self-type-param.rs tests: remove //@ pretty-expanded usages 2024-11-26 02:50:48 +08:00
self-vs-path-ambiguity.rs
self-vs-path-ambiguity.stderr Make parse error suggestions verbose and fix spans 2024-07-12 03:02:57 +00:00
string-self-append.rs
suggest-self-2.rs
suggest-self-2.stderr
suggest-self.rs
suggest-self.stderr
ufcs-explicit-self.rs
uniq-self-in-mut-slot.rs
where-for-self.rs Update tests for hidden references to mutable static 2024-09-13 14:10:56 +03:00