Skip to content

Commit

Permalink
Synthesize a TokenStream for StmtKind::Empty
Browse files Browse the repository at this point in the history
Fixes #80760
  • Loading branch information
Aaron1011 committed Jan 9, 2021
1 parent c8915ee commit 3ed6caa
Show file tree
Hide file tree
Showing 3 changed files with 50 additions and 1 deletion.
11 changes: 10 additions & 1 deletion compiler/rustc_parse/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -257,7 +257,16 @@ pub fn nt_to_tokenstream(
let tokens = match *nt {
Nonterminal::NtItem(ref item) => prepend_attrs(sess, &item.attrs, nt, item.tokens.as_ref()),
Nonterminal::NtBlock(ref block) => convert_tokens(block.tokens.as_ref()),
Nonterminal::NtStmt(ref stmt) => prepend_attrs(sess, stmt.attrs(), nt, stmt.tokens()),
Nonterminal::NtStmt(ref stmt) => {
let do_prepend = |tokens| prepend_attrs(sess, stmt.attrs(), nt, tokens);
if let ast::StmtKind::Empty = stmt.kind {
let tokens: TokenStream =
tokenstream::TokenTree::token(token::Semi, stmt.span).into();
do_prepend(Some(&LazyTokenStream::new(tokens)))
} else {
do_prepend(stmt.tokens())
}
}
Nonterminal::NtPat(ref pat) => convert_tokens(pat.tokens.as_ref()),
Nonterminal::NtTy(ref ty) => convert_tokens(ty.tokens.as_ref()),
Nonterminal::NtIdent(ident, is_raw) => {
Expand Down
26 changes: 26 additions & 0 deletions src/test/ui/proc-macro/issue-80760-empty-stmt.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
// check-pass
// aux-build:test-macros.rs
// compile-flags: -Z span-debug

#![no_std] // Don't load unnecessary hygiene information from std
extern crate std;

#[macro_use]
extern crate test_macros;

macro_rules! empty_stmt {
($s:stmt) => {
print_bang!($s);

// Currently, all attributes are ignored
// on an empty statement
#[print_attr]
#[rustc_dummy(first)]
#[rustc_dummy(second)]
$s
}
}

fn main() {
empty_stmt!(;);
}
14 changes: 14 additions & 0 deletions src/test/ui/proc-macro/issue-80760-empty-stmt.stdout
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
PRINT-BANG INPUT (DISPLAY): ;
PRINT-BANG INPUT (DEBUG): TokenStream [
Group {
delimiter: None,
stream: TokenStream [
Punct {
ch: ';',
spacing: Alone,
span: $DIR/issue-80760-empty-stmt.rs:25:17: 25:18 (#0),
},
],
span: $DIR/issue-80760-empty-stmt.rs:13:21: 13:23 (#4),
},
]

0 comments on commit 3ed6caa

Please sign in to comment.