about summary refs log tree commit diff
path: root/src/libsyntax_ext
diff options
context:
space:
mode:
authorJeffrey Seyfried <jeffrey.seyfried@gmail.com>2016-11-05 20:30:40 +0000
committerJeffrey Seyfried <jeffrey.seyfried@gmail.com>2016-11-10 11:19:34 +0000
commit0a998b86e977912dfabd4fddb3c7efe87accf2c2 (patch)
tree317c4bdf9d17873a49bc449fa7217273c2a6e7b0 /src/libsyntax_ext
parentad5345239850a6d9f16ad30e7f2d220ac1c0ae9d (diff)
downloadrust-0a998b86e977912dfabd4fddb3c7efe87accf2c2.tar.gz
rust-0a998b86e977912dfabd4fddb3c7efe87accf2c2.zip
Support `#[macro_reexport]`ing custom derives.
Diffstat (limited to 'src/libsyntax_ext')
-rw-r--r--src/libsyntax_ext/deriving/mod.rs10
1 files changed, 8 insertions, 2 deletions
diff --git a/src/libsyntax_ext/deriving/mod.rs b/src/libsyntax_ext/deriving/mod.rs
index c2bfead5686..b1d473820f7 100644
--- a/src/libsyntax_ext/deriving/mod.rs
+++ b/src/libsyntax_ext/deriving/mod.rs
@@ -12,10 +12,10 @@
 
 use syntax::ast::{self, MetaItem};
 use syntax::attr::HasAttrs;
+use syntax::codemap;
 use syntax::ext::base::{Annotatable, ExtCtxt, SyntaxExtension};
 use syntax::ext::build::AstBuilder;
-use syntax::feature_gate;
-use syntax::codemap;
+use syntax::feature_gate::{self, emit_feature_err};
 use syntax::parse::token::{intern, intern_and_get_ident};
 use syntax::ptr::P;
 use syntax_pos::Span;
@@ -220,6 +220,12 @@ pub fn expand_derive(cx: &mut ExtCtxt,
                                  .filter(|&(_, ref name)| !is_builtin_trait(&name.name().unwrap()))
                                  .next();
     if let Some((i, titem)) = macros_11_derive {
+        if !cx.ecfg.features.unwrap().proc_macro {
+            let issue = feature_gate::GateIssue::Language;
+            let msg = "custom derive macros are experimentally supported";
+            emit_feature_err(cx.parse_sess, "proc_macro", titem.span, issue, msg);
+        }
+
         let tname = ast::Ident::with_empty_ctxt(intern(&titem.name().unwrap()));
         let path = ast::Path::from_ident(titem.span, tname);
         let ext = cx.resolver.resolve_macro(cx.current_expansion.mark, &path, false).unwrap();