about summary refs log tree commit diff
diff options
context:
space:
mode:
authorAli MJ Al-Nasrawy <alimjalnasrawy@gmail.com>2023-12-06 07:22:44 +0000
committerAli MJ Al-Nasrawy <alimjalnasrawy@gmail.com>2023-12-13 14:57:52 +0000
commita1459c3fca5f9b35918d576a7bf79ce15d279719 (patch)
tree68fab43d097c3e3dce8677efb157ef92b5528453
parent85338197d402e0d94f9113bef4e3343921f3391d (diff)
downloadrust-a1459c3fca5f9b35918d576a7bf79ce15d279719.tar.gz
rust-a1459c3fca5f9b35918d576a7bf79ce15d279719.zip
fix small perf regressions
-rw-r--r--compiler/rustc_middle/src/infer/canonical.rs12
1 files changed, 11 insertions, 1 deletions
diff --git a/compiler/rustc_middle/src/infer/canonical.rs b/compiler/rustc_middle/src/infer/canonical.rs
index c231a0f0b64..232c84158ef 100644
--- a/compiler/rustc_middle/src/infer/canonical.rs
+++ b/compiler/rustc_middle/src/infer/canonical.rs
@@ -34,7 +34,7 @@ use std::ops::Index;
 use crate::infer::MemberConstraint;
 use crate::mir::ConstraintCategory;
 use crate::ty::GenericArg;
-use crate::ty::{self, BoundVar, List, Region, Ty, TyCtxt};
+use crate::ty::{self, BoundVar, List, Region, Ty, TyCtxt, TypeFlags, TypeVisitableExt};
 
 pub type Canonical<'tcx, V> = IrCanonical<TyCtxt<'tcx>, V>;
 
@@ -315,6 +315,16 @@ impl<'tcx> CanonicalParamEnvCache<'tcx> {
             &mut OriginalQueryValues<'tcx>,
         ) -> Canonical<'tcx, ty::ParamEnv<'tcx>>,
     ) -> Canonical<'tcx, ty::ParamEnv<'tcx>> {
+        if !key.has_type_flags(
+            TypeFlags::HAS_INFER | TypeFlags::HAS_PLACEHOLDER | TypeFlags::HAS_FREE_REGIONS,
+        ) {
+            return Canonical {
+                max_universe: ty::UniverseIndex::ROOT,
+                variables: List::empty(),
+                value: key,
+            };
+        }
+
         assert_eq!(state.var_values.len(), 0);
         assert_eq!(state.universe_map.len(), 1);
         debug_assert_eq!(&*state.universe_map, &[ty::UniverseIndex::ROOT]);