1
Fork 0

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:
Zack M. Davis 2018-10-15 23:35:58 -07:00
parent f90de1110d
commit f66ea66acd
2 changed files with 25 additions and 1 deletions

View file

@ -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(

View 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() {}