mirror of
https://github.com/rust-lang/rust.git
synced 2025-01-31 09:04:18 +00:00
Use smart-resolve when checking for trait in RHS of UFCS
This commit is contained in:
parent
c934ce9e0a
commit
d5b1ef1c3f
@ -122,6 +122,12 @@ pub(crate) enum ConstantItemKind {
|
||||
Static,
|
||||
}
|
||||
|
||||
#[derive(Debug, Copy, Clone, PartialEq, Eq)]
|
||||
enum RecordPartialRes {
|
||||
Yes,
|
||||
No,
|
||||
}
|
||||
|
||||
/// The rib kind restricts certain accesses,
|
||||
/// e.g. to a `Res::Local` of an outer item.
|
||||
#[derive(Copy, Clone, Debug)]
|
||||
@ -2682,6 +2688,7 @@ impl<'a: 'ast, 'b, 'ast, 'tcx> LateResolutionVisitor<'a, 'b, 'ast, 'tcx> {
|
||||
&path,
|
||||
PathSource::Trait(AliasPossibility::No),
|
||||
Finalize::new(trait_ref.ref_id, trait_ref.path.span),
|
||||
RecordPartialRes::Yes,
|
||||
);
|
||||
self.diagnostic_metadata.currently_processing_impl_trait = None;
|
||||
if let Some(def_id) = res.expect_full_res().opt_def_id() {
|
||||
@ -3420,6 +3427,7 @@ impl<'a: 'ast, 'b, 'ast, 'tcx> LateResolutionVisitor<'a, 'b, 'ast, 'tcx> {
|
||||
&Segment::from_path(path),
|
||||
source,
|
||||
Finalize::new(id, path.span),
|
||||
RecordPartialRes::Yes,
|
||||
);
|
||||
}
|
||||
|
||||
@ -3430,6 +3438,7 @@ impl<'a: 'ast, 'b, 'ast, 'tcx> LateResolutionVisitor<'a, 'b, 'ast, 'tcx> {
|
||||
path: &[Segment],
|
||||
source: PathSource<'ast>,
|
||||
finalize: Finalize,
|
||||
record_partial_res: RecordPartialRes,
|
||||
) -> PartialRes {
|
||||
let ns = source.namespace();
|
||||
|
||||
@ -3636,7 +3645,7 @@ impl<'a: 'ast, 'b, 'ast, 'tcx> LateResolutionVisitor<'a, 'b, 'ast, 'tcx> {
|
||||
_ => report_errors(self, None),
|
||||
};
|
||||
|
||||
if !matches!(source, PathSource::TraitItem(..)) {
|
||||
if record_partial_res == RecordPartialRes::Yes {
|
||||
// Avoid recording definition of `A::B` in `<T as A>::B::C`.
|
||||
self.r.record_partial_res(node_id, partial_res);
|
||||
self.resolve_elided_lifetimes_in_path(node_id, partial_res, path, source, path_span);
|
||||
@ -3740,7 +3749,25 @@ impl<'a: 'ast, 'b, 'ast, 'tcx> LateResolutionVisitor<'a, 'b, 'ast, 'tcx> {
|
||||
)));
|
||||
}
|
||||
|
||||
// Make sure `A::B` in `<T as A::B>::C` is a trait item.
|
||||
let num_privacy_errors = self.r.privacy_errors.len();
|
||||
// Make sure that `A` in `<T as A>::B::C` is a trait.
|
||||
let trait_res = self.smart_resolve_path_fragment(
|
||||
&None,
|
||||
&path[..qself.position],
|
||||
PathSource::Trait(AliasPossibility::No),
|
||||
Finalize::new(finalize.node_id, qself.path_span),
|
||||
RecordPartialRes::No,
|
||||
);
|
||||
|
||||
if trait_res.expect_full_res() == Res::Err {
|
||||
return Ok(Some(trait_res));
|
||||
}
|
||||
|
||||
// Truncate additional privacy errors reported above,
|
||||
// because they'll be recomputed below.
|
||||
self.r.privacy_errors.truncate(num_privacy_errors);
|
||||
|
||||
// Make sure `A::B` in `<T as A>::B::C` is a trait item.
|
||||
//
|
||||
// Currently, `path` names the full item (`A::B::C`, in
|
||||
// our example). so we extract the prefix of that that is
|
||||
@ -3753,6 +3780,7 @@ impl<'a: 'ast, 'b, 'ast, 'tcx> LateResolutionVisitor<'a, 'b, 'ast, 'tcx> {
|
||||
&path[..=qself.position],
|
||||
PathSource::TraitItem(ns),
|
||||
Finalize::with_root_span(finalize.node_id, finalize.path_span, qself.path_span),
|
||||
RecordPartialRes::No,
|
||||
);
|
||||
|
||||
// The remaining segments (the `C` in our example) will
|
||||
|
@ -9,6 +9,6 @@ type A2 = dyn<dyn, dyn>;
|
||||
type A3 = dyn<<dyn as dyn>::dyn>;
|
||||
//~^ ERROR cannot find type `dyn` in this scope
|
||||
//~| ERROR cannot find type `dyn` in this scope
|
||||
//~| ERROR use of undeclared crate or module `dyn`
|
||||
//~| ERROR cannot find trait `dyn` in this scope
|
||||
|
||||
fn main() {}
|
||||
|
@ -4,12 +4,6 @@ error[E0433]: failed to resolve: use of undeclared crate or module `dyn`
|
||||
LL | type A1 = dyn::dyn;
|
||||
| ^^^ use of undeclared crate or module `dyn`
|
||||
|
||||
error[E0433]: failed to resolve: use of undeclared crate or module `dyn`
|
||||
--> $DIR/dyn-trait-compatibility.rs:9:23
|
||||
|
|
||||
LL | type A3 = dyn<<dyn as dyn>::dyn>;
|
||||
| ^^^ use of undeclared crate or module `dyn`
|
||||
|
||||
error[E0412]: cannot find type `dyn` in this scope
|
||||
--> $DIR/dyn-trait-compatibility.rs:1:11
|
||||
|
|
||||
@ -40,6 +34,12 @@ error[E0412]: cannot find type `dyn` in this scope
|
||||
LL | type A3 = dyn<<dyn as dyn>::dyn>;
|
||||
| ^^^ not found in this scope
|
||||
|
||||
error[E0405]: cannot find trait `dyn` in this scope
|
||||
--> $DIR/dyn-trait-compatibility.rs:9:23
|
||||
|
|
||||
LL | type A3 = dyn<<dyn as dyn>::dyn>;
|
||||
| ^^^ not found in this scope
|
||||
|
||||
error[E0412]: cannot find type `dyn` in this scope
|
||||
--> $DIR/dyn-trait-compatibility.rs:9:16
|
||||
|
|
||||
@ -48,5 +48,5 @@ LL | type A3 = dyn<<dyn as dyn>::dyn>;
|
||||
|
||||
error: aborting due to 8 previous errors
|
||||
|
||||
Some errors have detailed explanations: E0412, E0433.
|
||||
For more information about an error, try `rustc --explain E0412`.
|
||||
Some errors have detailed explanations: E0405, E0412, E0433.
|
||||
For more information about an error, try `rustc --explain E0405`.
|
||||
|
@ -18,9 +18,11 @@ mod foo {
|
||||
fn main() {
|
||||
let _: <foo::Baz as crate::foo::Foo>::Bar = ();
|
||||
//~^ ERROR absolute paths must start with
|
||||
//~| this is accepted in the current edition
|
||||
//~| WARN this is accepted in the current edition
|
||||
//~| ERROR absolute paths must start with
|
||||
//~| WARN this is accepted in the current edition
|
||||
|
||||
let _: <crate::foo::Baz as foo::Foo>::Bar = ();
|
||||
//~^ ERROR absolute paths must start with
|
||||
//~| this is accepted in the current edition
|
||||
//~| WARN this is accepted in the current edition
|
||||
}
|
||||
|
@ -18,9 +18,11 @@ mod foo {
|
||||
fn main() {
|
||||
let _: <foo::Baz as ::foo::Foo>::Bar = ();
|
||||
//~^ ERROR absolute paths must start with
|
||||
//~| this is accepted in the current edition
|
||||
//~| WARN this is accepted in the current edition
|
||||
//~| ERROR absolute paths must start with
|
||||
//~| WARN this is accepted in the current edition
|
||||
|
||||
let _: <::foo::Baz as foo::Foo>::Bar = ();
|
||||
//~^ ERROR absolute paths must start with
|
||||
//~| this is accepted in the current edition
|
||||
//~| WARN this is accepted in the current edition
|
||||
}
|
||||
|
@ -13,7 +13,16 @@ LL | #![deny(absolute_paths_not_starting_with_crate)]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: absolute paths must start with `self`, `super`, `crate`, or an external crate name in the 2018 edition
|
||||
--> $DIR/edition-lint-fully-qualified-paths.rs:23:13
|
||||
--> $DIR/edition-lint-fully-qualified-paths.rs:19:25
|
||||
|
|
||||
LL | let _: <foo::Baz as ::foo::Foo>::Bar = ();
|
||||
| ^^^^^^^^^^ help: use `crate`: `crate::foo::Foo`
|
||||
|
|
||||
= warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2018!
|
||||
= note: for more information, see issue #53130 <https://github.com/rust-lang/rust/issues/53130>
|
||||
|
||||
error: absolute paths must start with `self`, `super`, `crate`, or an external crate name in the 2018 edition
|
||||
--> $DIR/edition-lint-fully-qualified-paths.rs:25:13
|
||||
|
|
||||
LL | let _: <::foo::Baz as foo::Foo>::Bar = ();
|
||||
| ^^^^^^^^^^ help: use `crate`: `crate::foo::Baz`
|
||||
@ -21,5 +30,5 @@ LL | let _: <::foo::Baz as foo::Foo>::Bar = ();
|
||||
= warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2018!
|
||||
= note: for more information, see issue #53130 <https://github.com/rust-lang/rust/issues/53130>
|
||||
|
||||
error: aborting due to 2 previous errors
|
||||
error: aborting due to 3 previous errors
|
||||
|
||||
|
@ -18,6 +18,6 @@ fn qux<'a, T: Bar>(_: &'a T) where <&'a T as Bar>::Baz: String { //~ ERROR expec
|
||||
|
||||
fn issue_95327() where <u8 as Unresolved>::Assoc: String {}
|
||||
//~^ ERROR expected trait, found struct
|
||||
//~| ERROR use of undeclared type `Unresolved`
|
||||
//~| ERROR cannot find trait `Unresolved` in this scope
|
||||
|
||||
fn main() {}
|
||||
|
@ -1,9 +1,3 @@
|
||||
error[E0433]: failed to resolve: use of undeclared type `Unresolved`
|
||||
--> $DIR/assoc_type_bound_with_struct.rs:19:31
|
||||
|
|
||||
LL | fn issue_95327() where <u8 as Unresolved>::Assoc: String {}
|
||||
| ^^^^^^^^^^ use of undeclared type `Unresolved`
|
||||
|
||||
error[E0404]: expected trait, found struct `String`
|
||||
--> $DIR/assoc_type_bound_with_struct.rs:5:46
|
||||
|
|
||||
@ -76,6 +70,12 @@ help: a trait with a similar name exists
|
||||
LL | fn qux<'a, T: Bar>(_: &'a T) where <&'a T as Bar>::Baz: ToString {
|
||||
| ~~~~~~~~
|
||||
|
||||
error[E0405]: cannot find trait `Unresolved` in this scope
|
||||
--> $DIR/assoc_type_bound_with_struct.rs:19:31
|
||||
|
|
||||
LL | fn issue_95327() where <u8 as Unresolved>::Assoc: String {}
|
||||
| ^^^^^^^^^^ not found in this scope
|
||||
|
||||
error[E0404]: expected trait, found struct `String`
|
||||
--> $DIR/assoc_type_bound_with_struct.rs:19:51
|
||||
|
|
||||
@ -87,5 +87,5 @@ LL | fn issue_95327() where <u8 as Unresolved>::Assoc: String {}
|
||||
|
||||
error: aborting due to 6 previous errors
|
||||
|
||||
Some errors have detailed explanations: E0404, E0433.
|
||||
Some errors have detailed explanations: E0404, E0405.
|
||||
For more information about an error, try `rustc --explain E0404`.
|
||||
|
@ -17,37 +17,37 @@ type A = u32;
|
||||
|
||||
fn main() {
|
||||
let _: <u8 as Tr>::N; //~ ERROR cannot find associated type `N` in trait `Tr`
|
||||
let _: <u8 as E>::N; //~ ERROR cannot find associated type `N` in enum `E`
|
||||
let _: <u8 as A>::N; //~ ERROR cannot find associated type `N` in `A`
|
||||
let _: <u8 as E>::N; //~ ERROR expected trait, found enum `E`
|
||||
let _: <u8 as A>::N; //~ ERROR expected trait, found type alias `A`
|
||||
<u8 as Tr>::N; //~ ERROR cannot find method or associated constant `N` in trait `Tr`
|
||||
<u8 as E>::N; //~ ERROR cannot find method or associated constant `N` in enum `E`
|
||||
<u8 as A>::N; //~ ERROR cannot find method or associated constant `N` in `A`
|
||||
<u8 as E>::N; //~ ERROR expected trait, found enum `E`
|
||||
<u8 as A>::N; //~ ERROR expected trait, found type alias `A`
|
||||
let _: <u8 as Tr>::Y; // OK
|
||||
let _: <u8 as E>::Y; //~ ERROR expected associated type, found variant `E::Y`
|
||||
let _: <u8 as E>::Y; //~ ERROR expected trait, found enum `E`
|
||||
<u8 as Tr>::Y; // OK
|
||||
<u8 as E>::Y; //~ ERROR expected method or associated constant, found unit variant `E::Y`
|
||||
<u8 as E>::Y; //~ ERROR expected trait, found enum `E`
|
||||
|
||||
let _: <u8 as Tr>::N::NN; //~ ERROR cannot find associated type `N` in trait `Tr`
|
||||
let _: <u8 as E>::N::NN; //~ ERROR cannot find associated type `N` in enum `E`
|
||||
let _: <u8 as A>::N::NN; //~ ERROR cannot find associated type `N` in `A`
|
||||
let _: <u8 as E>::N::NN; //~ ERROR expected trait, found enum `E`
|
||||
let _: <u8 as A>::N::NN; //~ ERROR expected trait, found type alias `A`
|
||||
<u8 as Tr>::N::NN; //~ ERROR cannot find associated type `N` in trait `Tr`
|
||||
<u8 as E>::N::NN; //~ ERROR cannot find associated type `N` in enum `E`
|
||||
<u8 as A>::N::NN; //~ ERROR cannot find associated type `N` in `A`
|
||||
<u8 as E>::N::NN; //~ ERROR expected trait, found enum `E`
|
||||
<u8 as A>::N::NN; //~ ERROR expected trait, found type alias `A`
|
||||
let _: <u8 as Tr>::Y::NN; //~ ERROR ambiguous associated type
|
||||
let _: <u8 as E>::Y::NN; //~ ERROR expected associated type, found variant `E::Y`
|
||||
let _: <u8 as E>::Y::NN; //~ ERROR expected trait, found enum `E`
|
||||
<u8 as Tr>::Y::NN; //~ ERROR no associated item named `NN` found for type `u16`
|
||||
<u8 as E>::Y::NN; //~ ERROR expected associated type, found variant `E::Y`
|
||||
<u8 as E>::Y::NN; //~ ERROR expected trait, found enum `E`
|
||||
|
||||
let _: <u8 as Tr::N>::NN; //~ ERROR cannot find associated type `NN` in `Tr::N`
|
||||
let _: <u8 as E::N>::NN; //~ ERROR cannot find associated type `NN` in `E::N`
|
||||
let _: <u8 as A::N>::NN; //~ ERROR cannot find associated type `NN` in `A::N`
|
||||
<u8 as Tr::N>::NN; //~ ERROR cannot find method or associated constant `NN` in `Tr::N`
|
||||
<u8 as E::N>::NN; //~ ERROR cannot find method or associated constant `NN` in `E::N`
|
||||
<u8 as A::N>::NN; //~ ERROR cannot find method or associated constant `NN` in `A::N`
|
||||
let _: <u8 as Tr::Y>::NN; //~ ERROR cannot find associated type `NN` in `Tr::Y`
|
||||
let _: <u8 as E::Y>::NN; //~ ERROR failed to resolve: `Y` is a variant, not a module
|
||||
<u8 as Tr::Y>::NN; //~ ERROR cannot find method or associated constant `NN` in `Tr::Y`
|
||||
<u8 as E::Y>::NN; //~ ERROR failed to resolve: `Y` is a variant, not a module
|
||||
let _: <u8 as Tr::N>::NN; //~ ERROR cannot find trait `N` in trait `Tr`
|
||||
let _: <u8 as E::N>::NN; //~ ERROR cannot find trait `N` in enum `E`
|
||||
let _: <u8 as A::N>::NN; //~ ERROR cannot find trait `N` in `A`
|
||||
<u8 as Tr::N>::NN; //~ ERROR cannot find trait `N` in trait `Tr`
|
||||
<u8 as E::N>::NN; //~ ERROR cannot find trait `N` in enum `E`
|
||||
<u8 as A::N>::NN; //~ ERROR cannot find trait `N` in `A`
|
||||
let _: <u8 as Tr::Y>::NN; //~ ERROR expected trait, found associated type `Tr::Y
|
||||
let _: <u8 as E::Y>::NN; //~ ERROR expected trait, found variant `E::Y`
|
||||
<u8 as Tr::Y>::NN; //~ ERROR expected trait, found associated type `Tr::Y`
|
||||
<u8 as E::Y>::NN; //~ ERROR expected trait, found variant `E::Y`
|
||||
|
||||
let _: <u8 as Dr>::Z; //~ ERROR expected associated type, found associated function `Dr::Z`
|
||||
<u8 as Dr>::X; //~ ERROR expected method or associated constant, found associated type `Dr::X`
|
||||
|
@ -1,15 +1,3 @@
|
||||
error[E0433]: failed to resolve: `Y` is a variant, not a module
|
||||
--> $DIR/ufcs-partially-resolved.rs:48:22
|
||||
|
|
||||
LL | let _: <u8 as E::Y>::NN;
|
||||
| ^ `Y` is a variant, not a module
|
||||
|
||||
error[E0433]: failed to resolve: `Y` is a variant, not a module
|
||||
--> $DIR/ufcs-partially-resolved.rs:50:15
|
||||
|
|
||||
LL | <u8 as E::Y>::NN;
|
||||
| ^ `Y` is a variant, not a module
|
||||
|
||||
error[E0576]: cannot find associated type `N` in trait `Tr`
|
||||
--> $DIR/ufcs-partially-resolved.rs:19:24
|
||||
|
|
||||
@ -19,17 +7,25 @@ LL | type Y = u16;
|
||||
LL | let _: <u8 as Tr>::N;
|
||||
| ^ help: an associated type with a similar name exists: `Y`
|
||||
|
||||
error[E0576]: cannot find associated type `N` in enum `E`
|
||||
--> $DIR/ufcs-partially-resolved.rs:20:23
|
||||
error[E0404]: expected trait, found enum `E`
|
||||
--> $DIR/ufcs-partially-resolved.rs:20:19
|
||||
|
|
||||
LL | let _: <u8 as E>::N;
|
||||
| ^ not found in `E`
|
||||
| ^ help: a trait with a similar name exists: `Eq`
|
||||
--> $SRC_DIR/core/src/cmp.rs:LL:COL
|
||||
|
|
||||
= note: similarly named trait `Eq` defined here
|
||||
|
||||
error[E0576]: cannot find associated type `N` in `A`
|
||||
--> $DIR/ufcs-partially-resolved.rs:21:23
|
||||
error[E0404]: expected trait, found type alias `A`
|
||||
--> $DIR/ufcs-partially-resolved.rs:21:19
|
||||
|
|
||||
LL | let _: <u8 as A>::N;
|
||||
| ^ not found in `A`
|
||||
| ^ type aliases cannot be used as traits
|
||||
|
|
||||
help: you might have meant to use `#![feature(trait_alias)]` instead of a `type` alias
|
||||
|
|
||||
LL | trait A = u32;
|
||||
|
|
||||
|
||||
error[E0576]: cannot find method or associated constant `N` in trait `Tr`
|
||||
--> $DIR/ufcs-partially-resolved.rs:22:17
|
||||
@ -40,29 +36,43 @@ LL | fn Y() {}
|
||||
LL | <u8 as Tr>::N;
|
||||
| ^ help: an associated function with a similar name exists: `Y`
|
||||
|
||||
error[E0576]: cannot find method or associated constant `N` in enum `E`
|
||||
--> $DIR/ufcs-partially-resolved.rs:23:16
|
||||
error[E0404]: expected trait, found enum `E`
|
||||
--> $DIR/ufcs-partially-resolved.rs:23:12
|
||||
|
|
||||
LL | <u8 as E>::N;
|
||||
| ^ not found in `E`
|
||||
| ^ help: a trait with a similar name exists: `Eq`
|
||||
--> $SRC_DIR/core/src/cmp.rs:LL:COL
|
||||
|
|
||||
= note: similarly named trait `Eq` defined here
|
||||
|
||||
error[E0576]: cannot find method or associated constant `N` in `A`
|
||||
--> $DIR/ufcs-partially-resolved.rs:24:16
|
||||
error[E0404]: expected trait, found type alias `A`
|
||||
--> $DIR/ufcs-partially-resolved.rs:24:12
|
||||
|
|
||||
LL | <u8 as A>::N;
|
||||
| ^ not found in `A`
|
||||
| ^ type aliases cannot be used as traits
|
||||
|
|
||||
help: you might have meant to use `#![feature(trait_alias)]` instead of a `type` alias
|
||||
|
|
||||
LL | trait A = u32;
|
||||
|
|
||||
|
||||
error[E0575]: expected associated type, found variant `E::Y`
|
||||
--> $DIR/ufcs-partially-resolved.rs:26:12
|
||||
error[E0404]: expected trait, found enum `E`
|
||||
--> $DIR/ufcs-partially-resolved.rs:26:19
|
||||
|
|
||||
LL | let _: <u8 as E>::Y;
|
||||
| ^^^^^^^^^^^^ not a associated type
|
||||
| ^ help: a trait with a similar name exists: `Eq`
|
||||
--> $SRC_DIR/core/src/cmp.rs:LL:COL
|
||||
|
|
||||
= note: similarly named trait `Eq` defined here
|
||||
|
||||
error[E0575]: expected method or associated constant, found unit variant `E::Y`
|
||||
--> $DIR/ufcs-partially-resolved.rs:28:5
|
||||
error[E0404]: expected trait, found enum `E`
|
||||
--> $DIR/ufcs-partially-resolved.rs:28:12
|
||||
|
|
||||
LL | <u8 as E>::Y;
|
||||
| ^^^^^^^^^^^^ not a method or associated constant
|
||||
| ^ help: a trait with a similar name exists: `Eq`
|
||||
--> $SRC_DIR/core/src/cmp.rs:LL:COL
|
||||
|
|
||||
= note: similarly named trait `Eq` defined here
|
||||
|
||||
error[E0576]: cannot find associated type `N` in trait `Tr`
|
||||
--> $DIR/ufcs-partially-resolved.rs:30:24
|
||||
@ -73,17 +83,25 @@ LL | type Y = u16;
|
||||
LL | let _: <u8 as Tr>::N::NN;
|
||||
| ^ help: an associated type with a similar name exists: `Y`
|
||||
|
||||
error[E0576]: cannot find associated type `N` in enum `E`
|
||||
--> $DIR/ufcs-partially-resolved.rs:31:23
|
||||
error[E0404]: expected trait, found enum `E`
|
||||
--> $DIR/ufcs-partially-resolved.rs:31:19
|
||||
|
|
||||
LL | let _: <u8 as E>::N::NN;
|
||||
| ^ not found in `E`
|
||||
| ^ help: a trait with a similar name exists: `Eq`
|
||||
--> $SRC_DIR/core/src/cmp.rs:LL:COL
|
||||
|
|
||||
= note: similarly named trait `Eq` defined here
|
||||
|
||||
error[E0576]: cannot find associated type `N` in `A`
|
||||
--> $DIR/ufcs-partially-resolved.rs:32:23
|
||||
error[E0404]: expected trait, found type alias `A`
|
||||
--> $DIR/ufcs-partially-resolved.rs:32:19
|
||||
|
|
||||
LL | let _: <u8 as A>::N::NN;
|
||||
| ^ not found in `A`
|
||||
| ^ type aliases cannot be used as traits
|
||||
|
|
||||
help: you might have meant to use `#![feature(trait_alias)]` instead of a `type` alias
|
||||
|
|
||||
LL | trait A = u32;
|
||||
|
|
||||
|
||||
error[E0576]: cannot find associated type `N` in trait `Tr`
|
||||
--> $DIR/ufcs-partially-resolved.rs:33:17
|
||||
@ -94,77 +112,103 @@ LL | type Y = u16;
|
||||
LL | <u8 as Tr>::N::NN;
|
||||
| ^ help: an associated type with a similar name exists: `Y`
|
||||
|
||||
error[E0576]: cannot find associated type `N` in enum `E`
|
||||
--> $DIR/ufcs-partially-resolved.rs:34:16
|
||||
error[E0404]: expected trait, found enum `E`
|
||||
--> $DIR/ufcs-partially-resolved.rs:34:12
|
||||
|
|
||||
LL | <u8 as E>::N::NN;
|
||||
| ^ not found in `E`
|
||||
| ^ help: a trait with a similar name exists: `Eq`
|
||||
--> $SRC_DIR/core/src/cmp.rs:LL:COL
|
||||
|
|
||||
= note: similarly named trait `Eq` defined here
|
||||
|
||||
error[E0576]: cannot find associated type `N` in `A`
|
||||
--> $DIR/ufcs-partially-resolved.rs:35:16
|
||||
error[E0404]: expected trait, found type alias `A`
|
||||
--> $DIR/ufcs-partially-resolved.rs:35:12
|
||||
|
|
||||
LL | <u8 as A>::N::NN;
|
||||
| ^ not found in `A`
|
||||
| ^ type aliases cannot be used as traits
|
||||
|
|
||||
help: you might have meant to use `#![feature(trait_alias)]` instead of a `type` alias
|
||||
|
|
||||
LL | trait A = u32;
|
||||
|
|
||||
|
||||
error[E0575]: expected associated type, found variant `E::Y`
|
||||
--> $DIR/ufcs-partially-resolved.rs:37:12
|
||||
error[E0404]: expected trait, found enum `E`
|
||||
--> $DIR/ufcs-partially-resolved.rs:37:19
|
||||
|
|
||||
LL | let _: <u8 as E>::Y::NN;
|
||||
| ^^^^^^^^^^^^^^^^ not a associated type
|
||||
| ^ help: a trait with a similar name exists: `Eq`
|
||||
--> $SRC_DIR/core/src/cmp.rs:LL:COL
|
||||
|
|
||||
= note: similarly named trait `Eq` defined here
|
||||
|
||||
error[E0575]: expected associated type, found variant `E::Y`
|
||||
--> $DIR/ufcs-partially-resolved.rs:39:5
|
||||
error[E0404]: expected trait, found enum `E`
|
||||
--> $DIR/ufcs-partially-resolved.rs:39:12
|
||||
|
|
||||
LL | <u8 as E>::Y::NN;
|
||||
| ^^^^^^^^^^^^^^^^ not a associated type
|
||||
| ^ help: a trait with a similar name exists: `Eq`
|
||||
--> $SRC_DIR/core/src/cmp.rs:LL:COL
|
||||
|
|
||||
= note: similarly named trait `Eq` defined here
|
||||
|
||||
error[E0576]: cannot find associated type `NN` in `Tr::N`
|
||||
--> $DIR/ufcs-partially-resolved.rs:41:27
|
||||
error[E0405]: cannot find trait `N` in trait `Tr`
|
||||
--> $DIR/ufcs-partially-resolved.rs:41:23
|
||||
|
|
||||
LL | let _: <u8 as Tr::N>::NN;
|
||||
| ^^ not found in `Tr::N`
|
||||
| ^ not found in `Tr`
|
||||
|
||||
error[E0576]: cannot find associated type `NN` in `E::N`
|
||||
--> $DIR/ufcs-partially-resolved.rs:42:26
|
||||
error[E0405]: cannot find trait `N` in enum `E`
|
||||
--> $DIR/ufcs-partially-resolved.rs:42:22
|
||||
|
|
||||
LL | let _: <u8 as E::N>::NN;
|
||||
| ^^ not found in `E::N`
|
||||
| ^ not found in `E`
|
||||
|
||||
error[E0576]: cannot find associated type `NN` in `A::N`
|
||||
--> $DIR/ufcs-partially-resolved.rs:43:26
|
||||
error[E0405]: cannot find trait `N` in `A`
|
||||
--> $DIR/ufcs-partially-resolved.rs:43:22
|
||||
|
|
||||
LL | let _: <u8 as A::N>::NN;
|
||||
| ^^ not found in `A::N`
|
||||
| ^ not found in `A`
|
||||
|
||||
error[E0576]: cannot find method or associated constant `NN` in `Tr::N`
|
||||
--> $DIR/ufcs-partially-resolved.rs:44:20
|
||||
error[E0405]: cannot find trait `N` in trait `Tr`
|
||||
--> $DIR/ufcs-partially-resolved.rs:44:16
|
||||
|
|
||||
LL | <u8 as Tr::N>::NN;
|
||||
| ^^ not found in `Tr::N`
|
||||
| ^ not found in `Tr`
|
||||
|
||||
error[E0576]: cannot find method or associated constant `NN` in `E::N`
|
||||
--> $DIR/ufcs-partially-resolved.rs:45:19
|
||||
error[E0405]: cannot find trait `N` in enum `E`
|
||||
--> $DIR/ufcs-partially-resolved.rs:45:15
|
||||
|
|
||||
LL | <u8 as E::N>::NN;
|
||||
| ^^ not found in `E::N`
|
||||
| ^ not found in `E`
|
||||
|
||||
error[E0576]: cannot find method or associated constant `NN` in `A::N`
|
||||
--> $DIR/ufcs-partially-resolved.rs:46:19
|
||||
error[E0405]: cannot find trait `N` in `A`
|
||||
--> $DIR/ufcs-partially-resolved.rs:46:15
|
||||
|
|
||||
LL | <u8 as A::N>::NN;
|
||||
| ^^ not found in `A::N`
|
||||
| ^ not found in `A`
|
||||
|
||||
error[E0576]: cannot find associated type `NN` in `Tr::Y`
|
||||
--> $DIR/ufcs-partially-resolved.rs:47:27
|
||||
error[E0404]: expected trait, found associated type `Tr::Y`
|
||||
--> $DIR/ufcs-partially-resolved.rs:47:19
|
||||
|
|
||||
LL | let _: <u8 as Tr::Y>::NN;
|
||||
| ^^ not found in `Tr::Y`
|
||||
| ^^^^^ not a trait
|
||||
|
||||
error[E0576]: cannot find method or associated constant `NN` in `Tr::Y`
|
||||
--> $DIR/ufcs-partially-resolved.rs:49:20
|
||||
error[E0404]: expected trait, found variant `E::Y`
|
||||
--> $DIR/ufcs-partially-resolved.rs:48:19
|
||||
|
|
||||
LL | let _: <u8 as E::Y>::NN;
|
||||
| ^^^^ not a trait
|
||||
|
||||
error[E0404]: expected trait, found associated type `Tr::Y`
|
||||
--> $DIR/ufcs-partially-resolved.rs:49:12
|
||||
|
|
||||
LL | <u8 as Tr::Y>::NN;
|
||||
| ^^ not found in `Tr::Y`
|
||||
| ^^^^^ not a trait
|
||||
|
||||
error[E0404]: expected trait, found variant `E::Y`
|
||||
--> $DIR/ufcs-partially-resolved.rs:50:12
|
||||
|
|
||||
LL | <u8 as E::Y>::NN;
|
||||
| ^^^^ not a trait
|
||||
|
||||
error[E0575]: expected associated type, found associated function `Dr::Z`
|
||||
--> $DIR/ufcs-partially-resolved.rs:52:12
|
||||
@ -226,5 +270,5 @@ LL | <u8 as Dr>::X::N;
|
||||
|
||||
error: aborting due to 32 previous errors
|
||||
|
||||
Some errors have detailed explanations: E0223, E0433, E0575, E0576, E0599.
|
||||
Some errors have detailed explanations: E0223, E0404, E0405, E0575, E0576, E0599.
|
||||
For more information about an error, try `rustc --explain E0223`.
|
||||
|
Loading…
Reference in New Issue
Block a user