diff options
| author | bors <bors@rust-lang.org> | 2025-04-14 19:54:27 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2025-04-14 19:54:27 +0000 |
| commit | 2da29dbe8fe23df1c7c4ab1d8740ca3c32b15526 (patch) | |
| tree | 5dbc8160d1ee8024ac2a47ac8932312cd8489560 /compiler/rustc_middle/src | |
| parent | 990039ec53d5bffe0ec77391e00f0e5be05924e8 (diff) | |
| parent | 72d17bfebbf5463dac1a7eb71c513b151b523e1f (diff) | |
| download | rust-2da29dbe8fe23df1c7c4ab1d8740ca3c32b15526.tar.gz rust-2da29dbe8fe23df1c7c4ab1d8740ca3c32b15526.zip | |
Auto merge of #139577 - davidtwco:sizedness-go-vroom, r=oli-obk
re-use `Sized` fast-path There's an existing fast path for the `type_op_prove_predicate` predicate, checking for trivially `Sized` types, which can be re-used when evaluating obligations within queries. This should improve performance and was found to be beneficial in #137944. r? types
Diffstat (limited to 'compiler/rustc_middle/src')
| -rw-r--r-- | compiler/rustc_middle/src/ty/sty.rs | 14 |
1 files changed, 7 insertions, 7 deletions
diff --git a/compiler/rustc_middle/src/ty/sty.rs b/compiler/rustc_middle/src/ty/sty.rs index d9a65ae57a0..9984fb085ef 100644 --- a/compiler/rustc_middle/src/ty/sty.rs +++ b/compiler/rustc_middle/src/ty/sty.rs @@ -1873,14 +1873,14 @@ impl<'tcx> Ty<'tcx> { /// Fast path helper for testing if a type is `Sized`. /// - /// Returning true means the type is known to be sized. Returning - /// `false` means nothing -- could be sized, might not be. + /// Returning true means the type is known to implement `Sized`. Returning `false` means + /// nothing -- could be sized, might not be. /// - /// Note that we could never rely on the fact that a type such as `[_]` is - /// trivially `!Sized` because we could be in a type environment with a - /// bound such as `[_]: Copy`. A function with such a bound obviously never - /// can be called, but that doesn't mean it shouldn't typecheck. This is why - /// this method doesn't return `Option<bool>`. + /// Note that we could never rely on the fact that a type such as `[_]` is trivially `!Sized` + /// because we could be in a type environment with a bound such as `[_]: Copy`. A function with + /// such a bound obviously never can be called, but that doesn't mean it shouldn't typecheck. + /// This is why this method doesn't return `Option<bool>`. + #[instrument(skip(tcx), level = "debug")] pub fn is_trivially_sized(self, tcx: TyCtxt<'tcx>) -> bool { match self.kind() { ty::Infer(ty::IntVar(_) | ty::FloatVar(_)) |
