about summary refs log tree commit diff
path: root/src/libsyntax
diff options
context:
space:
mode:
authorKeegan McAllister <kmcallister@mozilla.com>2014-11-18 14:02:40 -0800
committerKeegan McAllister <kmcallister@mozilla.com>2014-11-18 14:43:20 -0800
commitad61ff4b817f8581ea4c12f897f5e6baafe27952 (patch)
tree4d42d2ea1c3c9a53bf06e0e474f518a4aa8f33db /src/libsyntax
parent09e2ad13d0aa01143bcb20dece3ff6c5a7e34ea3 (diff)
downloadrust-ad61ff4b817f8581ea4c12f897f5e6baafe27952.tar.gz
rust-ad61ff4b817f8581ea4c12f897f5e6baafe27952.zip
deriving: error out when used on a non-type
Besides being more helpful, this gives us the flexibility to later define
a meaning for something like

    #[deriving(...)]
    mod bar { ... }
Diffstat (limited to 'src/libsyntax')
-rw-r--r--src/libsyntax/ext/deriving/generic/mod.rs7
1 files changed, 5 insertions, 2 deletions
diff --git a/src/libsyntax/ext/deriving/generic/mod.rs b/src/libsyntax/ext/deriving/generic/mod.rs
index dccc12e406b..eec3805721a 100644
--- a/src/libsyntax/ext/deriving/generic/mod.rs
+++ b/src/libsyntax/ext/deriving/generic/mod.rs
@@ -335,7 +335,7 @@ pub fn combine_substructure<'a>(f: CombineSubstructureFunc<'a>)
 impl<'a> TraitDef<'a> {
     pub fn expand(&self,
                   cx: &mut ExtCtxt,
-                  _mitem: &ast::MetaItem,
+                  mitem: &ast::MetaItem,
                   item: &ast::Item,
                   push: |P<ast::Item>|) {
         let newitem = match item.node {
@@ -351,7 +351,10 @@ impl<'a> TraitDef<'a> {
                                      item.ident,
                                      generics)
             }
-            _ => return
+            _ => {
+                cx.span_err(mitem.span, "`deriving` may only be applied to structs and enums");
+                return;
+            }
         };
         // Keep the lint attributes of the previous item to control how the
         // generated implementations are linted