From: Owen Avery Date: Tue, 13 Jun 2023 04:25:03 +0000 (-0400) Subject: gccrs: Ignore semicolon following a macro expansion in expression context X-Git-Tag: basepoints/gcc-15~2403 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=ba06fbcf5d5d1ed4b4f7cba0f349fc942db776fe;p=thirdparty%2Fgcc.git gccrs: 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 --- diff --git a/gcc/rust/expand/rust-macro-expand.cc b/gcc/rust/expand/rust-macro-expand.cc index a4ad16a915c9..4ac6fdc3762e 100644 --- a/gcc/rust/expand/rust-macro-expand.cc +++ b/gcc/rust/expand/rust-macro-expand.cc @@ -911,6 +911,15 @@ transcribe_expression (Parser &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 000000000000..ee3dd1fa0bd5 --- /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!() +}