diff options
| author | bors <bors@rust-lang.org> | 2017-12-28 01:25:38 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2017-12-28 01:25:38 +0000 |
| commit | 6c06bfaebad19abc73506e730e97b03291ecf187 (patch) | |
| tree | 012c4967a1bb2e0739f411dd0c1df638aafee087 | |
| parent | e687205fd05a1390f45e21bbe21b5cdf0bab5af8 (diff) | |
| parent | d1aa29ba3282662518e3b30e6db6f7af2b906356 (diff) | |
| download | rust-6c06bfaebad19abc73506e730e97b03291ecf187.tar.gz rust-6c06bfaebad19abc73506e730e97b03291ecf187.zip | |
Auto merge of #47017 - topecongiro:issue-33469, r=estebank
Do not panic on interpolated token inside quote macro Closes #33469.
| -rw-r--r-- | src/libsyntax/ext/quote.rs | 6 | ||||
| -rw-r--r-- | src/test/compile-fail/quote-with-interpolated.rs | 19 |
2 files changed, 24 insertions, 1 deletions
diff --git a/src/libsyntax/ext/quote.rs b/src/libsyntax/ext/quote.rs index 426dde4f2a7..6141c38ab14 100644 --- a/src/libsyntax/ext/quote.rs +++ b/src/libsyntax/ext/quote.rs @@ -669,7 +669,11 @@ fn expr_mk_token(cx: &ExtCtxt, sp: Span, tok: &token::Token) -> P<ast::Expr> { vec![mk_name(cx, sp, ast::Ident::with_empty_ctxt(ident))]); } - token::Interpolated(_) => panic!("quote! with interpolated token"), + token::Interpolated(_) => { + cx.span_err(sp, "quote! with interpolated token"); + // Use dummy name. + "Interpolated" + } token::Eq => "Eq", token::Lt => "Lt", diff --git a/src/test/compile-fail/quote-with-interpolated.rs b/src/test/compile-fail/quote-with-interpolated.rs new file mode 100644 index 00000000000..1fafb1c7a1b --- /dev/null +++ b/src/test/compile-fail/quote-with-interpolated.rs @@ -0,0 +1,19 @@ +// Copyright 2017 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. + +#![feature(quote)] +fn main() { + macro_rules! foo { + ($bar:expr) => { + quote_expr!(cx, $bar) //~ ERROR quote! with interpolated token + } + } + foo!(bar); +} |
