Add non-ancestor errors involving restrictions to other crates

This commit is contained in:
CoCo-Japan-pan
2026-04-05 13:18:00 +09:00
parent 2f400deab3
commit 6f9727342f
2 changed files with 30 additions and 19 deletions
@@ -1,6 +1,9 @@
//@ aux-build: external-impl-restriction.rs
#![feature(impl_restriction)]
#![expect(incomplete_features)]
extern crate external_impl_restriction as external;
pub mod a {
pub enum E {}
pub mod d {}
@@ -53,6 +56,8 @@ pub mod h {}
pub impl(super) trait T17 {} //~ ERROR too many leading `super` keywords [E0433]
pub impl(in external) trait T18 {} //~ ERROR trait implementation can only be restricted to ancestor modules
// Check if we can resolve paths referring to modules declared later.
pub impl(in crate::j) trait L4 {} //~ ERROR trait implementation can only be restricted to ancestor modules
@@ -1,71 +1,77 @@
error: trait implementation can only be restricted to ancestor modules
--> $DIR/restriction_resolution_errors.rs:14:21
--> $DIR/restriction_resolution_errors.rs:17:21
|
LL | pub impl(in ::std) trait T2 {}
| ^^^^^
error: trait implementation can only be restricted to ancestor modules
--> $DIR/restriction_resolution_errors.rs:16:21
--> $DIR/restriction_resolution_errors.rs:19:21
|
LL | pub impl(in self::c) trait T3 {}
| ^^^^^^^
error: trait implementation can only be restricted to ancestor modules
--> $DIR/restriction_resolution_errors.rs:18:21
--> $DIR/restriction_resolution_errors.rs:21:21
|
LL | pub impl(in super::d) trait T4 {}
| ^^^^^^^^
error[E0433]: too many leading `super` keywords
--> $DIR/restriction_resolution_errors.rs:24:35
--> $DIR/restriction_resolution_errors.rs:27:35
|
LL | pub impl(in super::super::super) trait T7 {}
| ^^^^^ there are too many leading `super` keywords
error: trait implementation can only be restricted to ancestor modules
--> $DIR/restriction_resolution_errors.rs:34:21
--> $DIR/restriction_resolution_errors.rs:37:21
|
LL | pub impl(in self::f) trait L1 {}
| ^^^^^^^
error: trait implementation can only be restricted to ancestor modules
--> $DIR/restriction_resolution_errors.rs:38:21
--> $DIR/restriction_resolution_errors.rs:41:21
|
LL | pub impl(in super::h) trait L3 {}
| ^^^^^^^^
error: trait implementation can only be restricted to ancestor modules
--> $DIR/restriction_resolution_errors.rs:47:13
--> $DIR/restriction_resolution_errors.rs:50:13
|
LL | pub impl(in crate::a) trait T13 {}
| ^^^^^^^^
error[E0433]: too many leading `super` keywords
--> $DIR/restriction_resolution_errors.rs:54:10
--> $DIR/restriction_resolution_errors.rs:57:10
|
LL | pub impl(super) trait T17 {}
| ^^^^^ there are too many leading `super` keywords
error: trait implementation can only be restricted to ancestor modules
--> $DIR/restriction_resolution_errors.rs:57:13
--> $DIR/restriction_resolution_errors.rs:59:13
|
LL | pub impl(in external) trait T18 {}
| ^^^^^^^^
error: trait implementation can only be restricted to ancestor modules
--> $DIR/restriction_resolution_errors.rs:62:13
|
LL | pub impl(in crate::j) trait L4 {}
| ^^^^^^^^
error: trait implementation can only be restricted to ancestor modules
--> $DIR/restriction_resolution_errors.rs:73:21
--> $DIR/restriction_resolution_errors.rs:78:21
|
LL | pub impl(in crate::m2) trait U2 {}
| ^^^^^^^^^
error: trait implementation can only be restricted to ancestor modules
--> $DIR/restriction_resolution_errors.rs:75:21
--> $DIR/restriction_resolution_errors.rs:80:21
|
LL | pub impl(in m6::m5) trait U4 {}
| ^^^^^^
error[E0433]: cannot find module or crate `a` in this scope
--> $DIR/restriction_resolution_errors.rs:12:21
--> $DIR/restriction_resolution_errors.rs:15:21
|
LL | pub impl(in a::b) trait T1 {}
| ^ use of unresolved module or unlinked crate `a`
@@ -81,25 +87,25 @@ LL + use a;
|
error[E0433]: cannot find module `c` in the crate root
--> $DIR/restriction_resolution_errors.rs:20:28
--> $DIR/restriction_resolution_errors.rs:23:28
|
LL | pub impl(in crate::c) trait T5 {}
| ^ not found in the crate root
error[E0577]: expected module, found enum `super::E`
--> $DIR/restriction_resolution_errors.rs:22:21
--> $DIR/restriction_resolution_errors.rs:25:21
|
LL | pub impl(in super::E) trait T6 {}
| ^^^^^^^^ not a module
error[E0577]: expected module, found enum `super::G`
--> $DIR/restriction_resolution_errors.rs:36:21
--> $DIR/restriction_resolution_errors.rs:39:21
|
LL | pub impl(in super::G) trait L2 {}
| ^^^^^^^^ not a module
error[E0577]: expected module, found enum `crate::a::E`
--> $DIR/restriction_resolution_errors.rs:49:13
--> $DIR/restriction_resolution_errors.rs:52:13
|
LL | pub mod b {
| --------- similarly named module `b` defined here
@@ -114,7 +120,7 @@ LL + pub impl(in crate::a::b) trait T14 {}
|
error[E0577]: expected module, found enum `crate::I`
--> $DIR/restriction_resolution_errors.rs:59:13
--> $DIR/restriction_resolution_errors.rs:64:13
|
LL | pub mod a {
| --------- similarly named module `a` defined here
@@ -129,12 +135,12 @@ LL + pub impl(in crate::a) trait L5 {}
|
error[E0577]: expected module, found enum `m7`
--> $DIR/restriction_resolution_errors.rs:76:21
--> $DIR/restriction_resolution_errors.rs:81:21
|
LL | pub impl(in m7) trait U5 {}
| ^^ not a module
error: aborting due to 18 previous errors
error: aborting due to 19 previous errors
Some errors have detailed explanations: E0433, E0577.
For more information about an error, try `rustc --explain E0433`.