about summary refs log tree commit diff
diff options
context:
space:
mode:
authorMichael Woerister <michaelwoerister@posteo.net>2016-12-02 18:00:41 -0500
committerMichael Woerister <michaelwoerister@posteo.net>2016-12-05 11:05:25 -0500
commit93da4f81bfb879eea9236d5fd16734a68836c97c (patch)
tree93671d91010f7b4920c217934201064c5b66a644
parentea9f61353a77a704c9abf3fb1f8e19fdcecff6a9 (diff)
Export the plugin registrar from proc-macro crates (and not much else)
-rw-r--r--src/librustc_trans/back/symbol_export.rs10
1 files changed, 9 insertions, 1 deletions
diff --git a/src/librustc_trans/back/symbol_export.rs b/src/librustc_trans/back/symbol_export.rs
index 2290cb0f487..f99f543d9b7 100644
--- a/src/librustc_trans/back/symbol_export.rs
+++ b/src/librustc_trans/back/symbol_export.rs
@@ -60,6 +60,14 @@ impl ExportedSymbols {
             local_crate.push(("main".to_string(), SymbolExportLevel::C));
         }
 
+        if let Some(id) = scx.sess().derive_registrar_fn.get() {
+            let svh = &scx.link_meta().crate_hash;
+            let def_id = scx.tcx().map.local_def_id(id);
+            let idx = def_id.index;
+            let registrar = scx.sess().generate_derive_registrar_symbol(svh, idx);
+            local_crate.push((registrar, SymbolExportLevel::C));
+        }
+
         if scx.sess().crate_types.borrow().contains(&config::CrateTypeDylib) {
             local_crate.push((scx.metadata_symbol_name(),
                               SymbolExportLevel::Rust));
@@ -135,8 +143,8 @@ pub fn crate_export_threshold(crate_type: config::CrateType)
     match crate_type {
         config::CrateTypeExecutable |
         config::CrateTypeStaticlib  |
-        config::CrateTypeCdylib     => SymbolExportLevel::C,
         config::CrateTypeProcMacro  |
+        config::CrateTypeCdylib     => SymbolExportLevel::C,
         config::CrateTypeRlib       |
         config::CrateTypeMetadata   |
         config::CrateTypeDylib      => SymbolExportLevel::Rust,