diff options
| author | Michael Goulet <michael@errs.io> | 2024-11-21 23:20:59 +0000 |
|---|---|---|
| committer | Michael Goulet <michael@errs.io> | 2024-11-22 17:01:02 +0000 |
| commit | 69a38de97755780a5d78c655da2c953ba58ae18f (patch) | |
| tree | f2bd84ef4fa96470fa31daee440bea8926bb8f61 /compiler/rustc_const_eval | |
| parent | af0d566e76a709caa2a89123202f583cbcc877e2 (diff) | |
Check drop is trivial before checking ty needs drop
Diffstat (limited to 'compiler/rustc_const_eval')
| -rw-r--r-- | compiler/rustc_const_eval/src/check_consts/qualifs.rs | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/compiler/rustc_const_eval/src/check_consts/qualifs.rs b/compiler/rustc_const_eval/src/check_consts/qualifs.rs index accce883e39..39eb1a7db78 100644 --- a/compiler/rustc_const_eval/src/check_consts/qualifs.rs +++ b/compiler/rustc_const_eval/src/check_consts/qualifs.rs @@ -175,6 +175,11 @@ impl Qualif for NeedsNonConstDrop { return false; } + // If this doesn't need drop at all, then don't select `~const Destruct`. + if !ty.needs_drop(cx.tcx, cx.typing_env) { + return false; + } + // We check that the type is `~const Destruct` since that will verify that // the type is both `~const Drop` (if a drop impl exists for the adt), *and* // that the components of this type are also `~const Destruct`. This @@ -203,7 +208,7 @@ impl Qualif for NeedsNonConstDrop { // in its value since: // 1. The destructor may have `~const` bounds which are not present on the type. // Someone needs to check that those are satisfied. - // While this could be done instead satisfied by checking that the `~const Drop` + // While this could be instead satisfied by checking that the `~const Drop` // impl holds (i.e. replicating part of the `in_any_value_of_ty` logic above), // even in this case, we have another problem, which is, // 2. The destructor may *modify* the operand being dropped, so even if we |
