about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--src/librustc_resolve/macros.rs21
-rw-r--r--src/test/ui/macros/macro-stability.rs2
-rw-r--r--src/test/ui/macros/macro-stability.stderr10
3 files changed, 20 insertions, 13 deletions
diff --git a/src/librustc_resolve/macros.rs b/src/librustc_resolve/macros.rs
index dcdf0be41c2..724b30800fa 100644
--- a/src/librustc_resolve/macros.rs
+++ b/src/librustc_resolve/macros.rs
@@ -236,21 +236,20 @@ impl<'a> base::Resolver for Resolver<'a> {
         };
         invoc.expansion_data.mark.set_expn_info(ext.expn_info(span, &format));
 
+        if let Some((feature, issue)) = ext.unstable_feature {
+            let features = self.session.features_untracked();
+            if !span.allows_unstable(feature) &&
+               features.declared_lib_features.iter().all(|(feat, _)| *feat != feature) {
+                let msg = format!("macro {}! is unstable", path);
+                emit_feature_err(&self.session.parse_sess, feature, span,
+                                 GateIssue::Library(Some(issue)), &msg);
+            }
+        }
+
         if let Res::Def(_, def_id) = res {
             if after_derive {
                 self.session.span_err(span, "macro attributes must be placed before `#[derive]`");
             }
-            if let Some((feature, issue)) = ext.unstable_feature {
-                // Do not stability-check macros in the same crate.
-                let features = self.session.features_untracked();
-                if !def_id.is_local() &&
-                   !span.allows_unstable(feature) &&
-                   features.declared_lib_features.iter().all(|(feat, _)| *feat != feature) {
-                    let msg = format!("macro {}! is unstable", path);
-                    emit_feature_err(&self.session.parse_sess, feature, span,
-                                     GateIssue::Library(Some(issue)), &msg);
-                }
-            }
             self.macro_defs.insert(invoc.expansion_data.mark, def_id);
             let normal_module_def_id =
                 self.macro_def_scope(invoc.expansion_data.mark).normal_ancestor_id;
diff --git a/src/test/ui/macros/macro-stability.rs b/src/test/ui/macros/macro-stability.rs
index 7d1ee6a43b6..e6a81c96696 100644
--- a/src/test/ui/macros/macro-stability.rs
+++ b/src/test/ui/macros/macro-stability.rs
@@ -7,6 +7,6 @@
 macro_rules! local_unstable { () => () }
 
 fn main() {
-    local_unstable!();
+    local_unstable!(); //~ ERROR: macro local_unstable! is unstable
     unstable_macro!(); //~ ERROR: macro unstable_macro! is unstable
 }
diff --git a/src/test/ui/macros/macro-stability.stderr b/src/test/ui/macros/macro-stability.stderr
index a0e0c351a48..d609c3bc765 100644
--- a/src/test/ui/macros/macro-stability.stderr
+++ b/src/test/ui/macros/macro-stability.stderr
@@ -1,3 +1,11 @@
+error[E0658]: macro local_unstable! is unstable
+  --> $DIR/macro-stability.rs:10:5
+   |
+LL |     local_unstable!();
+   |     ^^^^^^^^^^^^^^^^^^
+   |
+   = help: add #![feature(local_unstable)] to the crate attributes to enable
+
 error[E0658]: macro unstable_macro! is unstable
   --> $DIR/macro-stability.rs:11:5
    |
@@ -6,6 +14,6 @@ LL |     unstable_macro!();
    |
    = help: add #![feature(unstable_macros)] to the crate attributes to enable
 
-error: aborting due to previous error
+error: aborting due to 2 previous errors
 
 For more information about this error, try `rustc --explain E0658`.