]> git.lizzy.rs Git - rust.git/blobdiff - src/base.rs
Rustup to rustc 1.46.0-nightly (7750c3d46 2020-06-26)
[rust.git] / src / base.rs
index 244e06f76278e901666c0d6b3bcafe7762f92b1f..8d2087b352831897b376811f3933f01eac027b0e 100644 (file)
@@ -61,7 +61,7 @@ pub(crate) fn trans_fn<'tcx, B: Backend + 'static>(
         crate::trap::trap_unreachable(&mut fx, "function has uninhabited argument");
     } else {
         tcx.sess.time("codegen clif ir", || {
-            tcx.sess.time("codegen prelude", || crate::abi::codegen_fn_prelude(&mut fx, start_block, true));
+            tcx.sess.time("codegen prelude", || crate::abi::codegen_fn_prelude(&mut fx, start_block));
             codegen_fn_content(&mut fx);
         });
     }
@@ -73,7 +73,14 @@ pub(crate) fn trans_fn<'tcx, B: Backend + 'static>(
     let local_map = fx.local_map;
     let cold_blocks = fx.cold_blocks;
 
-    crate::pretty_clif::write_clif_file(cx.tcx, "unopt", instance, &context.func, &clif_comments, None);
+    crate::pretty_clif::write_clif_file(
+        cx.tcx,
+        "unopt",
+        None,
+        instance,
+        &context,
+        &clif_comments,
+    );
 
     // Verify function
     verify_func(tcx, &clif_comments, &context.func);
@@ -101,20 +108,14 @@ pub(crate) fn trans_fn<'tcx, B: Backend + 'static>(
     );
 
     // Write optimized function to file for debugging
-    {
-        let value_ranges = context
-            .build_value_labels_ranges(cx.module.isa())
-            .expect("value location ranges");
-
-        crate::pretty_clif::write_clif_file(
-            cx.tcx,
-            "opt",
-            instance,
-            &context.func,
-            &clif_comments,
-            Some(&value_ranges),
-        );
-    }
+    crate::pretty_clif::write_clif_file(
+        cx.tcx,
+        "opt",
+        Some(cx.module.isa()),
+        instance,
+        &context,
+        &clif_comments,
+    );
 
     // Define debuginfo for function
     let isa = cx.module.isa();
@@ -133,12 +134,12 @@ pub(crate) fn trans_fn<'tcx, B: Backend + 'static>(
 
 pub(crate) fn verify_func(tcx: TyCtxt<'_>, writer: &crate::pretty_clif::CommentWriter, func: &Function) {
     tcx.sess.time("verify clif ir", || {
-        let flags = settings::Flags::new(settings::builder());
-        match ::cranelift_codegen::verify_function(&func, &flags) {
+        let flags = cranelift_codegen::settings::Flags::new(cranelift_codegen::settings::builder());
+        match cranelift_codegen::verify_function(&func, &flags) {
             Ok(_) => {}
             Err(err) => {
                 tcx.sess.err(&format!("{:?}", err));
-                let pretty_error = ::cranelift_codegen::print_errors::pretty_verifier_error(
+                let pretty_error = cranelift_codegen::print_errors::pretty_verifier_error(
                     &func,
                     None,
                     Some(Box::new(writer)),
@@ -218,7 +219,7 @@ fn codegen_fn_content(fx: &mut FunctionCx<'_, '_, impl Backend>) {
                 cleanup: _,
             } => {
                 if !fx.tcx.sess.overflow_checks() {
-                    if let mir::AssertKind::OverflowNeg = *msg {
+                    if let mir::AssertKind::OverflowNeg(_) = *msg {
                         let target = fx.get_block(*target);
                         fx.bcx.ins().jump(target, &[]);
                         continue;
@@ -322,7 +323,7 @@ fn codegen_fn_content(fx: &mut FunctionCx<'_, '_, impl Backend>) {
 
                         // Black box
                     }
-                    _ => unimpl_fatal!(fx.tcx, bb_data.terminator().source_info.span, "Inline assembly is not supported"),
+                    _ => fx.tcx.sess.span_fatal(bb_data.terminator().source_info.span, "Inline assembly is not supported"),
                 }
             }
             TerminatorKind::Resume | TerminatorKind::Abort => {
@@ -339,11 +340,11 @@ fn codegen_fn_content(fx: &mut FunctionCx<'_, '_, impl Backend>) {
                 bug!("shouldn't exist at trans {:?}", bb_data.terminator());
             }
             TerminatorKind::Drop {
-                location,
+                place,
                 target,
                 unwind: _,
             } => {
-                let drop_place = trans_place(fx, *location);
+                let drop_place = trans_place(fx, *place);
                 crate::abi::codegen_drop(fx, bb_data.terminator().source_info.span, drop_place);
 
                 let target_block = fx.get_block(*target);
@@ -362,7 +363,7 @@ fn trans_stmt<'tcx>(
     cur_block: Block,
     stmt: &Statement<'tcx>,
 ) {
-    let _print_guard = PrintOnPanic(|| format!("stmt {:?}", stmt));
+    let _print_guard = crate::PrintOnPanic(|| format!("stmt {:?}", stmt));
 
     fx.set_debug_loc(stmt.source_info);
 
@@ -679,7 +680,18 @@ fn is_fat_ptr<'tcx>(
 
                     crate::trap::trap_unimplemented(fx, "_xgetbv arch intrinsic is not supported");
                 }
-                _ => unimpl_fatal!(fx.tcx, stmt.source_info.span, "Inline assembly is not supported"),
+                // ___chkstk, ___chkstk_ms and __alloca are only used on Windows
+                _ if fx.tcx.symbol_name(fx.instance).name.as_str().starts_with("___chkstk") => {
+                    crate::trap::trap_unimplemented(fx, "Stack probes are not supported");
+                }
+                _ if fx.tcx.symbol_name(fx.instance).name.as_str() == "__alloca" => {
+                    crate::trap::trap_unimplemented(fx, "Alloca is not supported");
+                }
+                // Used in sys::windows::abort_internal
+                "int $$0x29" => {
+                    crate::trap::trap_unimplemented(fx, "Windows abort");
+                }
+                _ => fx.tcx.sess.span_fatal(stmt.source_info.span, "Inline assembly is not supported"),
             }
         }
     }