From a016dfb1d110f7dfcd5f8e36ed02c2fd029532d3 Mon Sep 17 00:00:00 2001 From: Jonas Schievink Date: Wed, 12 Aug 2015 10:34:14 +0200 Subject: [PATCH] Fix macro expansion in for loop pattern --- src/libsyntax/ext/expand.rs | 2 +- src/test/run-pass/for-loop-macro.rs | 20 ++++++++++++++++++++ 2 files changed, 21 insertions(+), 1 deletion(-) create mode 100644 src/test/run-pass/for-loop-macro.rs diff --git a/src/libsyntax/ext/expand.rs b/src/libsyntax/ext/expand.rs index cd60ee0691c13..6c09d6c107e6d 100644 --- a/src/libsyntax/ext/expand.rs +++ b/src/libsyntax/ext/expand.rs @@ -400,7 +400,7 @@ pub fn expand_expr(e: P, fld: &mut MacroExpander) -> P { // `::std::option::Option::Some() => ` let pat_arm = { let body_expr = fld.cx.expr_block(body); - let pat = noop_fold_pat(pat, fld); + let pat = fld.fold_pat(pat); let some_pat = fld.cx.pat_some(pat_span, pat); fld.cx.arm(pat_span, vec![some_pat], body_expr) diff --git a/src/test/run-pass/for-loop-macro.rs b/src/test/run-pass/for-loop-macro.rs new file mode 100644 index 0000000000000..17c5a98246b18 --- /dev/null +++ b/src/test/run-pass/for-loop-macro.rs @@ -0,0 +1,20 @@ +// 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +macro_rules! var { + ( $name:ident ) => ( $name ); +} + +pub fn main() { + let x = [ 3, 3, 3 ]; + for var!(i) in &x { + assert_eq!(*i, 3); + } +}