1
Fork 0

Resolve visibility paths as modules not as types.

This commit is contained in:
Camille GILLOT 2023-03-19 10:46:19 +00:00
parent 7a5d2d0138
commit 2faa2626cc
6 changed files with 27 additions and 7 deletions

View file

@ -278,7 +278,7 @@ impl<'a, 'b, 'tcx> BuildReducedGraphVisitor<'a, 'b, 'tcx> {
}; };
match self.r.resolve_path( match self.r.resolve_path(
&segments, &segments,
Some(TypeNS), None,
parent_scope, parent_scope,
finalize.then(|| Finalize::new(id, path.span)), finalize.then(|| Finalize::new(id, path.span)),
None, None,

View file

@ -0,0 +1,11 @@
// Check that we do not ICE due to unresolved segments in visibility path.
#![crate_type = "lib"]
extern crate alloc as b;
mod foo {
mod bar {
pub(in b::string::String::newy) extern crate alloc as e;
//~^ ERROR failed to resolve: `String` is a struct, not a module [E0433]
}
}

View file

@ -0,0 +1,9 @@
error[E0433]: failed to resolve: `String` is a struct, not a module
--> $DIR/unresolved-segments-visibility.rs:8:27
|
LL | pub(in b::string::String::newy) extern crate alloc as e;
| ^^^^^^ `String` is a struct, not a module
error: aborting due to previous error
For more information about this error, try `rustc --explain E0433`.

View file

@ -4,7 +4,7 @@ macro_rules! m {
struct S<T>(T); struct S<T>(T);
m!{ S<u8> } //~ ERROR unexpected generic arguments in path m!{ S<u8> } //~ ERROR unexpected generic arguments in path
//~| ERROR expected module, found struct `S` //~| ERROR failed to resolve: `S` is a struct, not a module [E0433]
mod m { mod m {
m!{ m<> } //~ ERROR unexpected generic arguments in path m!{ m<> } //~ ERROR unexpected generic arguments in path

View file

@ -4,11 +4,11 @@ error: unexpected generic arguments in path
LL | m!{ S<u8> } LL | m!{ S<u8> }
| ^^^^ | ^^^^
error[E0577]: expected module, found struct `S` error[E0433]: failed to resolve: `S` is a struct, not a module
--> $DIR/visibility-ty-params.rs:6:5 --> $DIR/visibility-ty-params.rs:6:5
| |
LL | m!{ S<u8> } LL | m!{ S<u8> }
| ^^^^^ not a module | ^ `S` is a struct, not a module
error: unexpected generic arguments in path error: unexpected generic arguments in path
--> $DIR/visibility-ty-params.rs:10:10 --> $DIR/visibility-ty-params.rs:10:10
@ -18,4 +18,4 @@ LL | m!{ m<> }
error: aborting due to 3 previous errors error: aborting due to 3 previous errors
For more information about this error, try `rustc --explain E0577`. For more information about this error, try `rustc --explain E0433`.

View file

@ -1,8 +1,8 @@
error[E0433]: failed to resolve: `Self` is only available in impls, traits, and type definitions error[E0433]: failed to resolve: `Self` cannot be used in imports
--> $DIR/use-self-type.rs:7:16 --> $DIR/use-self-type.rs:7:16
| |
LL | pub(in Self::f) struct Z; LL | pub(in Self::f) struct Z;
| ^^^^ `Self` is only available in impls, traits, and type definitions | ^^^^ `Self` cannot be used in imports
error[E0432]: unresolved import `Self` error[E0432]: unresolved import `Self`
--> $DIR/use-self-type.rs:6:13 --> $DIR/use-self-type.rs:6:13