about summary refs log tree commit diff
path: root/src/librustc_metadata
diff options
context:
space:
mode:
authorJeffrey Seyfried <jeffrey.seyfried@gmail.com>2016-10-18 05:33:50 +0000
committerJeffrey Seyfried <jeffrey.seyfried@gmail.com>2016-10-19 10:05:03 +0000
commitb283aaf0ff74db93162b402e627f3b4ed7fb7d4e (patch)
tree27bc4c954fde9bc666a97cb2c407c4603991c28d /src/librustc_metadata
parent0c429872a32c3005cf2b347025163361218634a4 (diff)
downloadrust-b283aaf0ff74db93162b402e627f3b4ed7fb7d4e.tar.gz
rust-b283aaf0ff74db93162b402e627f3b4ed7fb7d4e.zip
Future proof `#[no_link]`.
Diffstat (limited to 'src/librustc_metadata')
-rw-r--r--src/librustc_metadata/macro_import.rs11
1 files changed, 9 insertions, 2 deletions
diff --git a/src/librustc_metadata/macro_import.rs b/src/librustc_metadata/macro_import.rs
index 3b1b2a4cd27..41e14ea9f40 100644
--- a/src/librustc_metadata/macro_import.rs
+++ b/src/librustc_metadata/macro_import.rs
@@ -52,6 +52,7 @@ impl<'a> CrateLoader<'a> {
         // Parse the attributes relating to macros.
         let mut import = ImportSelection::Some(FnvHashMap());
         let mut reexport = FnvHashMap();
+        let mut no_link = false;
 
         for attr in &extern_crate.attrs {
             let mut used = true;
@@ -87,6 +88,7 @@ impl<'a> CrateLoader<'a> {
                         }
                     }
                 }
+                "no_link" => no_link = true,
                 _ => used = false,
             }
             if used {
@@ -94,17 +96,22 @@ impl<'a> CrateLoader<'a> {
             }
         }
 
-        self.load_macros(extern_crate, allows_macros, import, reexport)
+        self.load_macros(extern_crate, allows_macros, import, reexport, no_link)
     }
 
     fn load_macros<'b>(&mut self,
                        vi: &ast::Item,
                        allows_macros: bool,
                        import: ImportSelection,
-                       reexport: MacroSelection)
+                       reexport: MacroSelection,
+                       no_link: bool)
                        -> Vec<LoadedMacro> {
         if let ImportSelection::Some(ref sel) = import {
             if sel.is_empty() && reexport.is_empty() {
+                // Make sure we can read macros from `#[no_link]` crates.
+                if no_link {
+                    self.creader.read_macros(vi);
+                }
                 return Vec::new();
             }
         }