X-Git-Url: https://git.lizzy.rs/?a=blobdiff_plain;f=src%2Flibrustc_trans%2Flib.rs;h=42c3e620baa7f39b57f9f77c9831f3d6ca8bc7eb;hb=8821affd1523a719ffb9f6537d53f8725ab00592;hp=1758e331129d52a54d4fc3fb75f9467193e7e6e2;hpb=30907e1a27fdee448b50815764f47a62850ce914;p=rust.git diff --git a/src/librustc_trans/lib.rs b/src/librustc_trans/lib.rs index 1758e331129..42c3e620baa 100644 --- a/src/librustc_trans/lib.rs +++ b/src/librustc_trans/lib.rs @@ -21,7 +21,6 @@ #![feature(box_patterns)] #![feature(box_syntax)] -#![feature(const_fn)] #![feature(custom_attribute)] #![allow(unused_attributes)] #![feature(i128_type)] @@ -31,6 +30,10 @@ #![feature(slice_patterns)] #![feature(conservative_impl_trait)] +#![cfg_attr(stage0, feature(const_fn))] +#![cfg_attr(not(stage0), feature(const_atomic_bool_new))] +#![cfg_attr(not(stage0), feature(const_once_new))] + use rustc::dep_graph::WorkProduct; use syntax_pos::symbol::Symbol; @@ -61,13 +64,23 @@ extern crate gcc; // Used to locate MSVC, not gcc :) pub use base::trans_crate; -pub use back::symbol_names::provide; pub use metadata::LlvmMetadataLoader; pub use llvm_util::{init, target_features, print_version, print_passes, print, enable_llvm_debug}; +use std::rc::Rc; +use std::sync::Arc; + +use rustc::hir::def_id::{CrateNum, LOCAL_CRATE}; +use rustc::middle::cstore::{NativeLibrary, CrateSource, LibSource}; +use rustc::ty::maps::Providers; +use rustc::util::nodemap::{FxHashSet, FxHashMap}; + +mod diagnostics; + pub mod back { mod archive; + mod command; pub(crate) mod linker; pub mod link; mod lto; @@ -77,8 +90,6 @@ pub mod back { mod rpath; } -mod diagnostics; - mod abi; mod adt; mod allocator; @@ -216,7 +227,37 @@ pub struct CrateTranslation { pub link: rustc::middle::cstore::LinkMeta, pub metadata: rustc::middle::cstore::EncodedMetadata, windows_subsystem: Option, - linker_info: back::linker::LinkerInfo + linker_info: back::linker::LinkerInfo, + crate_info: CrateInfo, +} + +// Misc info we load from metadata to persist beyond the tcx +pub struct CrateInfo { + panic_runtime: Option, + compiler_builtins: Option, + profiler_runtime: Option, + sanitizer_runtime: Option, + is_no_builtins: FxHashSet, + native_libraries: FxHashMap>>, + crate_name: FxHashMap, + used_libraries: Rc>, + link_args: Rc>, + used_crate_source: FxHashMap>, + used_crates_static: Vec<(CrateNum, LibSource)>, + used_crates_dynamic: Vec<(CrateNum, LibSource)>, } __build_diagnostic_array! { librustc_trans, DIAGNOSTICS } + +pub fn provide_local(providers: &mut Providers) { + back::symbol_names::provide(providers); + base::provide(providers); + providers.exported_symbol_set = |tcx, cnum| { + assert_eq!(cnum, LOCAL_CRATE); + Arc::new(back::symbol_export::compute(tcx)) + }; +} + +pub fn provide_extern(providers: &mut Providers) { + back::symbol_names::provide(providers); +}