diff options
author | liushuyu <liushuyu011@gmail.com> | 2022-04-11 15:20:41 -0600 |
---|---|---|
committer | liushuyu <liushuyu011@gmail.com> | 2022-04-12 02:18:56 -0600 |
commit | 2fe4048f7f1d10ce9928eb7611179ee8ff7f17f8 (patch) | |
tree | c244b5d6b3b38f5a4423825cadc0f09686f3def2 /gcc | |
parent | 68458036c81d141a3899ac4e6ec6ddf0fdfde174 (diff) | |
download | gcc-2fe4048f7f1d10ce9928eb7611179ee8ff7f17f8.zip gcc-2fe4048f7f1d10ce9928eb7611179ee8ff7f17f8.tar.gz gcc-2fe4048f7f1d10ce9928eb7611179ee8ff7f17f8.tar.bz2 |
macros: fix an infinite loop ...
... introduced in fed5a41fb1c2c91b77297fdd6d3731078f480441, should fix #1102
Signed-off-by: Zixing Liu <liushuyu011@gmail.com>
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/rust/expand/rust-macro-builtins.cc | 5 | ||||
-rw-r--r-- | gcc/testsuite/rust/compile/builtin_macro_concat.rs | 9 |
2 files changed, 9 insertions, 5 deletions
diff --git a/gcc/rust/expand/rust-macro-builtins.cc b/gcc/rust/expand/rust-macro-builtins.cc index 85520ec..1f41545 100644 --- a/gcc/rust/expand/rust-macro-builtins.cc +++ b/gcc/rust/expand/rust-macro-builtins.cc @@ -287,9 +287,12 @@ MacroBuiltin::concat (Location invoc_locus, AST::MacroInvocData &invoc) } else { - rust_error_at (parser.peek_current_token ()->get_locus (), + auto current_token = parser.peek_current_token (); + rust_error_at (current_token->get_locus (), "argument must be a constant literal"); has_error = true; + // Just crash if the current token can't be skipped + rust_assert (parser.skip_token (current_token->get_id ())); } parser.maybe_skip_token (COMMA); } diff --git a/gcc/testsuite/rust/compile/builtin_macro_concat.rs b/gcc/testsuite/rust/compile/builtin_macro_concat.rs index 17c42e3..b37f80f 100644 --- a/gcc/testsuite/rust/compile/builtin_macro_concat.rs +++ b/gcc/testsuite/rust/compile/builtin_macro_concat.rs @@ -3,13 +3,14 @@ macro_rules! concat { } fn main() { - // let not_literal = "identifier"; + let not_literal = "identifier"; concat!(); - // concat! (,); // { error "argument must be a constant literal" } - // concat!(not_literal); // { error "argument must be a constant literal" } + concat! (,); // { dg-error "argument must be a constant literal" } + concat!(not_literal); // { dg-error "argument must be a constant literal" } concat!("message"); concat!("message",); concat!("message", 1, true, false, 1.0, 10usize, 2000u64); concat!("message", 1, true, false, 1.0, 10usize, 2000u64,); - // concat! ("m", not_literal); // { error "argument must be a constant literal" } + concat! ("m", not_literal); // { dg-error "argument must be a constant literal" } + concat!(not_literal invalid 'm' !!,); // { dg-error "argument must be a constant literal" } } |