diff options
| author | Alex Crichton <alex@alexcrichton.com> | 2017-08-31 08:07:39 -0700 |
|---|---|---|
| committer | Alex Crichton <alex@alexcrichton.com> | 2017-09-05 07:37:39 -0700 |
| commit | 43ae38019167ef02e53cfc202df8b6be0f79c32d (patch) | |
| tree | df5a04c15b5911e2f71c2318946cb5e19ded157b /src/librustc_trans | |
| parent | fd61fa5aef171e27209f1fad6388f730a64d61a2 (diff) | |
| download | rust-43ae38019167ef02e53cfc202df8b6be0f79c32d.tar.gz rust-43ae38019167ef02e53cfc202df8b6be0f79c32d.zip | |
rustc: Flag some CrateStore methods as "untracked"
The main use of `CrateStore` *before* the `TyCtxt` is created is during
resolution, but we want to be sure that any methods used before resolution are
not used after the `TyCtxt` is created. This commit starts moving the methods
used by resolve to all be named `{name}_untracked` where the rest of the
compiler uses just `{name}` as a query.
During this transition a number of new queries were added to account for
post-resolve usage of these methods.
Diffstat (limited to 'src/librustc_trans')
| -rw-r--r-- | src/librustc_trans/back/link.rs | 7 | ||||
| -rw-r--r-- | src/librustc_trans/back/write.rs | 2 | ||||
| -rw-r--r-- | src/librustc_trans/base.rs | 2 | ||||
| -rw-r--r-- | src/librustc_trans/lib.rs | 1 |
4 files changed, 8 insertions, 4 deletions
diff --git a/src/librustc_trans/back/link.rs b/src/librustc_trans/back/link.rs index d5d980da39f..6be7968dba4 100644 --- a/src/librustc_trans/back/link.rs +++ b/src/librustc_trans/back/link.rs @@ -216,6 +216,7 @@ fn filename_for_metadata(sess: &Session, crate_name: &str, outputs: &OutputFilen } pub fn each_linked_rlib(sess: &Session, + info: &CrateInfo, f: &mut FnMut(CrateNum, &Path)) -> Result<(), String> { let crates = sess.cstore.used_crates(LinkagePreference::RequireStatic).into_iter(); let fmts = sess.dependency_formats.borrow(); @@ -234,7 +235,7 @@ pub fn each_linked_rlib(sess: &Session, Some(_) => {} None => return Err(format!("could not find formats for rlibs")) } - let name = sess.cstore.crate_name(cnum).clone(); + let name = &info.crate_name[&cnum]; let path = match path { LibSource::Some(p) => p, LibSource::MetadataOnly => { @@ -611,8 +612,8 @@ fn link_staticlib(sess: &Session, tempdir); let mut all_native_libs = vec![]; - let res = each_linked_rlib(sess, &mut |cnum, path| { - let name = sess.cstore.crate_name(cnum); + let res = each_linked_rlib(sess, &trans.crate_info, &mut |cnum, path| { + let name = &trans.crate_info.crate_name[&cnum]; let native_libs = &trans.crate_info.native_libraries[&cnum]; // Here when we include the rlib into our staticlib we need to make a diff --git a/src/librustc_trans/back/write.rs b/src/librustc_trans/back/write.rs index ed7a745e440..72e1fc34789 100644 --- a/src/librustc_trans/back/write.rs +++ b/src/librustc_trans/back/write.rs @@ -1130,7 +1130,7 @@ fn start_executing_work(sess: &Session, }).expect("failed to spawn helper thread"); let mut each_linked_rlib_for_lto = Vec::new(); - drop(link::each_linked_rlib(sess, &mut |cnum, path| { + drop(link::each_linked_rlib(sess, crate_info, &mut |cnum, path| { if link::ignored_for_lto(crate_info, cnum) { return } diff --git a/src/librustc_trans/base.rs b/src/librustc_trans/base.rs index 28929afc281..687d3cff48e 100644 --- a/src/librustc_trans/base.rs +++ b/src/librustc_trans/base.rs @@ -1518,10 +1518,12 @@ impl CrateInfo { native_libraries: FxHashMap(), used_libraries: tcx.native_libraries(LOCAL_CRATE), link_args: tcx.link_args(LOCAL_CRATE), + crate_name: FxHashMap(), }; for cnum in tcx.sess.cstore.crates() { info.native_libraries.insert(cnum, tcx.native_libraries(cnum)); + info.crate_name.insert(cnum, tcx.crate_name(cnum).to_string()); if tcx.is_panic_runtime(cnum) { info.panic_runtime = Some(cnum); } diff --git a/src/librustc_trans/lib.rs b/src/librustc_trans/lib.rs index babc030b59c..588141290f1 100644 --- a/src/librustc_trans/lib.rs +++ b/src/librustc_trans/lib.rs @@ -234,6 +234,7 @@ pub struct CrateInfo { sanitizer_runtime: Option<CrateNum>, is_no_builtins: FxHashSet<CrateNum>, native_libraries: FxHashMap<CrateNum, Rc<Vec<NativeLibrary>>>, + crate_name: FxHashMap<CrateNum, String>, used_libraries: Rc<Vec<NativeLibrary>>, link_args: Rc<Vec<String>>, } |
