Skip to content

Commit a196a00

Browse files
Rollup merge of #152883 - mu001999-contrib:fix/final-bad-use, r=Kivooeo
Deny final not followed by item Fixes #152820
2 parents a2abf2a + 5978115 commit a196a00

4 files changed

Lines changed: 44 additions & 0 deletions

File tree

compiler/rustc_parse/src/errors.rs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2203,6 +2203,15 @@ pub(crate) struct DefaultNotFollowedByItem {
22032203
pub span: Span,
22042204
}
22052205

2206+
#[derive(Diagnostic)]
2207+
#[diag("`final` is not followed by an item")]
2208+
#[note("only associated functions in traits may be prefixed by `final`")]
2209+
pub(crate) struct FinalNotFollowedByItem {
2210+
#[primary_span]
2211+
#[label("the `final` qualifier")]
2212+
pub span: Span,
2213+
}
2214+
22062215
#[derive(Diagnostic)]
22072216
pub(crate) enum MissingKeywordForItemDefinition {
22082217
#[diag("missing `enum` for enum definition")]

compiler/rustc_parse/src/parser/item.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -197,6 +197,8 @@ impl<'a> Parser<'a> {
197197

198198
if let Defaultness::Default(span) = def {
199199
this.dcx().emit_err(errors::DefaultNotFollowedByItem { span });
200+
} else if let Defaultness::Final(span) = def {
201+
this.dcx().emit_err(errors::FinalNotFollowedByItem { span });
200202
}
201203

202204
if !attrs_allowed {
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
#![feature(final_associated_functions)]
2+
3+
fn main() {
4+
final; //~ ERROR `final` is not followed by an item
5+
final 1 + 1; //~ ERROR `final` is not followed by an item
6+
final { println!("text"); }; //~ ERROR `final` is not followed by an item
7+
}
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
error: `final` is not followed by an item
2+
--> $DIR/bad-positions.rs:4:5
3+
|
4+
LL | final;
5+
| ^^^^^ the `final` qualifier
6+
|
7+
= note: only associated functions in traits may be prefixed by `final`
8+
9+
error: `final` is not followed by an item
10+
--> $DIR/bad-positions.rs:5:5
11+
|
12+
LL | final 1 + 1;
13+
| ^^^^^ the `final` qualifier
14+
|
15+
= note: only associated functions in traits may be prefixed by `final`
16+
17+
error: `final` is not followed by an item
18+
--> $DIR/bad-positions.rs:6:5
19+
|
20+
LL | final { println!("text"); };
21+
| ^^^^^ the `final` qualifier
22+
|
23+
= note: only associated functions in traits may be prefixed by `final`
24+
25+
error: aborting due to 3 previous errors
26+

0 commit comments

Comments
 (0)