diff options
| author | Camille GILLOT <gillot.camille@gmail.com> | 2023-10-10 15:42:23 +0000 |
|---|---|---|
| committer | Camille GILLOT <gillot.camille@gmail.com> | 2023-10-25 06:46:48 +0000 |
| commit | ff6812cd20da84f84b2cb8540110d08bd54e8060 (patch) | |
| tree | 688aae7ca58bf6fae0893502892a35068cfa4c8e /compiler/rustc_const_eval | |
| parent | ebc87bf5672fd7f7a899599d2ee5a219e1d07d07 (diff) | |
| download | rust-ff6812cd20da84f84b2cb8540110d08bd54e8060.tar.gz rust-ff6812cd20da84f84b2cb8540110d08bd54e8060.zip | |
Move provenance checks out of interning method.
Diffstat (limited to 'compiler/rustc_const_eval')
| -rw-r--r-- | compiler/rustc_const_eval/src/interpret/intern.rs | 14 | ||||
| -rw-r--r-- | compiler/rustc_const_eval/src/interpret/memory.rs | 2 |
2 files changed, 3 insertions, 13 deletions
diff --git a/compiler/rustc_const_eval/src/interpret/intern.rs b/compiler/rustc_const_eval/src/interpret/intern.rs index 4cac00c1be2..0d21ef7f327 100644 --- a/compiler/rustc_const_eval/src/interpret/intern.rs +++ b/compiler/rustc_const_eval/src/interpret/intern.rs @@ -450,7 +450,7 @@ pub fn intern_const_alloc_recursive< Ok(()) } -/// Intern `ret`, checking it references no other allocation. +/// Intern `ret`. This function assumes that `ret` references no other allocation. #[instrument(level = "debug", skip(ecx))] pub fn intern_const_alloc_for_constprop< 'mir, @@ -461,17 +461,7 @@ pub fn intern_const_alloc_for_constprop< ecx: &mut InterpCx<'mir, 'tcx, M>, ret: &MPlaceTy<'tcx>, ) -> InterpResult<'tcx, ()> { - let Some((size, _align)) = ecx.size_and_align_of_mplace(ret)? else { - throw_inval!(ConstPropNonsense) - }; - - let alloc_ref = ecx.get_ptr_alloc(ret.ptr(), size)?.unwrap(); - // Do not try interning a value that contains provenance. - if alloc_ref.has_provenance() { - throw_inval!(ConstPropNonsense) - } - - // remove allocation + // Move allocation to `tcx`. let alloc_id = ret.ptr().provenance.unwrap(); let Some((_, mut alloc)) = ecx.memory.alloc_map.remove(&alloc_id) else { // Pointer not found in local memory map. It is either a pointer to the global diff --git a/compiler/rustc_const_eval/src/interpret/memory.rs b/compiler/rustc_const_eval/src/interpret/memory.rs index d7c7e279849..16905e93bf1 100644 --- a/compiler/rustc_const_eval/src/interpret/memory.rs +++ b/compiler/rustc_const_eval/src/interpret/memory.rs @@ -1011,7 +1011,7 @@ impl<'tcx, 'a, Prov: Provenance, Extra, Bytes: AllocBytes> AllocRef<'a, 'tcx, Pr } /// Returns whether the allocation has provenance anywhere in the range of the `AllocRef`. - pub(crate) fn has_provenance(&self) -> bool { + pub fn has_provenance(&self) -> bool { !self.alloc.provenance().range_empty(self.range, &self.tcx) } } |
