diff options
| author | bors <bors@rust-lang.org> | 2021-01-20 07:15:40 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2021-01-20 07:15:40 +0000 |
| commit | a4cbb44ae2c80545db957763b502dc7f6ea22085 (patch) | |
| tree | 3281c73ef832c28b327c16fb23c8c6e2e0d70435 | |
| parent | e05409a02c6e73a3dea6da98798468db2910ca59 (diff) | |
| parent | f9275e1092232fcb8ec117fc4acca990f57cba15 (diff) | |
| download | rust-a4cbb44ae2c80545db957763b502dc7f6ea22085.tar.gz rust-a4cbb44ae2c80545db957763b502dc7f6ea22085.zip | |
Auto merge of #81118 - ojeda:metadata-obj, r=nagisa
Skip linking if it is not required This allows to use `--emit=metadata,obj` and other metadata + non-link combinations. Fixes #81117.
| -rw-r--r-- | compiler/rustc_codegen_ssa/src/back/link.rs | 6 | ||||
| -rw-r--r-- | compiler/rustc_session/src/config.rs | 14 | ||||
| -rw-r--r-- | src/test/ui/emit-metadata-obj.rs | 7 |
3 files changed, 23 insertions, 4 deletions
diff --git a/compiler/rustc_codegen_ssa/src/back/link.rs b/compiler/rustc_codegen_ssa/src/back/link.rs index ff77db9eab8..e51904f308d 100644 --- a/compiler/rustc_codegen_ssa/src/back/link.rs +++ b/compiler/rustc_codegen_ssa/src/back/link.rs @@ -74,7 +74,7 @@ pub fn link_binary<'a, B: ArchiveBuilder<'a>>( } }); - if outputs.outputs.should_codegen() { + if outputs.outputs.should_link() { let tmpdir = TempFileBuilder::new() .prefix("rustc") .tempdir() @@ -123,9 +123,7 @@ pub fn link_binary<'a, B: ArchiveBuilder<'a>>( } }; - if sess.opts.output_types.should_codegen() - && !preserve_objects_for_their_debuginfo(sess) - { + if sess.opts.output_types.should_link() && !preserve_objects_for_their_debuginfo(sess) { for module in &codegen_results.modules { remove_temps_from_module(module); } diff --git a/compiler/rustc_session/src/config.rs b/compiler/rustc_session/src/config.rs index 0cafdec1495..49833601c9e 100644 --- a/compiler/rustc_session/src/config.rs +++ b/compiler/rustc_session/src/config.rs @@ -403,6 +403,20 @@ impl OutputTypes { OutputType::Metadata | OutputType::DepInfo => false, }) } + + // Returns `true` if any of the output types require linking. + pub fn should_link(&self) -> bool { + self.0.keys().any(|k| match *k { + OutputType::Bitcode + | OutputType::Assembly + | OutputType::LlvmAssembly + | OutputType::Mir + | OutputType::Metadata + | OutputType::Object + | OutputType::DepInfo => false, + OutputType::Exe => true, + }) + } } /// Use tree-based collections to cheaply get a deterministic `Hash` implementation. diff --git a/src/test/ui/emit-metadata-obj.rs b/src/test/ui/emit-metadata-obj.rs new file mode 100644 index 00000000000..334c7cc5b81 --- /dev/null +++ b/src/test/ui/emit-metadata-obj.rs @@ -0,0 +1,7 @@ +// compile-flags:--emit=metadata,obj +// build-pass + +// A test for the emission of metadata + obj and other metadata + non-link +// combinations. See issue #81117. + +fn main() {} |
