about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--src/librustc_resolve/macros.rs6
-rw-r--r--src/libsyntax_ext/deriving/custom.rs4
-rw-r--r--src/test/run-pass-fulldeps/proc-macro/auxiliary/derive-nothing.rs24
-rw-r--r--src/test/run-pass-fulldeps/proc-macro/struct-field-macro.rs28
4 files changed, 60 insertions, 2 deletions
diff --git a/src/librustc_resolve/macros.rs b/src/librustc_resolve/macros.rs
index 44cc580ad12..47033f74e0e 100644
--- a/src/librustc_resolve/macros.rs
+++ b/src/librustc_resolve/macros.rs
@@ -28,7 +28,7 @@ use syntax::ext::expand::{Expansion, mark_tts};
 use syntax::ext::hygiene::Mark;
 use syntax::ext::tt::macro_rules;
 use syntax::feature_gate::{emit_feature_err, GateIssue};
-use syntax::fold::Folder;
+use syntax::fold::{self, Folder};
 use syntax::ptr::P;
 use syntax::symbol::keywords;
 use syntax::util::lev_distance::find_best_match_for_name;
@@ -117,6 +117,10 @@ impl<'a> base::Resolver for Resolver<'a> {
                 }
                 path
             }
+
+            fn fold_mac(&mut self, mac: ast::Mac) -> ast::Mac {
+                fold::noop_fold_mac(mac, self)
+            }
         }
 
         EliminateCrateVar(self).fold_item(item).expect_one("")
diff --git a/src/libsyntax_ext/deriving/custom.rs b/src/libsyntax_ext/deriving/custom.rs
index 6f02a348f91..64ec460a524 100644
--- a/src/libsyntax_ext/deriving/custom.rs
+++ b/src/libsyntax_ext/deriving/custom.rs
@@ -12,7 +12,7 @@ use std::panic;
 
 use errors::FatalError;
 use proc_macro::{TokenStream, __internal};
-use syntax::ast::{self, ItemKind, Attribute};
+use syntax::ast::{self, ItemKind, Attribute, Mac};
 use syntax::attr::{mark_used, mark_known};
 use syntax::codemap::Span;
 use syntax::ext::base::*;
@@ -28,6 +28,8 @@ impl<'a> Visitor<'a> for MarkAttrs<'a> {
             mark_known(attr);
         }
     }
+
+    fn visit_mac(&mut self, _mac: &Mac) {}
 }
 
 pub struct CustomDerive {
diff --git a/src/test/run-pass-fulldeps/proc-macro/auxiliary/derive-nothing.rs b/src/test/run-pass-fulldeps/proc-macro/auxiliary/derive-nothing.rs
new file mode 100644
index 00000000000..a9257cb4c8b
--- /dev/null
+++ b/src/test/run-pass-fulldeps/proc-macro/auxiliary/derive-nothing.rs
@@ -0,0 +1,24 @@
+// 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.
+
+// no-prefer-dynamic
+
+#![crate_type = "proc-macro"]
+#![feature(proc_macro)]
+#![feature(proc_macro_lib)]
+
+extern crate proc_macro;
+
+use proc_macro::TokenStream;
+
+#[proc_macro_derive(Nothing)]
+pub fn nothing(input: TokenStream) -> TokenStream {
+    "".parse().unwrap()
+}
diff --git a/src/test/run-pass-fulldeps/proc-macro/struct-field-macro.rs b/src/test/run-pass-fulldeps/proc-macro/struct-field-macro.rs
new file mode 100644
index 00000000000..818308b05a4
--- /dev/null
+++ b/src/test/run-pass-fulldeps/proc-macro/struct-field-macro.rs
@@ -0,0 +1,28 @@
+// 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:derive-nothing.rs
+// ignore-stage1
+
+#![feature(proc_macro)]
+
+#[macro_use]
+extern crate derive_nothing;
+
+macro_rules! int {
+    () => { i32 }
+}
+
+#[derive(Nothing)]
+struct S {
+    x: int!(),
+}
+
+fn main() {}