diff options
| author | Matt Hammerly <hammerly.matt@gmail.com> | 2023-03-13 20:55:43 -0700 |
|---|---|---|
| committer | Matt Hammerly <hammerly.matt@gmail.com> | 2023-05-05 13:02:43 -0700 |
| commit | 812f2d75e11a1acd52a4bfb201247c34a76c8e49 (patch) | |
| tree | ff6745a42659f97c626bd0f7efd9e96b9f72008a /compiler/rustc_metadata/src | |
| parent | 4b94c232192b0fa0314b5afa18e366356e210c4c (diff) | |
| download | rust-812f2d75e11a1acd52a4bfb201247c34a76c8e49.tar.gz rust-812f2d75e11a1acd52a4bfb201247c34a76c8e49.zip | |
add "force" option to --extern
Diffstat (limited to 'compiler/rustc_metadata/src')
| -rw-r--r-- | compiler/rustc_metadata/src/creader.rs | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/compiler/rustc_metadata/src/creader.rs b/compiler/rustc_metadata/src/creader.rs index 01b69966ca9..e6e7d25773e 100644 --- a/compiler/rustc_metadata/src/creader.rs +++ b/compiler/rustc_metadata/src/creader.rs @@ -865,6 +865,17 @@ impl<'a, 'tcx> CrateLoader<'a, 'tcx> { } } + fn inject_forced_externs(&mut self) { + for (name, entry) in self.sess.opts.externs.iter() { + if entry.force { + let name_interned = Symbol::intern(name); + if !self.used_extern_options.contains(&name_interned) { + self.resolve_crate(name_interned, DUMMY_SP, CrateDepKind::Explicit); + } + } + } + } + fn inject_dependency_if( &self, krate: CrateNum, @@ -913,7 +924,7 @@ impl<'a, 'tcx> CrateLoader<'a, 'tcx> { // Don't worry about pathless `--extern foo` sysroot references continue; } - if entry.nounused_dep { + if entry.nounused_dep || entry.force { // We're not worried about this one continue; } @@ -942,6 +953,7 @@ impl<'a, 'tcx> CrateLoader<'a, 'tcx> { } pub fn postprocess(&mut self, krate: &ast::Crate) { + self.inject_forced_externs(); self.inject_profiler_runtime(krate); self.inject_allocator_crate(krate); self.inject_panic_runtime(krate); |
