Fix an ICE parsing a malformed attribute.

Fixes #104620.
This commit is contained in:
Nicholas Nethercote 2022-11-22 16:48:42 +11:00
parent e221616639
commit 7c3f631ddf
3 changed files with 18 additions and 3 deletions

View File

@ -618,9 +618,12 @@ impl MetaItemKind {
}) => MetaItemKind::list_from_tokens(tokens.clone()),
AttrArgs::Delimited(..) => None,
AttrArgs::Eq(_, AttrArgsEq::Ast(expr)) => match expr.kind {
ast::ExprKind::Lit(token_lit) => Some(MetaItemKind::NameValue(
Lit::from_token_lit(token_lit, expr.span).expect("token_lit in from_attr_args"),
)),
ast::ExprKind::Lit(token_lit) => {
// Turn failures to `None`, we'll get parse errors elsewhere.
Lit::from_token_lit(token_lit, expr.span)
.ok()
.map(|lit| MetaItemKind::NameValue(lit))
}
_ => None,
},
AttrArgs::Eq(_, AttrArgsEq::Hir(lit)) => Some(MetaItemKind::NameValue(lit.clone())),

View File

@ -0,0 +1,4 @@
#![feature(rustc_attrs)]
#![rustc_dummy=5z] //~ ERROR unexpected expression: `5z`
fn main() {}

View File

@ -0,0 +1,8 @@
error: unexpected expression: `5z`
--> $DIR/issue-104620.rs:3:16
|
LL | #![rustc_dummy=5z]
| ^^
error: aborting due to previous error