about summary refs log tree commit diff
path: root/compiler/rustc_data_structures
diff options
context:
space:
mode:
authorMichael Benfield <mbenfield@google.com>2022-03-08 19:07:01 +0000
committerMichael Benfield <mbenfield@google.com>2022-09-07 20:12:45 +0000
commitd7a750b50436fbd228b176f6438566625e235990 (patch)
tree4fc710101a6ad49617739201ebb72660e54b2e43 /compiler/rustc_data_structures
parent1a08b96a0bb7c170130144214787b4a46aa5eb17 (diff)
downloadrust-d7a750b50436fbd228b176f6438566625e235990.tar.gz
rust-d7a750b50436fbd228b176f6438566625e235990.zip
Use niche-filling optimization even when multiple variants have data.
Fixes #46213
Diffstat (limited to 'compiler/rustc_data_structures')
-rw-r--r--compiler/rustc_data_structures/src/obligation_forest/mod.rs4
1 files changed, 4 insertions, 0 deletions
diff --git a/compiler/rustc_data_structures/src/obligation_forest/mod.rs b/compiler/rustc_data_structures/src/obligation_forest/mod.rs
index 07a96dd7dbb..e351b650a16 100644
--- a/compiler/rustc_data_structures/src/obligation_forest/mod.rs
+++ b/compiler/rustc_data_structures/src/obligation_forest/mod.rs
@@ -117,6 +117,10 @@ pub trait ObligationProcessor {
 }
 
 /// The result type used by `process_obligation`.
+// `repr(C)` to inhibit the niche filling optimization. Otherwise, the `match` appearing
+// in `process_obligations` is significantly slower, which can substantially affect
+// benchmarks like `rustc-perf`'s inflate and keccak.
+#[repr(C)]
 #[derive(Debug)]
 pub enum ProcessResult<O, E> {
     Unchanged,