Skip to content

Commit

Permalink
Rollup merge of rust-lang#80135 - camelid:const-macro-nt, r=petrochenkov
Browse files Browse the repository at this point in the history
Don't allow `const` to begin a nonterminal

Fixes rust-lang#79908.

Thanks to Vadim Petrochenkov who [told me what the fix was][z]!

[z]: https://rust-lang.zulipchat.com/#narrow/stream/182449-t-compiler.2Fhelp/topic/finding.20which.20macro.20rule.20to.20use/near/220240422

r? `@petrochenkov`
  • Loading branch information
RalfJung authored Dec 18, 2020
2 parents 40eb8ad + d6f1787 commit bd40604
Show file tree
Hide file tree
Showing 2 changed files with 22 additions and 0 deletions.
2 changes: 2 additions & 0 deletions compiler/rustc_parse/src/parser/nonterminal.rs
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,8 @@ impl<'a> Parser<'a> {
token.can_begin_expr()
// This exception is here for backwards compatibility.
&& !token.is_keyword(kw::Let)
// This exception is here for backwards compatibility.
&& !token.is_keyword(kw::Const)
}
NonterminalKind::Ty => token.can_begin_type(),
NonterminalKind::Ident => get_macro_ident(token).is_some(),
Expand Down
20 changes: 20 additions & 0 deletions src/test/ui/inline-const/macro-with-const.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
// check-pass

macro_rules! exp {
(const $n:expr) => {
$n
};
}

macro_rules! stmt {
(exp $e:expr) => {
$e
};
(exp $($t:tt)+) => {
exp!($($t)+)
};
}

fn main() {
stmt!(exp const 1);
}

0 comments on commit bd40604

Please sign in to comment.