1
Fork 0

Reject defaultness on free consts

This commit is contained in:
León Orell Valerian Liehr 2023-11-11 15:30:25 +01:00
parent 9ab0749ce3
commit df3b981a3a
No known key found for this signature in database
GPG key ID: D17A07215F68E713
3 changed files with 43 additions and 13 deletions

View file

@ -1008,12 +1008,14 @@ impl<'a> Visitor<'a> for AstValidator<'a> {
_ => {} _ => {}
} }
} }
ItemKind::Const(box ConstItem { defaultness, expr: None, .. }) => { ItemKind::Const(box ConstItem { defaultness, expr, .. }) => {
self.check_defaultness(item.span, *defaultness); self.check_defaultness(item.span, *defaultness);
self.session.emit_err(errors::ConstWithoutBody { if expr.is_none() {
span: item.span, self.session.emit_err(errors::ConstWithoutBody {
replace_span: self.ending_semi_or_hi(item.span), span: item.span,
}); replace_span: self.ending_semi_or_hi(item.span),
});
}
} }
ItemKind::Static(box StaticItem { expr: None, .. }) => { ItemKind::Static(box StaticItem { expr: None, .. }) => {
self.session.emit_err(errors::StaticWithoutBody { self.session.emit_err(errors::StaticWithoutBody {

View file

@ -10,3 +10,7 @@ trait X {
default fn f1(); //~ ERROR `default` is only allowed on items in trait impls default fn f1(); //~ ERROR `default` is only allowed on items in trait impls
default fn f2() {} //~ ERROR `default` is only allowed on items in trait impls default fn f2() {} //~ ERROR `default` is only allowed on items in trait impls
} }
default const E: u8 = 0; //~ ERROR `default` is only allowed on items in trait impls
default type F = (); //~ ERROR `default` is only allowed on items in trait impls
default fn h() {} //~ ERROR `default` is only allowed on items in trait impls

View file

@ -1,5 +1,5 @@
error: `default` is only allowed on items in trait impls error: `default` is only allowed on items in trait impls
--> $DIR/trait-item-with-defaultness-fail-semantic.rs:6:5 --> $DIR/defaultness-invalid-places-fail-semantic.rs:6:5
| |
LL | default const A: u8; LL | default const A: u8;
| -------^^^^^^^^^^^^^ | -------^^^^^^^^^^^^^
@ -7,7 +7,7 @@ LL | default const A: u8;
| `default` because of this | `default` because of this
error: `default` is only allowed on items in trait impls error: `default` is only allowed on items in trait impls
--> $DIR/trait-item-with-defaultness-fail-semantic.rs:7:5 --> $DIR/defaultness-invalid-places-fail-semantic.rs:7:5
| |
LL | default const B: u8 = 0; LL | default const B: u8 = 0;
| -------^^^^^^^^^^^^^^^^^ | -------^^^^^^^^^^^^^^^^^
@ -15,7 +15,7 @@ LL | default const B: u8 = 0;
| `default` because of this | `default` because of this
error: `default` is only allowed on items in trait impls error: `default` is only allowed on items in trait impls
--> $DIR/trait-item-with-defaultness-fail-semantic.rs:8:5 --> $DIR/defaultness-invalid-places-fail-semantic.rs:8:5
| |
LL | default type D; LL | default type D;
| -------^^^^^^^^ | -------^^^^^^^^
@ -23,7 +23,7 @@ LL | default type D;
| `default` because of this | `default` because of this
error: `default` is only allowed on items in trait impls error: `default` is only allowed on items in trait impls
--> $DIR/trait-item-with-defaultness-fail-semantic.rs:9:5 --> $DIR/defaultness-invalid-places-fail-semantic.rs:9:5
| |
LL | default type C: Ord; LL | default type C: Ord;
| -------^^^^^^^^^^^^^ | -------^^^^^^^^^^^^^
@ -31,7 +31,7 @@ LL | default type C: Ord;
| `default` because of this | `default` because of this
error: `default` is only allowed on items in trait impls error: `default` is only allowed on items in trait impls
--> $DIR/trait-item-with-defaultness-fail-semantic.rs:10:5 --> $DIR/defaultness-invalid-places-fail-semantic.rs:10:5
| |
LL | default fn f1(); LL | default fn f1();
| -------^^^^^^^^^ | -------^^^^^^^^^
@ -39,15 +39,39 @@ LL | default fn f1();
| `default` because of this | `default` because of this
error: `default` is only allowed on items in trait impls error: `default` is only allowed on items in trait impls
--> $DIR/trait-item-with-defaultness-fail-semantic.rs:11:5 --> $DIR/defaultness-invalid-places-fail-semantic.rs:11:5
| |
LL | default fn f2() {} LL | default fn f2() {}
| -------^^^^^^^^ | -------^^^^^^^^
| | | |
| `default` because of this | `default` because of this
error: `default` is only allowed on items in trait impls
--> $DIR/defaultness-invalid-places-fail-semantic.rs:14:1
|
LL | default const E: u8 = 0;
| -------^^^^^^^^^^^^^^^^^
| |
| `default` because of this
error: `default` is only allowed on items in trait impls
--> $DIR/defaultness-invalid-places-fail-semantic.rs:15:1
|
LL | default type F = ();
| -------^^^^^^^^^^^^^
| |
| `default` because of this
error: `default` is only allowed on items in trait impls
--> $DIR/defaultness-invalid-places-fail-semantic.rs:16:1
|
LL | default fn h() {}
| -------^^^^^^^
| |
| `default` because of this
warning: the feature `specialization` is incomplete and may not be safe to use and/or cause compiler crashes warning: the feature `specialization` is incomplete and may not be safe to use and/or cause compiler crashes
--> $DIR/trait-item-with-defaultness-fail-semantic.rs:1:12 --> $DIR/defaultness-invalid-places-fail-semantic.rs:1:12
| |
LL | #![feature(specialization)] LL | #![feature(specialization)]
| ^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^
@ -56,5 +80,5 @@ LL | #![feature(specialization)]
= help: consider using `min_specialization` instead, which is more stable and complete = help: consider using `min_specialization` instead, which is more stable and complete
= note: `#[warn(incomplete_features)]` on by default = note: `#[warn(incomplete_features)]` on by default
error: aborting due to 6 previous errors; 1 warning emitted error: aborting due to 9 previous errors; 1 warning emitted