rust/tests/ui/traits
bors 6fc0273b5a Auto merge of #112320 - compiler-errors:do-not-impl-via-obj, r=lcnr
Add `implement_via_object` to `rustc_deny_explicit_impl` to control object candidate assembly

Some built-in traits are special, since they are used to prove facts about the program that are important for later phases of compilation such as codegen and CTFE. For example, the `Unsize` trait is used to assert to the compiler that we are able to unsize a type into another type. It doesn't have any methods because it doesn't actually *instruct* the compiler how to do this unsizing, but this is later used (alongside an exhaustive match of combinations of unsizeable types) during codegen to generate unsize coercion code.

Due to this, these built-in traits are incompatible with the type erasure provided by object types. For example, the existence of `dyn Unsize<T>` does not mean that the compiler is able to unsize `Box<dyn Unsize<T>>` into `Box<T>`, since `Unsize` is a *witness* to the fact that a type can be unsized, and it doesn't actually encode that unsizing operation in its vtable as mentioned above.

The old trait solver gets around this fact by having complex control flow that never considers object bounds for certain built-in traits:
2f896da247/compiler/rustc_trait_selection/src/traits/select/candidate_assembly.rs (L61-L132)

However, candidate assembly in the new solver is much more lovely, and I'd hate to add this list of opt-out cases into the new solver. Instead of maintaining this complex and hard-coded control flow, instead we can make this a property of the trait via a built-in attribute. We already have such a build attribute that's applied to every single trait that we care about: `rustc_deny_explicit_impl`. This PR adds `implement_via_object` as a meta-item to that attribute that allows us to opt a trait out of object-bound candidate assembly as well.

r? `@lcnr`
2023-06-20 08:42:37 +00:00
..
alias
associated_type_bound
auxiliary
bound Adjust UI tests for unit_bindings 2023-06-12 20:24:48 +08:00
default-method
inductive-overflow
inheritance
negative-bounds Don't compute trait super bounds unless they're positive 2023-05-04 17:24:13 +00:00
negative-impls rustc_middle: Fix opt_item_ident for non-local def ids 2023-05-03 20:09:10 +03:00
new-solver Rollup merge of #112443 - compiler-errors:next-solver-opportunistically-resolve-regions, r=lcnr 2023-06-16 14:46:15 +05:30
non_lifetime_binders Don't ICE on bound var in reject_fn_ptr_impls 2023-06-19 02:52:03 +00:00
object Add a test for -Zprint-vtable-sizes 2023-06-13 15:16:48 +00:00
reservation-impl
solver-cycles add test 2023-05-19 10:44:38 +02:00
suggest-deferences
trait-upcasting Note base types of coercion 2023-05-12 00:10:52 +00:00
vtable
wf-object
alignment-gep-tup-like-1.rs
anon_trait_static_method_exe.rs
anon-static-method.rs
as-struct-constructor.rs
as-struct-constructor.stderr
assignability-trait.rs
assoc-type-in-superbad.rs
assoc-type-in-superbad.stderr
assoc-type-in-supertrait.rs
astconv-cycle-between-and-type.rs
augmented-assignments-trait.rs
bad-method-typaram-kind.rs
bad-method-typaram-kind.stderr
bad-sized.rs
bad-sized.stderr
bug-7183-generics.rs
bug-7295.rs
cache-issue-18209.rs
cache-reached-depth-ice.rs
cache-reached-depth-ice.stderr
coercion-generic-bad.rs
coercion-generic-bad.stderr Note base types of coercion 2023-05-12 00:10:52 +00:00
coercion-generic-regions.rs
coercion-generic-regions.stderr
coercion-generic.rs
coercion.rs
composition-trivial.rs
conditional-dispatch.rs
conditional-model-fn.rs
conservative_impl_trait.rs
copy-guessing.rs Rename drop_copy lint to dropping_copy_types 2023-05-21 13:37:32 +02:00
copy-guessing.stderr do not allow inference in pred_known_to_hold_modulo_regions 2023-05-12 18:47:45 +00:00
copy-impl-cannot-normalize.rs
copy-impl-cannot-normalize.stderr
copy-is-not-modulo-regions.not_static.stderr
copy-is-not-modulo-regions.rs
copy-requires-self-wf.rs
cycle-cache-err-60010.rs
cycle-cache-err-60010.stderr add test 2023-05-19 10:44:38 +02:00
cycle-generic-bound.rs
cycle-type-trait.rs
deny-builtin-object-impl.current.stderr Merge attrs, better validation 2023-06-20 04:38:55 +00:00
deny-builtin-object-impl.next.stderr Merge attrs, better validation 2023-06-20 04:38:55 +00:00
deny-builtin-object-impl.rs Merge attrs, better validation 2023-06-20 04:38:55 +00:00
do-not-mention-type-params-by-name-in-suggestion-issue-96292.rs
do-not-mention-type-params-by-name-in-suggestion-issue-96292.stderr
duplicate-methods.rs
duplicate-methods.stderr
dyn-trait.rs
early-vtbl-resolution.rs
elaborate-type-region.rs
false-ambiguity-where-clause-builtin-bound.rs
fmt-pointer-trait.rs
fn-trait-cast-diagnostic.rs
fn-trait-cast-diagnostic.stderr
generic.rs
ignore-err-impls.rs
ignore-err-impls.stderr
impl_trait_as_trait_return_position.rs
impl-1.rs
impl-1.stderr
impl-2.rs
impl-bounds-checking.rs
impl-bounds-checking.stderr
impl-can-not-have-untraitful-items.rs
impl-can-not-have-untraitful-items.stderr
impl-different-num-params.rs
impl-different-num-params.stderr
impl-evaluation-order.rs Rename drop_copy lint to dropping_copy_types 2023-05-21 13:37:32 +02:00
impl-for-module.rs
impl-for-module.stderr
impl-implicit-trait.rs
impl-inherent-prefer-over-trait.rs
impl-method-mismatch.rs
impl-method-mismatch.stderr
impl-object-overlap-issue-23853.rs
impl-of-supertrait-has-wrong-lifetime-parameters.rs
impl-of-supertrait-has-wrong-lifetime-parameters.stderr
impl.rs
infer-from-object-issue-26952.rs vars are ? 2023-04-25 19:53:09 +00:00
inherent-method-order.rs
invalid_operator_trait.rs
invalid_operator_trait.stderr
issue-3683.rs
issue-3973.rs
issue-3973.stderr
issue-4107.rs
issue-6128.rs
issue-6334.rs
issue-7013.rs
issue-7013.stderr Note base types of coercion 2023-05-12 00:10:52 +00:00
issue-8153.rs
issue-8153.stderr
issue-9394-inherited-calls.rs
issue-18400.rs
issue-18400.stderr
issue-18412.rs
issue-20692.rs
issue-20692.stderr Note base types of coercion 2023-05-12 00:10:52 +00:00
issue-22019.rs
issue-22110.rs
issue-22384.rs
issue-22384.stderr
issue-22655.rs
issue-23003-overflow.rs
issue-23003.rs
issue-23825.rs
issue-24010.rs
issue-26339.rs
issue-28576.rs
issue-28576.stderr
issue-32963.rs
issue-32963.stderr
issue-33140-hack-boundaries.rs
issue-33140-hack-boundaries.stderr
issue-33140.rs
issue-33140.stderr
issue-35869.rs
issue-35869.stderr
issue-38033.rs
issue-38404.rs Don't use implied trait predicates in gather_explicit_predicates_of 2023-05-01 15:45:28 +00:00
issue-38404.stderr Don't use implied trait predicates in gather_explicit_predicates_of 2023-05-01 15:45:28 +00:00
issue-38604.rs
issue-38604.stderr Note base types of coercion 2023-05-12 00:10:52 +00:00
issue-43132.rs
issue-43784-supertrait.rs
issue-43784-supertrait.stderr
issue-50480.rs
issue-50480.stderr
issue-52893.rs
issue-52893.stderr
issue-56202.rs
issue-56488.rs
issue-59029-1.rs
issue-59029-1.stderr
issue-59029-2.rs
issue-65284-suggest-generic-trait-bound.rs
issue-65284-suggest-generic-trait-bound.stderr
issue-65673.rs
issue-65673.stderr
issue-68295.rs
issue-68295.stderr
issue-70944.rs
issue-71036.rs
issue-71036.stderr
issue-71136.rs
issue-71136.stderr
issue-72410.rs
issue-72410.stderr
issue-72455.rs
issue-75627.rs
issue-75627.stderr
issue-77982.rs
issue-77982.stderr
issue-78372.rs
issue-78372.stderr
issue-78632.rs
issue-79458.rs
issue-79458.stderr
issue-82830.rs
issue-83538-tainted-cache-after-cycle.rs
issue-83538-tainted-cache-after-cycle.stderr
issue-84399-bad-fresh-caching.rs
issue-85360-eval-obligation-ice.rs
issue-85360-eval-obligation-ice.stderr
issue-85735.rs
issue-85735.stderr
issue-87558.rs
issue-87558.stderr
issue-89119.rs
issue-90195-2.rs
issue-90195.rs
issue-90662-projection-caching.rs
issue-91594.rs
issue-91594.stderr
issue-91949-hangs-on-recursion.rs Ignore tests that hang in new solver 2023-06-09 21:57:37 +00:00
issue-91949-hangs-on-recursion.stderr Ignore tests that hang in new solver 2023-06-09 21:57:37 +00:00
issue-92292.rs
issue-95311.rs
issue-95898.rs
issue-95898.stderr
issue-96664.rs
issue-96665.rs
issue-97576.rs
issue-97576.stderr
issue-97695-double-trivial-bound.rs
issue-99875.rs
issue-99875.stderr
issue-102989.rs
issue-102989.stderr
issue-103563.rs
issue-104322.rs
issue-105231.rs fix: inline predicate_may_hold_fatal 2023-06-16 11:09:53 +08:00
issue-105231.stderr fix: inline predicate_may_hold_fatal 2023-06-16 11:09:53 +08:00
issue-106072.rs Emits E0599 when meeting MyTrait::missing_method 2023-05-17 16:59:39 +08:00
issue-106072.stderr Emits E0599 when meeting MyTrait::missing_method 2023-05-17 16:59:39 +08:00
item-inside-macro.rs
item-privacy.rs
item-privacy.stderr
kindck-owned-contains-1.rs
map-types.rs
map-types.stderr Note base types of coercion 2023-05-12 00:10:52 +00:00
matching-lifetimes.rs
matching-lifetimes.stderr
method-private.rs
method-private.stderr
monad.rs
monomorphized-callees-with-ty-params-3314.rs
multidispatch1.rs
multidispatch2.rs
multidispatch-bad.rs
multidispatch-bad.stderr
multidispatch-conditional-impl-not-considered.rs
multidispatch-convert-ambig-dest.rs
multidispatch-convert-ambig-dest.stderr
multidispatch-infer-convert-target.rs
mutual-recursion-issue-75860.rs
mutual-recursion-issue-75860.stderr
no_send-struct.rs
no_send-struct.stderr
no-fallback-multiple-impls.rs
no-fallback-multiple-impls.stderr
normalize-supertrait.rs
not-suggest-non-existing-fully-qualified-path.rs
not-suggest-non-existing-fully-qualified-path.stderr
object-does-not-impl-trait.rs
object-does-not-impl-trait.stderr
object-one-type-two-traits.rs
objects-owned-object-borrowed-method-headerless.rs
operator-overloading-issue-52025.rs
overlap-not-permitted-for-builtin-trait.rs
overlap-not-permitted-for-builtin-trait.stderr
overlap-permitted-for-marker-traits.rs
param-without-lifetime-constraint.rs
param-without-lifetime-constraint.stderr
parameterized-with-bounds.rs
pointee-deduction.rs
pointee-tail-is-generic-errors.rs
pointee-tail-is-generic-errors.stderr
pointee-tail-is-generic.rs
principal-less-objects.rs
privacy.rs
project-modulo-regions.rs
project-modulo-regions.with_clause.stderr
project-modulo-regions.without_clause.stderr
region-pointer-simple.rs
resolution-in-overloaded-op.rs
resolution-in-overloaded-op.stderr
safety-fn-body.mir.stderr
safety-fn-body.rs
safety-fn-body.thir.stderr
safety-inherent-impl.rs
safety-inherent-impl.stderr
safety-ok-cc.rs
safety-ok.rs
safety-trait-impl-cc.rs
safety-trait-impl-cc.stderr
safety-trait-impl.rs
safety-trait-impl.stderr
self-without-lifetime-constraint.rs
self-without-lifetime-constraint.stderr
static-method-generic-inference.rs
static-method-generic-inference.stderr
static-method-overwriting.rs
static-outlives-a-where-clause.rs
staticness-mismatch.rs
staticness-mismatch.stderr
suggest-fully-qualified-closure.rs
suggest-fully-qualified-closure.stderr
suggest-fully-qualified-path-with-adjustment.rs
suggest-fully-qualified-path-with-adjustment.stderr
suggest-fully-qualified-path-without-adjustment.rs
suggest-fully-qualified-path-without-adjustment.stderr
suggest-where-clause.rs
suggest-where-clause.stderr change std::marker::Sized to just Sized 2023-06-15 12:01:38 +02:00
superdefault-generics.rs
syntax-polarity.rs
syntax-trait-polarity.rs
syntax-trait-polarity.stderr
test-2.rs
test-2.stderr Note base types of coercion 2023-05-12 00:10:52 +00:00
test.rs
test.stderr
to-str.rs
track-obligations.rs
track-obligations.stderr
trait-or-new-type-instead.rs
trait-or-new-type-instead.stderr
typeclasses-eq-example-static.rs
typeclasses-eq-example.rs
ufcs-object.rs
unsend-future.rs
unsend-future.stderr Tweak await span 2023-04-27 17:18:11 +00:00
unspecified-self-in-trait-ref.rs
unspecified-self-in-trait-ref.stderr
use-before-def.rs
vtable-res-trait-param.rs
vtable-res-trait-param.stderr
where-clause-vs-impl.rs
with-bounds-default.rs
with-dst.rs
wrong-mul-method-signature.rs
wrong-mul-method-signature.stderr