]> git.lizzy.rs Git - rust.git/commitdiff
Rustup for panic changes
authorAaron Hill <aa1ronham@gmail.com>
Tue, 12 Nov 2019 15:19:13 +0000 (10:19 -0500)
committerAaron Hill <aa1ronham@gmail.com>
Wed, 13 Nov 2019 00:52:15 +0000 (19:52 -0500)
This gets Miri working again, but doesn't actually implement unwinding

src/eval.rs
src/machine.rs
src/shims/foreign_items.rs
src/shims/intrinsics.rs
src/shims/mod.rs

index b09fb5918c874755720e66e0f5fdf327d1cba622..65f6d5dd027185d991025afd3dc2c7333181f3c3 100644 (file)
@@ -213,7 +213,7 @@ pub fn eval_main<'tcx>(tcx: TyCtxt<'tcx>, main_id: DefId, config: MiriConfig) {
             };
             e.print_backtrace();
             if let Some(frame) = ecx.stack().last() {
-                let block = &frame.body.basic_blocks()[frame.block];
+                let block = &frame.body.basic_blocks()[frame.block.unwrap()];
                 let span = if frame.stmt < block.statements.len() {
                     block.statements[frame.stmt].source_info.span
                 } else {
index c76cc2e568f4f35465a014534b444c41344c8cad..20abfdcf54bb540c3aea8bbaa5e949bde9686f85 100644 (file)
@@ -173,6 +173,7 @@ fn find_fn(
         args: &[OpTy<'tcx, Tag>],
         dest: Option<PlaceTy<'tcx, Tag>>,
         ret: Option<mir::BasicBlock>,
+        _unwind: Option<mir::BasicBlock>,
     ) -> InterpResult<'tcx, Option<&'mir mir::Body<'tcx>>> {
         ecx.find_fn(instance, args, dest, ret)
     }
@@ -194,8 +195,14 @@ fn call_intrinsic(
         span: Span,
         instance: ty::Instance<'tcx>,
         args: &[OpTy<'tcx, Tag>],
-        dest: PlaceTy<'tcx, Tag>,
+        dest: Option<PlaceTy<'tcx, Tag>>,
+        _ret: Option<mir::BasicBlock>,
+        _unwind: Option<mir::BasicBlock>
     ) -> InterpResult<'tcx> {
+        let dest = match dest {
+            Some(dest) => dest,
+            None => throw_ub!(Unreachable)
+        };
         ecx.call_intrinsic(span, instance, args, dest)
     }
 
@@ -353,13 +360,15 @@ fn stack_push(
     fn stack_pop(
         ecx: &mut InterpCx<'mir, 'tcx, Self>,
         extra: stacked_borrows::CallId,
-    ) -> InterpResult<'tcx> {
-        Ok(ecx
+        _unwinding: bool
+    ) -> InterpResult<'tcx, StackPopInfo> {
+        ecx
             .memory
             .extra
             .stacked_borrows
             .borrow_mut()
-            .end_call(extra))
+            .end_call(extra);
+        Ok(StackPopInfo::Normal)
     }
 
     #[inline(always)]
index 1f43a83576f62da0a215f54ad5cb53fb4bb85f53..55ec36387f2e82aedde18361f56bb0d9d0bb8dd3 100644 (file)
@@ -335,7 +335,7 @@ fn emulate_foreign_item(
                     mir,
                     Some(ret_place),
                     // Directly return to caller.
-                    StackPopCleanup::Goto(Some(ret)),
+                    StackPopCleanup::Goto { ret: Some(ret), unwind: None },
                 )?;
                 let mut args = this.frame().body.args_iter();
 
index 7470090f5208fb7500ba6d21e5f5ddcac62bbac9..2e41ab1ca6700a2b4e6c1746f992e2dd48bc6a6c 100644 (file)
@@ -22,7 +22,7 @@ fn call_intrinsic(
         dest: PlaceTy<'tcx, Tag>,
     ) -> InterpResult<'tcx> {
         let this = self.eval_context_mut();
-        if this.emulate_intrinsic(span, instance, args, dest)? {
+        if this.emulate_intrinsic(span, instance, args, Some(dest))? {
             return Ok(());
         }
         let tcx = &{this.tcx.tcx};
index 3302143f48cbacb8aa824a7126b8ecad43f5502f..d9de27596cd0d34456513ae45280c8076d5ac27f 100644 (file)
@@ -27,7 +27,7 @@ fn find_fn(
         );
 
         // First, run the common hooks also supported by CTFE.
-        if this.hook_fn(instance, args, dest)? {
+        if this.hook_panic_fn(instance, args, dest)? {
             this.goto_block(ret)?;
             return Ok(None);
         }