diff --git a/example/mini_core.rs b/example/mini_core.rs
index 9160540d1d5..5311d84e72a 100644
--- a/example/mini_core.rs
+++ b/example/mini_core.rs
@@ -472,9 +472,9 @@ pub mod intrinsics {
     extern "rust-intrinsic" {
         pub fn abort() -> !;
         pub fn size_of<T>() -> usize;
-        pub fn size_of_val<T: ?::Sized>(val: &T) -> usize;
+        pub fn size_of_val<T: ?::Sized>(val: *const T) -> usize;
         pub fn min_align_of<T>() -> usize;
-        pub fn min_align_of_val<T: ?::Sized>(val: &T) -> usize;
+        pub fn min_align_of_val<T: ?::Sized>(val: *const T) -> usize;
         pub fn copy<T>(src: *const T, dst: *mut T, count: usize);
         pub fn transmute<T, U>(e: T) -> U;
         pub fn ctlz_nonzero<T>(x: T) -> T;
diff --git a/rust-toolchain b/rust-toolchain
index fb96c33ad2e..295c041848b 100644
--- a/rust-toolchain
+++ b/rust-toolchain
@@ -1 +1 @@
-nightly-2020-03-18
+nightly-2020-03-24
diff --git a/rustup.sh b/rustup.sh
index aeb60c50c09..01ce5bb78be 100755
--- a/rustup.sh
+++ b/rustup.sh
@@ -19,6 +19,7 @@ case $1 in
         ./prepare.sh
         ;;
     "commit")
+        git add rust-toolchain
         git commit -m "Rustup to $(rustc -V)"
         ;;
     *)
diff --git a/src/abi/mod.rs b/src/abi/mod.rs
index 5f7939a1ca7..5d6a0772ce8 100644
--- a/src/abi/mod.rs
+++ b/src/abi/mod.rs
@@ -32,7 +32,7 @@ pub fn fn_sig_for_fn_abi<'tcx>(tcx: TyCtxt<'tcx>, instance: Instance<'tcx>) -> t
             sig
         }
         ty::Closure(def_id, substs) => {
-            let sig = substs.as_closure().sig(def_id, tcx);
+            let sig = substs.as_closure().sig();
 
             let env_ty = tcx.closure_env_ty(def_id, substs).unwrap();
             sig.map_bound(|sig| tcx.mk_fn_sig(
@@ -43,8 +43,8 @@ pub fn fn_sig_for_fn_abi<'tcx>(tcx: TyCtxt<'tcx>, instance: Instance<'tcx>) -> t
                 sig.abi
             ))
         }
-        ty::Generator(def_id, substs, _) => {
-            let sig = substs.as_generator().poly_sig(def_id, tcx);
+        ty::Generator(_def_id, substs, _) => {
+            let sig = substs.as_generator().poly_sig();
 
             let env_region = ty::ReLateBound(ty::INNERMOST, ty::BrEnv);
             let env_ty = tcx.mk_mut_ref(tcx.mk_region(env_region), ty);
diff --git a/src/backend.rs b/src/backend.rs
index 2113fca86dd..5c57e16125c 100644
--- a/src/backend.rs
+++ b/src/backend.rs
@@ -1,7 +1,7 @@
 use std::collections::HashMap;
 use std::convert::TryFrom;
 
-use rustc::session::Session;
+use rustc_session::Session;
 
 use cranelift_module::{FuncId, Module};
 
diff --git a/src/driver/aot.rs b/src/driver/aot.rs
index 3473b0ae40c..71876816f39 100644
--- a/src/driver/aot.rs
+++ b/src/driver/aot.rs
@@ -1,7 +1,7 @@
 use rustc::dep_graph::{WorkProduct, WorkProductFileKind, WorkProductId};
 use rustc::middle::cstore::EncodedMetadata;
 use rustc::mir::mono::CodegenUnit;
-use rustc::session::config::{DebugInfo, OutputType};
+use rustc_session::config::{DebugInfo, OutputType};
 use rustc_session::cgu_reuse_tracker::CguReuse;
 use rustc_codegen_ssa::back::linker::LinkerInfo;
 use rustc_codegen_ssa::CrateInfo;
diff --git a/src/lib.rs b/src/lib.rs
index a3fbb99eb65..061f78c8a92 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -6,7 +6,6 @@ extern crate libc;
 extern crate tempfile;
 extern crate rustc;
 extern crate rustc_codegen_ssa;
-extern crate rustc_codegen_utils;
 extern crate rustc_data_structures;
 extern crate rustc_driver;
 extern crate rustc_fs_util;
@@ -16,6 +15,7 @@ extern crate rustc_index;
 extern crate rustc_mir;
 extern crate rustc_session;
 extern crate rustc_span;
+extern crate rustc_symbol_mangling;
 extern crate rustc_target;
 extern crate rustc_ast;
 
@@ -23,10 +23,10 @@ use std::any::Any;
 
 use rustc::dep_graph::{DepGraph, WorkProduct, WorkProductId};
 use rustc::middle::cstore::{EncodedMetadata, MetadataLoader};
-use rustc::session::config::OutputFilenames;
+use rustc_session::config::OutputFilenames;
 use rustc::ty::query::Providers;
 use rustc::util::common::ErrorReported;
-use rustc_codegen_utils::codegen_backend::CodegenBackend;
+use rustc_codegen_ssa::traits::CodegenBackend;
 
 use cranelift_codegen::settings;
 
@@ -72,7 +72,7 @@ mod prelude {
     pub use rustc::bug;
     pub use rustc_hir::def_id::{CrateNum, DefId, LOCAL_CRATE};
     pub use rustc::mir::{self, interpret::AllocId, mono::MonoItem, *};
-    pub use rustc::session::{
+    pub use rustc_session::{
         config::{CrateType, Lto},
         Session,
     };
@@ -203,12 +203,10 @@ impl CodegenBackend for CraneliftCodegenBackend {
         metadata: EncodedMetadata,
         need_metadata_module: bool,
     ) -> Box<dyn Any> {
-        rustc_codegen_utils::check_for_rustc_errors_attr(tcx);
-
         let res = driver::codegen_crate(tcx, metadata, need_metadata_module);
 
         rustc_incremental::assert_module_sources::assert_module_sources(tcx);
-        rustc_codegen_utils::symbol_names_test::report_symbol_names(tcx);
+        rustc_symbol_mangling::test::report_symbol_names(tcx);
 
         res
     }
@@ -296,7 +294,7 @@ fn build_isa(sess: &Session, enable_pic: bool) -> Box<dyn isa::TargetIsa + 'stat
 
     // FIXME(CraneStation/cranelift#732) fix LICM in presence of jump tables
     /*
-    use rustc::session::config::OptLevel;
+    use rustc_session::config::OptLevel;
     match sess.opts.optimize {
         OptLevel::No => {
             flags_builder.set("opt_level", "fastest").unwrap();
diff --git a/src/main_shim.rs b/src/main_shim.rs
index 74ee0d8fee8..145dd704bad 100644
--- a/src/main_shim.rs
+++ b/src/main_shim.rs
@@ -4,7 +4,7 @@ use crate::prelude::*;
 /// users main function.
 pub fn maybe_create_entry_wrapper(tcx: TyCtxt<'_>, module: &mut Module<impl Backend + 'static>) {
     use rustc::middle::lang_items::StartFnLangItem;
-    use rustc::session::config::EntryFnType;
+    use rustc_session::config::EntryFnType;
 
     let (main_def_id, use_start_lang_item) = match tcx.entry_fn(LOCAL_CRATE) {
         Some((def_id, entry_ty)) => (
diff --git a/src/metadata.rs b/src/metadata.rs
index c1f2534111e..cedbff914bf 100644
--- a/src/metadata.rs
+++ b/src/metadata.rs
@@ -3,7 +3,7 @@ use std::fs::File;
 use std::path::Path;
 
 use rustc::middle::cstore::{EncodedMetadata, MetadataLoader};
-use rustc::session::config;
+use rustc_session::config;
 use rustc::ty::TyCtxt;
 use rustc_codegen_ssa::METADATA_FILENAME;
 use rustc_data_structures::owning_ref::{self, OwningRef};
diff --git a/src/target_features_whitelist.rs b/src/target_features_whitelist.rs
index 20e31e19189..cbc88fc6b51 100644
--- a/src/target_features_whitelist.rs
+++ b/src/target_features_whitelist.rs
@@ -1,6 +1,6 @@
 use rustc_span::symbol::{sym, Symbol};
 
-use rustc::session::Session;
+use rustc_session::Session;
 
 // Copied from https://github.com/rust-lang/rust/blob/f69b07144a151f46aaee1b6230ba4160e9394562/src/librustc_codegen_llvm/llvm_util.rs#L93-L264