diff options
| author | bors <bors@rust-lang.org> | 2017-01-06 19:23:06 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2017-01-06 19:23:06 +0000 |
| commit | e447b73f39312a7afc69ecf0bb02e09014e2f393 (patch) | |
| tree | 5ab37b91332113795cdd2e189c8e9f651c72fc83 /src | |
| parent | a28701a928f8d6ab0299b10708441f7234ba7133 (diff) | |
| parent | fd532a160822d58ae28d81c8396e2d1f0b691e09 (diff) | |
| download | rust-e447b73f39312a7afc69ecf0bb02e09014e2f393.tar.gz rust-e447b73f39312a7afc69ecf0bb02e09014e2f393.zip | |
Auto merge of #38792 - jseyfried:improve_macros_11_diagnostics, r=nikomatsakis
proc macros 1.1: improve diagnostics Fixes #38586. r? @nrc
Diffstat (limited to 'src')
| -rw-r--r-- | src/libsyntax/fold.rs | 14 | ||||
| -rw-r--r-- | src/test/compile-fail-fulldeps/proc-macro/auxiliary/issue_38586.rs | 22 | ||||
| -rw-r--r-- | src/test/compile-fail-fulldeps/proc-macro/issue-38586.rs | 21 |
3 files changed, 50 insertions, 7 deletions
diff --git a/src/libsyntax/fold.rs b/src/libsyntax/fold.rs index 9797e0003fc..7bce00ebcab 100644 --- a/src/libsyntax/fold.rs +++ b/src/libsyntax/fold.rs @@ -542,19 +542,19 @@ pub fn noop_fold_arg<T: Folder>(Arg {id, pat, ty}: Arg, fld: &mut T) -> Arg { pub fn noop_fold_tt<T: Folder>(tt: &TokenTree, fld: &mut T) -> TokenTree { match *tt { TokenTree::Token(span, ref tok) => - TokenTree::Token(span, fld.fold_token(tok.clone())), + TokenTree::Token(fld.new_span(span), fld.fold_token(tok.clone())), TokenTree::Delimited(span, ref delimed) => { - TokenTree::Delimited(span, Rc::new( + TokenTree::Delimited(fld.new_span(span), Rc::new( Delimited { delim: delimed.delim, - open_span: delimed.open_span, + open_span: fld.new_span(delimed.open_span), tts: fld.fold_tts(&delimed.tts), - close_span: delimed.close_span, + close_span: fld.new_span(delimed.close_span), } )) }, TokenTree::Sequence(span, ref seq) => - TokenTree::Sequence(span, + TokenTree::Sequence(fld.new_span(span), Rc::new(SequenceRepetition { tts: fld.fold_tts(&seq.tts), separator: seq.separator.clone().map(|tok| fld.fold_token(tok)), @@ -647,7 +647,7 @@ pub fn noop_fold_fn_decl<T: Folder>(decl: P<FnDecl>, fld: &mut T) -> P<FnDecl> { inputs: inputs.move_map(|x| fld.fold_arg(x)), output: match output { FunctionRetTy::Ty(ty) => FunctionRetTy::Ty(fld.fold_ty(ty)), - FunctionRetTy::Default(span) => FunctionRetTy::Default(span), + FunctionRetTy::Default(span) => FunctionRetTy::Default(fld.new_span(span)), }, variadic: variadic }) @@ -674,7 +674,7 @@ pub fn noop_fold_ty_param<T: Folder>(tp: TyParam, fld: &mut T) -> TyParam { ident: fld.fold_ident(ident), bounds: fld.fold_bounds(bounds), default: default.map(|x| fld.fold_ty(x)), - span: span + span: fld.new_span(span), } } diff --git a/src/test/compile-fail-fulldeps/proc-macro/auxiliary/issue_38586.rs b/src/test/compile-fail-fulldeps/proc-macro/auxiliary/issue_38586.rs new file mode 100644 index 00000000000..10da846a86c --- /dev/null +++ b/src/test/compile-fail-fulldeps/proc-macro/auxiliary/issue_38586.rs @@ -0,0 +1,22 @@ +// Copyright 2016 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. + +// force-host +// no-prefer-dynamic + +#![feature(proc_macro, proc_macro_lib)] +#![crate_type = "proc-macro"] + +extern crate proc_macro; + +#[proc_macro_derive(A)] +pub fn derive_a(_: proc_macro::TokenStream) -> proc_macro::TokenStream { + "fn f() { println!(\"{}\", foo); }".parse().unwrap() +} diff --git a/src/test/compile-fail-fulldeps/proc-macro/issue-38586.rs b/src/test/compile-fail-fulldeps/proc-macro/issue-38586.rs new file mode 100644 index 00000000000..42475e6de90 --- /dev/null +++ b/src/test/compile-fail-fulldeps/proc-macro/issue-38586.rs @@ -0,0 +1,21 @@ +// Copyright 2016 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. + +// aux-build:issue_38586.rs + +#![feature(proc_macro)] + +#[macro_use] +extern crate issue_38586; + +#[derive(A)] //~ ERROR `foo` +struct A; + +fn main() {} |
