From 7ccc97e5b4fb6a9a3fb76b806df4e22b9401a47c Mon Sep 17 00:00:00 2001 From: Corey Richardson Date: Wed, 22 May 2013 14:21:09 -0400 Subject: [PATCH 1/2] Fix ICE in macros --- src/libsyntax/ext/tt/transcribe.rs | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/libsyntax/ext/tt/transcribe.rs b/src/libsyntax/ext/tt/transcribe.rs index d806801b7d172..b13dc3f3c0fe7 100644 --- a/src/libsyntax/ext/tt/transcribe.rs +++ b/src/libsyntax/ext/tt/transcribe.rs @@ -118,10 +118,13 @@ fn lookup_cur_matched_by_matched(r: &mut TtReader, } fn lookup_cur_matched(r: &mut TtReader, name: ident) -> @named_match { - // FIXME (#3850): this looks a bit silly with an extra scope. - let start; - { start = *r.interpolations.get(&name); } - return lookup_cur_matched_by_matched(r, start); + match r.interpolations.find_copy(&name) { + Some(s) => lookup_cur_matched_by_matched(r, s), + None => { + r.sp_diag.span_fatal(r.cur_span, fmt!("unknown macro variable `%s`", + *r.interner.get(name))); + } + } } enum lis { lis_unconstrained, lis_constraint(uint, ident), lis_contradiction(~str) From 5118d2f84a4c4a8bf00d7fb9e06609877bf821e7 Mon Sep 17 00:00:00 2001 From: Corey Richardson Date: Wed, 22 May 2013 16:07:02 -0400 Subject: [PATCH 2/2] Add test --- src/test/compile-fail/issue-6596.rs | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 src/test/compile-fail/issue-6596.rs diff --git a/src/test/compile-fail/issue-6596.rs b/src/test/compile-fail/issue-6596.rs new file mode 100644 index 0000000000000..3c952dbc59087 --- /dev/null +++ b/src/test/compile-fail/issue-6596.rs @@ -0,0 +1,9 @@ +macro_rules! e( //~ ERROR unknown macro variable `nonexistent` + ($inp:ident) => ( + $nonexistent + ); +) + +fn main() { + e!(foo); +}