wherein the status of empty and reason-only lint attributes is clarified
We avoid an ICE by checking for an empty meta-item list before we index into the meta-items, and leave commentary about where we'd like to issue unused-attributes lints in the future. Note that empty lint attributes are already accepted by the stable compiler; generalizing this to weird reason-only lint attributes seems like the conservative/consilient generalization.
This commit is contained in:
parent
f90de1110d
commit
f66ea66acd
2 changed files with 25 additions and 1 deletions
|
@ -216,9 +216,14 @@ impl<'a> LintLevelsBuilder<'a> {
|
|||
} else {
|
||||
let mut err = bad_attr(meta.span);
|
||||
err.emit();
|
||||
continue
|
||||
continue;
|
||||
};
|
||||
|
||||
if metas.is_empty() {
|
||||
// FIXME (#55112): issue unused-attributes lint for `#[level()]`
|
||||
continue;
|
||||
}
|
||||
|
||||
// Before processing the lint names, look for a reason (RFC 2383)
|
||||
// at the end.
|
||||
let mut reason = None;
|
||||
|
@ -231,6 +236,8 @@ impl<'a> LintLevelsBuilder<'a> {
|
|||
if item.ident == "reason" {
|
||||
// found reason, reslice meta list to exclude it
|
||||
metas = &metas[0..metas.len()-1];
|
||||
// FIXME (#55112): issue unused-attributes lint if we thereby
|
||||
// don't have any lint names (`#[level(reason = "foo")]`)
|
||||
if let ast::LitKind::Str(rationale, _) = name_value.node {
|
||||
if gate_reasons {
|
||||
feature_gate::emit_feature_err(
|
||||
|
|
17
src/test/ui/lint/empty-lint-attributes.rs
Normal file
17
src/test/ui/lint/empty-lint-attributes.rs
Normal file
|
@ -0,0 +1,17 @@
|
|||
#![feature(lint_reasons)]
|
||||
|
||||
// run-pass
|
||||
|
||||
// Empty (and reason-only) lint attributes are legal—although we may want to
|
||||
// lint them in the future (Issue #55112).
|
||||
|
||||
#![allow()]
|
||||
#![warn(reason = "observationalism")]
|
||||
|
||||
#[forbid()]
|
||||
fn devoir() {}
|
||||
|
||||
#[deny(reason = "ultion")]
|
||||
fn waldgrave() {}
|
||||
|
||||
fn main() {}
|
Loading…
Add table
Add a link
Reference in a new issue