interpret: get rid of 'mir lifetime everywhere · rust-lang/rust@e8379c9 (original) (raw)
`@@ -164,8 +164,7 @@ impl<K: Hash + Eq, V> interpret::AllocMap<K, V> for FxIndexMap<K, V> {
`
164
164
`}
`
165
165
`}
`
166
166
``
167
``
`-
pub(crate) type CompileTimeEvalContext<'mir, 'tcx> =
`
168
``
`-
InterpCx<'mir, 'tcx, CompileTimeInterpreter<'tcx>>;
`
``
167
`+
pub(crate) type CompileTimeEvalContext<'tcx> = InterpCx<'tcx, CompileTimeInterpreter<'tcx>>;
`
169
168
``
170
169
`#[derive(Debug, PartialEq, Eq, Copy, Clone)]
`
171
170
`pub enum MemoryKind {
`
`@@ -197,7 +196,7 @@ impl interpret::MayLeak for ! {
`
197
196
`}
`
198
197
`}
`
199
198
``
200
``
`-
impl<'mir, 'tcx: 'mir> CompileTimeEvalContext<'mir, 'tcx> {
`
``
199
`+
impl<'tcx> CompileTimeEvalContext<'tcx> {
`
201
200
`fn location_triple_for_span(&self, span: Span) -> (Symbol, u32, u32) {
`
202
201
`let topmost = span.ctxt().outer_expn().expansion_cause().unwrap_or(span);
`
203
202
`let caller = self.tcx.sess.source_map().lookup_char_pos(topmost.lo());
`
`@@ -371,25 +370,25 @@ impl<'mir, 'tcx: 'mir> CompileTimeEvalContext<'mir, 'tcx> {
`
371
370
`}
`
372
371
`}
`
373
372
``
374
``
`-
impl<'mir, 'tcx: 'mir> interpret::Machine<'mir, 'tcx> for CompileTimeInterpreter<'tcx> {
`
375
``
`-
compile_time_machine!(<'mir, 'tcx>);
`
``
373
`+
impl<'tcx> interpret::Machine<'tcx> for CompileTimeInterpreter<'tcx> {
`
``
374
`+
compile_time_machine!(<'tcx>);
`
376
375
``
377
376
`type MemoryKind = MemoryKind;
`
378
377
``
379
378
`const PANIC_ON_ALLOC_FAIL: bool = false; // will be raised as a proper error
`
380
379
``
381
380
`#[inline(always)]
`
382
``
`-
fn enforce_alignment(ecx: &InterpCx<'mir, 'tcx, Self>) -> bool {
`
``
381
`+
fn enforce_alignment(ecx: &InterpCx<'tcx, Self>) -> bool {
`
383
382
`matches!(ecx.machine.check_alignment, CheckAlignment::Error)
`
384
383
`}
`
385
384
``
386
385
`#[inline(always)]
`
387
``
`-
fn enforce_validity(ecx: &InterpCx<'mir, 'tcx, Self>, layout: TyAndLayout<'tcx>) -> bool {
`
``
386
`+
fn enforce_validity(ecx: &InterpCx<'tcx, Self>, layout: TyAndLayout<'tcx>) -> bool {
`
388
387
` ecx.tcx.sess.opts.unstable_opts.extra_const_ub_checks || layout.abi.is_uninhabited()
`
389
388
`}
`
390
389
``
391
390
`fn load_mir(
`
392
``
`-
ecx: &InterpCx<'mir, 'tcx, Self>,
`
``
391
`+
ecx: &InterpCx<'tcx, Self>,
`
393
392
`instance: ty::InstanceDef<'tcx>,
`
394
393
`) -> InterpResult<'tcx, &'tcx mir::Body<'tcx>> {
`
395
394
`match instance {
`
`@@ -410,7 +409,7 @@ impl<'mir, 'tcx: 'mir> interpret::Machine<'mir, 'tcx> for CompileTimeInterpreter
`
410
409
`}
`
411
410
``
412
411
`fn find_mir_or_eval_fn(
`
413
``
`-
ecx: &mut InterpCx<'mir, 'tcx, Self>,
`
``
412
`+
ecx: &mut InterpCx<'tcx, Self>,
`
414
413
`orig_instance: ty::Instance<'tcx>,
`
415
414
`_abi: CallAbi,
`
416
415
`args: &[FnArg<'tcx>],
`
`@@ -448,15 +447,15 @@ impl<'mir, 'tcx: 'mir> interpret::Machine<'mir, 'tcx> for CompileTimeInterpreter
`
448
447
`Ok(Some((ecx.load_mir(instance.def, None)?, orig_instance)))
`
449
448
`}
`
450
449
``
451
``
`-
fn panic_nounwind(ecx: &mut InterpCx<'mir, 'tcx, Self>, msg: &str) -> InterpResult<'tcx> {
`
``
450
`+
fn panic_nounwind(ecx: &mut InterpCx<'tcx, Self>, msg: &str) -> InterpResult<'tcx> {
`
452
451
`let msg = Symbol::intern(msg);
`
453
452
`let span = ecx.find_closest_untracked_caller_location();
`
454
453
`let (file, line, col) = ecx.location_triple_for_span(span);
`
455
454
`Err(ConstEvalErrKind::Panic { msg, file, line, col }.into())
`
456
455
`}
`
457
456
``
458
457
`fn call_intrinsic(
`
459
``
`-
ecx: &mut InterpCx<'mir, 'tcx, Self>,
`
``
458
`+
ecx: &mut InterpCx<'tcx, Self>,
`
460
459
`instance: ty::Instance<'tcx>,
`
461
460
`args: &[OpTy<'tcx>],
`
462
461
`dest: &MPlaceTy<'tcx, Self::Provenance>,
`
`@@ -555,7 +554,7 @@ impl<'mir, 'tcx: 'mir> interpret::Machine<'mir, 'tcx> for CompileTimeInterpreter
`
555
554
`}
`
556
555
``
557
556
`fn assert_panic(
`
558
``
`-
ecx: &mut InterpCx<'mir, 'tcx, Self>,
`
``
557
`+
ecx: &mut InterpCx<'tcx, Self>,
`
559
558
`msg: &AssertMessage<'tcx>,
`
560
559
`_unwind: mir::UnwindAction,
`
561
560
`) -> InterpResult<'tcx> {
`
`@@ -586,15 +585,15 @@ impl<'mir, 'tcx: 'mir> interpret::Machine<'mir, 'tcx> for CompileTimeInterpreter
`
586
585
`}
`
587
586
``
588
587
`fn binary_ptr_op(
`
589
``
`-
_ecx: &InterpCx<'mir, 'tcx, Self>,
`
``
588
`+
_ecx: &InterpCx<'tcx, Self>,
`
590
589
`_bin_op: mir::BinOp,
`
591
590
`_left: &ImmTy<'tcx>,
`
592
591
`_right: &ImmTy<'tcx>,
`
593
592
`) -> InterpResult<'tcx, ImmTy<'tcx>> {
`
594
593
`throw_unsup_format!("pointer arithmetic or comparison is not supported at compile-time");
`
595
594
`}
`
596
595
``
597
``
`-
fn increment_const_eval_counter(ecx: &mut InterpCx<'mir, 'tcx, Self>) -> InterpResult<'tcx> {
`
``
596
`+
fn increment_const_eval_counter(ecx: &mut InterpCx<'tcx, Self>) -> InterpResult<'tcx> {
`
598
597
`` // The step limit has already been hit in a previous call to increment_const_eval_counter
.
``
599
598
``
600
599
`if let Some(new_steps) = ecx.machine.num_evaluated_steps.checked_add(1) {
`
`@@ -650,14 +649,14 @@ impl<'mir, 'tcx: 'mir> interpret::Machine<'mir, 'tcx> for CompileTimeInterpreter
`
650
649
`}
`
651
650
``
652
651
`#[inline(always)]
`
653
``
`-
fn expose_ptr(_ecx: &mut InterpCx<'mir, 'tcx, Self>, _ptr: Pointer) -> InterpResult<'tcx> {
`
``
652
`+
fn expose_ptr(_ecx: &mut InterpCx<'tcx, Self>, _ptr: Pointer) -> InterpResult<'tcx> {
`
654
653
`// This is only reachable with -Zunleash-the-miri-inside-of-you.
`
655
654
`throw_unsup_format!("exposing pointers is not possible at compile-time")
`
656
655
`}
`
657
656
``
658
657
`#[inline(always)]
`
659
658
`fn init_frame_extra(
`
660
``
`-
ecx: &mut InterpCx<'mir, 'tcx, Self>,
`
``
659
`+
ecx: &mut InterpCx<'tcx, Self>,
`
661
660
`frame: Frame<'tcx>,
`
662
661
`) -> InterpResult<'tcx, Frame<'tcx>> {
`
663
662
`// Enforce stack size limit. Add 1 because this is run before the new frame is pushed.
`
`@@ -670,14 +669,14 @@ impl<'mir, 'tcx: 'mir> interpret::Machine<'mir, 'tcx> for CompileTimeInterpreter
`
670
669
``
671
670
`#[inline(always)]
`
672
671
`fn stack<'a>(
`
673
``
`-
ecx: &'a InterpCx<'mir, 'tcx, Self>,
`
``
672
`+
ecx: &'a InterpCx<'tcx, Self>,
`
674
673
`) -> &'a [Frame<'tcx, Self::Provenance, Self::FrameExtra>] {
`
675
674
`&ecx.machine.stack
`
676
675
`}
`
677
676
``
678
677
`#[inline(always)]
`
679
678
`fn stack_mut<'a>(
`
680
``
`-
ecx: &'a mut InterpCx<'mir, 'tcx, Self>,
`
``
679
`+
ecx: &'a mut InterpCx<'tcx, Self>,
`
681
680
`) -> &'a mut Vec<Frame<'tcx, Self::Provenance, Self::FrameExtra>> {
`
682
681
`&mut ecx.machine.stack
`
683
682
`}
`
`@@ -715,7 +714,7 @@ impl<'mir, 'tcx: 'mir> interpret::Machine<'mir, 'tcx> for CompileTimeInterpreter
`
715
714
`}
`
716
715
``
717
716
`fn retag_ptr_value(
`
718
``
`-
ecx: &mut InterpCx<'mir, 'tcx, Self>,
`
``
717
`+
ecx: &mut InterpCx<'tcx, Self>,
`
719
718
`_kind: mir::RetagKind,
`
720
719
`val: &ImmTy<'tcx, CtfeProvenance>,
`
721
720
`) -> InterpResult<'tcx, ImmTy<'tcx, CtfeProvenance>> {
`
`@@ -756,10 +755,7 @@ impl<'mir, 'tcx: 'mir> interpret::Machine<'mir, 'tcx> for CompileTimeInterpreter
`
756
755
`Ok(())
`
757
756
`}
`
758
757
``
759
``
`-
fn before_alloc_read(
`
760
``
`-
ecx: &InterpCx<'mir, 'tcx, Self>,
`
761
``
`-
alloc_id: AllocId,
`
762
``
`-
) -> InterpResult<'tcx> {
`
``
758
`+
fn before_alloc_read(ecx: &InterpCx<'tcx, Self>, alloc_id: AllocId) -> InterpResult<'tcx> {
`
763
759
`// Check if this is the currently evaluated static.
`
764
760
`if Some(alloc_id) == ecx.machine.static_root_ids.map(|(id, _)| id) {
`
765
761
`return Err(ConstEvalErrKind::RecursiveStatic.into());
`