aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorOwen Avery <powerboat9.gamer@gmail.com>2023-06-13 00:25:03 -0400
committerPhilip Herron <philip.herron@embecosm.com>2023-07-06 10:58:37 +0000
commit5e735e9aaa7d9c5fdab1796ace3045c6f2f7badf (patch)
tree1945863bb8e136c87b2b0291a4fc9c8a57d3114d /gcc
parentc8679a6d880cd99261b796a0818e93f2168344a8 (diff)
downloadgcc-5e735e9aaa7d9c5fdab1796ace3045c6f2f7badf.zip
gcc-5e735e9aaa7d9c5fdab1796ace3045c6f2f7badf.tar.gz
gcc-5e735e9aaa7d9c5fdab1796ace3045c6f2f7badf.tar.bz2
Ignore semicolon following a macro expansion in expression context
gcc/rust/ChangeLog: * expand/rust-macro-expand.cc (transcribe_expression): Skip trailing semicolon. gcc/testsuite/ChangeLog: * rust/compile/macro-issue2273.rs: New test. Signed-off-by: Owen Avery <powerboat9.gamer@gmail.com>
Diffstat (limited to 'gcc')
-rw-r--r--gcc/rust/expand/rust-macro-expand.cc9
-rw-r--r--gcc/testsuite/rust/compile/macro-issue2273.rs7
2 files changed, 16 insertions, 0 deletions
diff --git a/gcc/rust/expand/rust-macro-expand.cc b/gcc/rust/expand/rust-macro-expand.cc
index e313e1a..84e87e5 100644
--- a/gcc/rust/expand/rust-macro-expand.cc
+++ b/gcc/rust/expand/rust-macro-expand.cc
@@ -911,6 +911,15 @@ transcribe_expression (Parser<MacroInvocLexer> &parser)
if (expr == nullptr)
return AST::Fragment::create_error ();
+ // FIXME: make this an error for some edititons
+ if (parser.peek_current_token ()->get_id () == SEMICOLON)
+ {
+ rust_warning_at (
+ parser.peek_current_token ()->get_locus (), 0,
+ "trailing semicolon in macro used in expression context");
+ parser.skip_token ();
+ }
+
auto end = lexer.get_offs ();
return AST::Fragment ({std::move (expr)}, lexer.get_token_slice (start, end));
diff --git a/gcc/testsuite/rust/compile/macro-issue2273.rs b/gcc/testsuite/rust/compile/macro-issue2273.rs
new file mode 100644
index 0000000..ee3dd1f
--- /dev/null
+++ b/gcc/testsuite/rust/compile/macro-issue2273.rs
@@ -0,0 +1,7 @@
+macro_rules! mac {
+ () => {();} // { dg-warning "trailing semicolon" }
+}
+
+pub fn foo() {
+ mac!()
+}