File tree 7 files changed +202
-2
lines changed
compiler/rustc_middle/src/middle
7 files changed +202
-2
lines changed Original file line number Diff line number Diff line change @@ -178,15 +178,20 @@ impl EffectiveVisibilities {
178
178
// All effective visibilities except `reachable_through_impl_trait` are limited to
179
179
// nominal visibility. For some items nominal visibility doesn't make sense so we
180
180
// don't check this condition for them.
181
- if !matches ! ( tcx. def_kind( def_id) , DefKind :: Impl { .. } ) {
181
+ let is_impl = matches ! ( tcx. def_kind( def_id) , DefKind :: Impl { .. } ) ;
182
+ let is_associated_item_in_trait_impl = tcx
183
+ . impl_of_method ( def_id. to_def_id ( ) )
184
+ . and_then ( |impl_id| tcx. trait_id_of_impl ( impl_id) )
185
+ . is_some ( ) ;
186
+ if !is_impl && !is_associated_item_in_trait_impl {
182
187
let nominal_vis = tcx. visibility ( def_id) ;
183
188
if !nominal_vis. is_at_least ( ev. reachable , tcx) {
184
189
span_bug ! (
185
190
span,
186
191
"{:?}: reachable {:?} > nominal {:?}" ,
187
192
def_id,
188
193
ev. reachable,
189
- nominal_vis
194
+ nominal_vis,
190
195
) ;
191
196
}
192
197
}
Original file line number Diff line number Diff line change
1
+ #![ feature( staged_api) ]
2
+ //~^ ERROR module has missing stability attribute
3
+
4
+ pub trait Trait {
5
+ //~^ ERROR trait has missing stability attribute
6
+ fn fun ( ) { }
7
+ //~^ ERROR associated function has missing stability attribute
8
+ }
9
+
10
+ impl Trait for u8 {
11
+ //~^ ERROR implementation has missing stability attribute
12
+ pub ( self ) fn fun ( ) { }
13
+ //~^ ERROR visibility qualifiers are not permitted here [E0449]
14
+ }
15
+
16
+ fn main ( ) { }
Original file line number Diff line number Diff line change
1
+ error[E0449]: visibility qualifiers are not permitted here
2
+ --> $DIR/issue-113860-1.rs:12:5
3
+ |
4
+ LL | pub(self) fn fun() {}
5
+ | ^^^^^^^^^
6
+ |
7
+ = note: trait items always share the visibility of their trait
8
+
9
+ error: module has missing stability attribute
10
+ --> $DIR/issue-113860-1.rs:1:1
11
+ |
12
+ LL | / #![feature(staged_api)]
13
+ LL | |
14
+ LL | |
15
+ LL | | pub trait Trait {
16
+ ... |
17
+ LL | |
18
+ LL | | fn main() {}
19
+ | |____________^
20
+
21
+ error: trait has missing stability attribute
22
+ --> $DIR/issue-113860-1.rs:4:1
23
+ |
24
+ LL | / pub trait Trait {
25
+ LL | |
26
+ LL | | fn fun() {}
27
+ LL | |
28
+ LL | | }
29
+ | |_^
30
+
31
+ error: implementation has missing stability attribute
32
+ --> $DIR/issue-113860-1.rs:10:1
33
+ |
34
+ LL | / impl Trait for u8 {
35
+ LL | |
36
+ LL | | pub(self) fn fun() {}
37
+ LL | |
38
+ LL | | }
39
+ | |_^
40
+
41
+ error: associated function has missing stability attribute
42
+ --> $DIR/issue-113860-1.rs:6:5
43
+ |
44
+ LL | fn fun() {}
45
+ | ^^^^^^^^^^^
46
+
47
+ error: aborting due to 5 previous errors
48
+
49
+ For more information about this error, try `rustc --explain E0449`.
Original file line number Diff line number Diff line change
1
+ #![ feature( staged_api) ]
2
+ //~^ ERROR module has missing stability attribute
3
+
4
+ pub trait Trait {
5
+ //~^ ERROR trait has missing stability attribute
6
+ type X ;
7
+ //~^ ERROR associated type has missing stability attribute
8
+ }
9
+
10
+ impl Trait for u8 {
11
+ //~^ ERROR implementation has missing stability attribute
12
+ pub ( self ) type X = Self ;
13
+ //~^ ERROR visibility qualifiers are not permitted here [E0449]
14
+ }
15
+
16
+ fn main ( ) { }
Original file line number Diff line number Diff line change
1
+ error[E0449]: visibility qualifiers are not permitted here
2
+ --> $DIR/issue-113860-2.rs:12:5
3
+ |
4
+ LL | pub(self) type X = Self;
5
+ | ^^^^^^^^^
6
+ |
7
+ = note: trait items always share the visibility of their trait
8
+
9
+ error: module has missing stability attribute
10
+ --> $DIR/issue-113860-2.rs:1:1
11
+ |
12
+ LL | / #![feature(staged_api)]
13
+ LL | |
14
+ LL | |
15
+ LL | | pub trait Trait {
16
+ ... |
17
+ LL | |
18
+ LL | | fn main() {}
19
+ | |____________^
20
+
21
+ error: trait has missing stability attribute
22
+ --> $DIR/issue-113860-2.rs:4:1
23
+ |
24
+ LL | / pub trait Trait {
25
+ LL | |
26
+ LL | | type X;
27
+ LL | |
28
+ LL | | }
29
+ | |_^
30
+
31
+ error: implementation has missing stability attribute
32
+ --> $DIR/issue-113860-2.rs:10:1
33
+ |
34
+ LL | / impl Trait for u8 {
35
+ LL | |
36
+ LL | | pub(self) type X = Self;
37
+ LL | |
38
+ LL | | }
39
+ | |_^
40
+
41
+ error: associated type has missing stability attribute
42
+ --> $DIR/issue-113860-2.rs:6:5
43
+ |
44
+ LL | type X;
45
+ | ^^^^^^^
46
+
47
+ error: aborting due to 5 previous errors
48
+
49
+ For more information about this error, try `rustc --explain E0449`.
Original file line number Diff line number Diff line change
1
+ #![ feature( staged_api) ]
2
+ //~^ ERROR module has missing stability attribute
3
+
4
+ pub trait Trait {
5
+ //~^ ERROR trait has missing stability attribute
6
+ const X : u32 ;
7
+ //~^ ERROR associated constant has missing stability attribute
8
+ }
9
+
10
+ impl Trait for u8 {
11
+ //~^ ERROR implementation has missing stability attribute
12
+ pub ( self ) const X : u32 = 3 ;
13
+ //~^ ERROR visibility qualifiers are not permitted here [E0449]
14
+ }
15
+
16
+ fn main ( ) { }
Original file line number Diff line number Diff line change
1
+ error[E0449]: visibility qualifiers are not permitted here
2
+ --> $DIR/issue-113860.rs:12:5
3
+ |
4
+ LL | pub(self) const X: u32 = 3;
5
+ | ^^^^^^^^^
6
+ |
7
+ = note: trait items always share the visibility of their trait
8
+
9
+ error: module has missing stability attribute
10
+ --> $DIR/issue-113860.rs:1:1
11
+ |
12
+ LL | / #![feature(staged_api)]
13
+ LL | |
14
+ LL | |
15
+ LL | | pub trait Trait {
16
+ ... |
17
+ LL | |
18
+ LL | | fn main() {}
19
+ | |____________^
20
+
21
+ error: trait has missing stability attribute
22
+ --> $DIR/issue-113860.rs:4:1
23
+ |
24
+ LL | / pub trait Trait {
25
+ LL | |
26
+ LL | | const X: u32;
27
+ LL | |
28
+ LL | | }
29
+ | |_^
30
+
31
+ error: implementation has missing stability attribute
32
+ --> $DIR/issue-113860.rs:10:1
33
+ |
34
+ LL | / impl Trait for u8 {
35
+ LL | |
36
+ LL | | pub(self) const X: u32 = 3;
37
+ LL | |
38
+ LL | | }
39
+ | |_^
40
+
41
+ error: associated constant has missing stability attribute
42
+ --> $DIR/issue-113860.rs:6:5
43
+ |
44
+ LL | const X: u32;
45
+ | ^^^^^^^^^^^^^
46
+
47
+ error: aborting due to 5 previous errors
48
+
49
+ For more information about this error, try `rustc --explain E0449`.
You can’t perform that action at this time.
0 commit comments