diff options
| author | bors <bors@rust-lang.org> | 2023-06-14 08:26:22 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2023-06-14 08:26:22 +0000 |
| commit | 3ed2a10d173d6c2e0232776af338ca7d080b1cd4 (patch) | |
| tree | 91c79ae2593fa4cdeb38755a057feefa2594856d /compiler/rustc_trait_selection/src/solve | |
| parent | 57c215b08e18054c64428e00a291b45dc690d9de (diff) | |
| parent | f4cf8f65a5e8e110c8c36469d31f16e8571e2c1a (diff) | |
| download | rust-3ed2a10d173d6c2e0232776af338ca7d080b1cd4.tar.gz rust-3ed2a10d173d6c2e0232776af338ca7d080b1cd4.zip | |
Auto merge of #110662 - bryangarza:safe-transmute-reference-types, r=compiler-errors
Safe Transmute: Enable handling references This patch enables support for references in Safe Transmute, by generating nested obligations during trait selection. Specifically, when we call `confirm_transmutability_candidate(...)`, we now recursively traverse the `rustc_transmute::Answer` tree and create obligations for all the `Answer` variants, some of which include multiple nested `Answer`s.
Diffstat (limited to 'compiler/rustc_trait_selection/src/solve')
| -rw-r--r-- | compiler/rustc_trait_selection/src/solve/eval_ctxt.rs | 8 |
1 files changed, 3 insertions, 5 deletions
diff --git a/compiler/rustc_trait_selection/src/solve/eval_ctxt.rs b/compiler/rustc_trait_selection/src/solve/eval_ctxt.rs index e01187bcd3c..a8a0e1ebfb4 100644 --- a/compiler/rustc_trait_selection/src/solve/eval_ctxt.rs +++ b/compiler/rustc_trait_selection/src/solve/eval_ctxt.rs @@ -709,6 +709,7 @@ impl<'tcx> EvalCtxt<'_, 'tcx> { scope: Ty<'tcx>, assume: rustc_transmute::Assume, ) -> Result<Certainty, NoSolution> { + use rustc_transmute::Answer; // FIXME(transmutability): This really should be returning nested goals for `Answer::If*` match rustc_transmute::TransmuteTypeEnv::new(self.infcx).is_transmutable( ObligationCause::dummy(), @@ -716,11 +717,8 @@ impl<'tcx> EvalCtxt<'_, 'tcx> { scope, assume, ) { - rustc_transmute::Answer::Yes => Ok(Certainty::Yes), - rustc_transmute::Answer::No(_) - | rustc_transmute::Answer::IfTransmutable { .. } - | rustc_transmute::Answer::IfAll(_) - | rustc_transmute::Answer::IfAny(_) => Err(NoSolution), + Answer::Yes => Ok(Certainty::Yes), + Answer::No(_) | Answer::If(_) => Err(NoSolution), } } |
