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 { 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 or the MIT license +// , 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); +}