diff options
| author | Manish Goregaokar <manishsmail@gmail.com> | 2015-02-27 11:42:40 +0530 |
|---|---|---|
| committer | Manish Goregaokar <manishsmail@gmail.com> | 2015-02-27 20:37:37 +0530 |
| commit | 19ab0b9a3ca64016c4b46e91a2ab75879be7e20d (patch) | |
| tree | c4ba97e1684618175be3f423f7bcaec3bbb7c524 /src | |
| parent | 6a97fbab4b7bdfc0ad4e23c46a65ba3b685eb730 (diff) | |
| parent | 65ea9110bd930dc74b0fc37bf151dbbce80fe4ee (diff) | |
| download | rust-19ab0b9a3ca64016c4b46e91a2ab75879be7e20d.tar.gz rust-19ab0b9a3ca64016c4b46e91a2ab75879be7e20d.zip | |
Rollup merge of #22823 - kmcallister:fix-21370, r=huonw
Fixes #21370. `unused-macro-with-follow-violation.rs` was already handled correctly. That test is just for good measure. :) I have a more involved plan to clean this up, but it ran into difficulties such as #22814.
Diffstat (limited to 'src')
| -rw-r--r-- | src/libsyntax/ext/tt/macro_rules.rs | 8 | ||||
| -rw-r--r-- | src/test/compile-fail/unused-macro-with-bad-frag-spec.rs | 17 | ||||
| -rw-r--r-- | src/test/compile-fail/unused-macro-with-follow-violation.rs | 15 |
3 files changed, 36 insertions, 4 deletions
diff --git a/src/libsyntax/ext/tt/macro_rules.rs b/src/libsyntax/ext/tt/macro_rules.rs index fa6d934a457..67011ad21a6 100644 --- a/src/libsyntax/ext/tt/macro_rules.rs +++ b/src/libsyntax/ext/tt/macro_rules.rs @@ -334,6 +334,10 @@ fn check_matcher<'a, I>(cx: &mut ExtCtxt, matcher: I, follow: &Token) let tok = if let TtToken(_, ref tok) = *token { tok } else { unreachable!() }; // If T' is in the set FOLLOW(NT), continue. Else, reject. match (&next_token, is_in_follow(cx, &next_token, frag_spec.as_str())) { + (_, Err(msg)) => { + cx.span_err(sp, &msg); + continue + } (&Eof, _) => return Some((sp, tok.clone())), (_, Ok(true)) => continue, (next, Ok(false)) => { @@ -343,10 +347,6 @@ fn check_matcher<'a, I>(cx: &mut ExtCtxt, matcher: I, follow: &Token) token_to_string(next))); continue }, - (_, Err(msg)) => { - cx.span_err(sp, &msg); - continue - } } }, TtSequence(sp, ref seq) => { diff --git a/src/test/compile-fail/unused-macro-with-bad-frag-spec.rs b/src/test/compile-fail/unused-macro-with-bad-frag-spec.rs new file mode 100644 index 00000000000..b868b79365d --- /dev/null +++ b/src/test/compile-fail/unused-macro-with-bad-frag-spec.rs @@ -0,0 +1,17 @@ +// Copyright 2015 The Rust Project Developers. See the COPYRIGHT +// file at the top-level directory of this distribution and at +// http://rust-lang.org/COPYRIGHT. +// +// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or +// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license +// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +// Issue #21370 + +macro_rules! test { + ($wrong:t_ty) => () //~ ERROR invalid fragment specifier `t_ty` +} + +fn main() { } diff --git a/src/test/compile-fail/unused-macro-with-follow-violation.rs b/src/test/compile-fail/unused-macro-with-follow-violation.rs new file mode 100644 index 00000000000..e9d09bb6ad9 --- /dev/null +++ b/src/test/compile-fail/unused-macro-with-follow-violation.rs @@ -0,0 +1,15 @@ +// Copyright 2015 The Rust Project Developers. See the COPYRIGHT +// file at the top-level directory of this distribution and at +// http://rust-lang.org/COPYRIGHT. +// +// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or +// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license +// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +macro_rules! test { + ($e:expr +) => () //~ ERROR not allowed for `expr` fragments +} + +fn main() { } |
