diff --git a/compiler/rustc_ty_utils/src/opaque_types.rs b/compiler/rustc_ty_utils/src/opaque_types.rs index 5415662154daf..1b951ccb70ea3 100644 --- a/compiler/rustc_ty_utils/src/opaque_types.rs +++ b/compiler/rustc_ty_utils/src/opaque_types.rs @@ -33,8 +33,7 @@ enum CollectionMode { ImplTraitInAssocTypes, /// When collecting for an explicit `#[define_opaque]` attribute, find all TAITs Taits, - /// The default case, only collect RPITs and AsyncFn return types, as these are - /// always defined by the current item. + /// By default collect RPITs and async function return types defined by this item RpitAndAsyncFnOnly, } @@ -323,6 +322,12 @@ fn opaque_types_defined_by<'tcx>( if tcx.is_typeck_child(item.to_def_id()) { return tcx.opaque_types_defined_by(tcx.local_parent(item)); } + + // delegation inherits its signature without defining its opaque types + if tcx.hir_opt_delegation_sig_id(item).is_some() { + return tcx.mk_local_def_ids(&[]); + } + let kind = tcx.def_kind(item); trace!(?kind); let mut collector = OpaqueTypeCollector::new(tcx, item); diff --git a/tests/ui/delegation/fn-header.next.stderr b/tests/ui/delegation/fn-header.next.stderr deleted file mode 100644 index adca7d80a9b1d..0000000000000 --- a/tests/ui/delegation/fn-header.next.stderr +++ /dev/null @@ -1,11 +0,0 @@ -error[E0282]: type annotations needed - --> $DIR/fn-header.rs:23:17 - | -LL | reuse to_reuse::async_fn; - | ^^^^^^^^ cannot infer type - | - = note: cannot infer type of hidden type of opaque - -error: aborting due to 1 previous error - -For more information about this error, try `rustc --explain E0282`. diff --git a/tests/ui/delegation/fn-header.rs b/tests/ui/delegation/fn-header.rs index 8aae776e295ff..a036dec4872a9 100644 --- a/tests/ui/delegation/fn-header.rs +++ b/tests/ui/delegation/fn-header.rs @@ -1,8 +1,7 @@ //@ revisions: old next //@ ignore-compare-mode-next-solver (explicit revisions) //@[next] compile-flags: -Znext-solver -//@[next] known-bug: trait-system-refactor-initiative#304 -//@[old] check-pass +//@ check-pass //@ edition:2018 //@ aux-crate:fn_header_aux=fn-header-aux.rs //@ ignore-backends: gcc diff --git a/tests/ui/delegation/impl-trait.next.stderr b/tests/ui/delegation/impl-trait.next.stderr deleted file mode 100644 index 84e1e8ec4453a..0000000000000 --- a/tests/ui/delegation/impl-trait.next.stderr +++ /dev/null @@ -1,19 +0,0 @@ -error[E0282]: type annotations needed - --> $DIR/impl-trait.rs:13:17 - | -LL | reuse to_reuse::foo; - | ^^^ cannot infer type - | - = note: cannot infer type of hidden type of opaque - -error[E0282]: type annotations needed - --> $DIR/impl-trait.rs:23:21 - | -LL | reuse to_reuse::foo; - | ^^^ cannot infer type - | - = note: cannot infer type of hidden type of opaque - -error: aborting due to 2 previous errors - -For more information about this error, try `rustc --explain E0282`. diff --git a/tests/ui/delegation/impl-trait.rs b/tests/ui/delegation/impl-trait.rs index 3b0d1a0383549..c6aec41dd3246 100644 --- a/tests/ui/delegation/impl-trait.rs +++ b/tests/ui/delegation/impl-trait.rs @@ -1,8 +1,7 @@ //@ revisions: old next //@ ignore-compare-mode-next-solver (explicit revisions) //@[next] compile-flags: -Znext-solver -//@[next] known-bug: trait-system-refactor-initiative#304 -//@[old] check-pass +//@ check-pass #![feature(fn_delegation)]