refactor: use CStore::is_no_builtins

This commit is contained in:
Jorge Aparicio 2016-08-14 21:56:26 -05:00
parent db16909ae3
commit 35eba85c3d
4 changed files with 9 additions and 9 deletions

View file

@ -227,6 +227,7 @@ pub trait CrateStore<'tcx> {
fn plugin_registrar_fn(&self, cnum: ast::CrateNum) -> Option<DefId>;
fn native_libraries(&self, cnum: ast::CrateNum) -> Vec<(NativeLibraryKind, String)>;
fn reachable_ids(&self, cnum: ast::CrateNum) -> Vec<DefId>;
fn is_no_builtins(&self, cnum: ast::CrateNum) -> bool;
// resolve
fn def_index_for_def_key(&self,
@ -428,6 +429,7 @@ impl<'tcx> CrateStore<'tcx> for DummyCrateStore {
fn native_libraries(&self, cnum: ast::CrateNum) -> Vec<(NativeLibraryKind, String)>
{ bug!("native_libraries") }
fn reachable_ids(&self, cnum: ast::CrateNum) -> Vec<DefId> { bug!("reachable_ids") }
fn is_no_builtins(&self, cnum: ast::CrateNum) -> bool { bug!("is_no_builtins") }
// resolve
fn def_key(&self, def: DefId) -> hir_map::DefKey { bug!("def_key") }

View file

@ -409,6 +409,10 @@ impl<'tcx> CrateStore<'tcx> for cstore::CStore {
decoder::get_reachable_ids(&cdata)
}
fn is_no_builtins(&self, cnum: ast::CrateNum) -> bool {
attr::contains_name(&self.crate_attrs(cnum), "no_builtins")
}
fn def_index_for_def_key(&self,
cnum: ast::CrateNum,
def: DefKey)

View file

@ -42,7 +42,7 @@ use std::process::Command;
use std::str;
use flate;
use syntax::ast;
use syntax::attr::{self, AttrMetaMethods};
use syntax::attr::AttrMetaMethods;
use syntax_pos::Span;
// RLIB LLVM-BYTECODE OBJECT LAYOUT
@ -938,10 +938,8 @@ fn add_upstream_rust_crates(cmd: &mut Linker,
Linkage::NotLinked |
Linkage::IncludedFromDylib => {}
Linkage::Static => {
let is_a_no_builtins_crate =
attr::contains_name(&sess.cstore.crate_attrs(cnum), "no_builtins");
add_static_crate(cmd, sess, tmpdir, crate_type,
&src.rlib.unwrap().0, is_a_no_builtins_crate)
&src.rlib.unwrap().0, sess.cstore.is_no_builtins(cnum))
}
Linkage::Dynamic => {
add_dynamic_crate(cmd, sess, &src.dylib.unwrap().0)

View file

@ -17,7 +17,6 @@ use llvm::{ModuleRef, TargetMachineRef, True, False};
use rustc::util::common::time;
use rustc::util::common::path2cstr;
use back::write::{ModuleConfig, with_llvm_pmb};
use syntax::attr;
use libc;
use flate;
@ -54,11 +53,8 @@ pub fn run(sess: &session::Session, llmod: ModuleRef,
// load the bitcode from the archive. Then merge it into the current LLVM
// module that we've got.
link::each_linked_rlib(sess, &mut |cnum, path| {
let is_a_no_builtins_crate =
attr::contains_name(&sess.cstore.crate_attrs(cnum), "no_builtins");
// `#![no_builtins]` crates don't participate in LTO.
if is_a_no_builtins_crate {
if sess.cstore.is_no_builtins(cnum) {
return;
}