mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-22 06:44:35 +00:00
Store resolution for self and crate root module segments
This commit is contained in:
parent
a1f2999536
commit
19b528b8a0
@ -1478,9 +1478,11 @@ impl<'ra, 'tcx> Resolver<'ra, 'tcx> {
|
||||
if segment_idx == 0 {
|
||||
if name == kw::SelfLower {
|
||||
let mut ctxt = ident.span.ctxt().normalize_to_macros_2_0();
|
||||
module = Some(ModuleOrUniformRoot::Module(
|
||||
self.resolve_self(&mut ctxt, parent_scope.module),
|
||||
));
|
||||
let self_mod = self.resolve_self(&mut ctxt, parent_scope.module);
|
||||
if let Some(res) = self_mod.res() {
|
||||
record_segment_res(self, res);
|
||||
}
|
||||
module = Some(ModuleOrUniformRoot::Module(self_mod));
|
||||
continue;
|
||||
}
|
||||
if name == kw::PathRoot && ident.span.at_least_rust_2018() {
|
||||
@ -1497,7 +1499,11 @@ impl<'ra, 'tcx> Resolver<'ra, 'tcx> {
|
||||
}
|
||||
if name == kw::PathRoot || name == kw::Crate || name == kw::DollarCrate {
|
||||
// `::a::b`, `crate::a::b` or `$crate::a::b`
|
||||
module = Some(ModuleOrUniformRoot::Module(self.resolve_crate_root(ident)));
|
||||
let crate_root = self.resolve_crate_root(ident);
|
||||
if let Some(res) = crate_root.res() {
|
||||
record_segment_res(self, res);
|
||||
}
|
||||
module = Some(ModuleOrUniformRoot::Module(crate_root));
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
18
tests/ui/generics/generics-on-self-mod-segment.rs
Normal file
18
tests/ui/generics/generics-on-self-mod-segment.rs
Normal file
@ -0,0 +1,18 @@
|
||||
struct Ty;
|
||||
|
||||
fn self_(_: self::<i32>::Ty) {}
|
||||
//~^ ERROR type arguments are not allowed on module `generics_on_self_mod_segment`
|
||||
|
||||
fn crate_(_: crate::<i32>::Ty) {}
|
||||
//~^ ERROR type arguments are not allowed on module `generics_on_self_mod_segment`
|
||||
|
||||
macro_rules! dollar_crate {
|
||||
() => {
|
||||
fn dollar_crate_(_: $crate::<i32>::Ty) {}
|
||||
//~^ ERROR type arguments are not allowed on module `generics_on_self_mod_segment`
|
||||
}
|
||||
}
|
||||
|
||||
dollar_crate!();
|
||||
|
||||
fn main() {}
|
32
tests/ui/generics/generics-on-self-mod-segment.stderr
Normal file
32
tests/ui/generics/generics-on-self-mod-segment.stderr
Normal file
@ -0,0 +1,32 @@
|
||||
error[E0109]: type arguments are not allowed on module `generics_on_self_mod_segment`
|
||||
--> $DIR/generics-on-self-mod-segment.rs:3:20
|
||||
|
|
||||
LL | fn self_(_: self::<i32>::Ty) {}
|
||||
| ---- ^^^ type argument not allowed
|
||||
| |
|
||||
| not allowed on module `generics_on_self_mod_segment`
|
||||
|
||||
error[E0109]: type arguments are not allowed on module `generics_on_self_mod_segment`
|
||||
--> $DIR/generics-on-self-mod-segment.rs:6:22
|
||||
|
|
||||
LL | fn crate_(_: crate::<i32>::Ty) {}
|
||||
| ----- ^^^ type argument not allowed
|
||||
| |
|
||||
| not allowed on module `generics_on_self_mod_segment`
|
||||
|
||||
error[E0109]: type arguments are not allowed on module `generics_on_self_mod_segment`
|
||||
--> $DIR/generics-on-self-mod-segment.rs:11:38
|
||||
|
|
||||
LL | fn dollar_crate_(_: $crate::<i32>::Ty) {}
|
||||
| ------ ^^^ type argument not allowed
|
||||
| |
|
||||
| not allowed on module `generics_on_self_mod_segment`
|
||||
...
|
||||
LL | dollar_crate!();
|
||||
| --------------- in this macro invocation
|
||||
|
|
||||
= note: this error originates in the macro `dollar_crate` (in Nightly builds, run with -Z macro-backtrace for more info)
|
||||
|
||||
error: aborting due to 3 previous errors
|
||||
|
||||
For more information about this error, try `rustc --explain E0109`.
|
@ -1,7 +1,7 @@
|
||||
trait Trait {}
|
||||
|
||||
fn test<T: ?self::<i32>::Trait>() {}
|
||||
//~^ ERROR type arguments are not allowed on this type
|
||||
//~^ ERROR type arguments are not allowed on module `maybe_bound_has_path_args`
|
||||
//~| WARN relaxing a default bound only does something for `?Sized`
|
||||
|
||||
fn main() {}
|
||||
|
@ -4,13 +4,13 @@ warning: relaxing a default bound only does something for `?Sized`; all other tr
|
||||
LL | fn test<T: ?self::<i32>::Trait>() {}
|
||||
| ^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error[E0109]: type arguments are not allowed on this type
|
||||
error[E0109]: type arguments are not allowed on module `maybe_bound_has_path_args`
|
||||
--> $DIR/maybe-bound-has-path-args.rs:3:20
|
||||
|
|
||||
LL | fn test<T: ?self::<i32>::Trait>() {}
|
||||
| ---- ^^^ type argument not allowed
|
||||
| |
|
||||
| not allowed on this type
|
||||
| not allowed on module `maybe_bound_has_path_args`
|
||||
|
||||
error: aborting due to 1 previous error; 1 warning emitted
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user