about summary refs log tree commit diff
diff options
context:
space:
mode:
authorMazdak Farrokhzad <twingoow@gmail.com>2019-04-28 14:17:10 +0200
committerGitHub <noreply@github.com>2019-04-28 14:17:10 +0200
commit4711051b83f9c54d3cb6203cdf8a17c38d99ab7f (patch)
tree706f00bff77a9077d07fd2baee259faa75d4246c
parent95abeb0705fd0e5c4a14cfa900b90b9a5de34577 (diff)
parent955f283e11dec628a988e23100f21ab92329b3bd (diff)
downloadrust-4711051b83f9c54d3cb6203cdf8a17c38d99ab7f.tar.gz
rust-4711051b83f9c54d3cb6203cdf8a17c38d99ab7f.zip
Rollup merge of #60270 - alexcrichton:metadata-multi-cgu, r=oli-obk
rustc: Flag metadata compatible with multiple CGUs

It looks like the `OutputType::Metadata` kind in the compiler was
misclassified in #38571 long ago by accident as incompatible with
codegen units and a single output file. This means that if you emit both
a linkable artifact and metadata it silently turns off multiple codegen
units unintentionally!

This commit corrects the situation to ensure that if `--emit metadata`
is used it doesn't implicitly disable multiple codegen units. This will
ensure we don't accidentally regress compiler performance when striving
to implement pipelined compilation!
-rw-r--r--src/librustc/session/config.rs5
1 files changed, 2 insertions, 3 deletions
diff --git a/src/librustc/session/config.rs b/src/librustc/session/config.rs
index 60d5340613c..e6203c94bfa 100644
--- a/src/librustc/session/config.rs
+++ b/src/librustc/session/config.rs
@@ -155,13 +155,12 @@ impl_stable_hash_via_hash!(OutputType);
 impl OutputType {
     fn is_compatible_with_codegen_units_and_single_output_file(&self) -> bool {
         match *self {
-            OutputType::Exe | OutputType::DepInfo => true,
+            OutputType::Exe | OutputType::DepInfo | OutputType::Metadata => true,
             OutputType::Bitcode
             | OutputType::Assembly
             | OutputType::LlvmAssembly
             | OutputType::Mir
-            | OutputType::Object
-            | OutputType::Metadata => false,
+            | OutputType::Object => false,
         }
     }