diff --git a/example/mini_core.rs b/example/mini_core.rs
index 19044e1fea5..1045e7f0cec 100644
--- a/example/mini_core.rs
+++ b/example/mini_core.rs
@@ -1,4 +1,4 @@
-#![feature(no_core, lang_items, intrinsics, unboxed_closures, type_ascription)]
+#![feature(no_core, lang_items, intrinsics, unboxed_closures, type_ascription, extern_types)]
 #![no_core]
 #![allow(dead_code)]
 
@@ -386,3 +386,11 @@ impl<T> Index<usize> for [T] {
         &self[index]
     }
 }
+
+extern {
+    type VaListImpl;
+}
+
+#[lang = "va_list"]
+#[repr(transparent)]
+pub struct VaList<'a>(&'a mut VaListImpl);
diff --git a/patches/0002-Disable-u128-and-i128-in-libcore.patch b/patches/0002-Disable-u128-and-i128-in-libcore.patch
index b3f98c68dae..0f4781f24a9 100644
--- a/patches/0002-Disable-u128-and-i128-in-libcore.patch
+++ b/patches/0002-Disable-u128-and-i128-in-libcore.patch
@@ -1,6 +1,6 @@
-From 61a7d6cc7809c89a8d2d046946dd0cb7cb1cd1b5 Mon Sep 17 00:00:00 2001
+From e87977477e8507a5749e64ea49ee503e706d7178 Mon Sep 17 00:00:00 2001
 From: bjorn3 <bjorn3@users.noreply.github.com>
-Date: Sun, 24 Feb 2019 11:27:11 +0100
+Date: Fri, 1 Mar 2019 18:36:21 +0100
 Subject: [PATCH] Disable u128 and i128 in libcore
 
 ---
@@ -215,10 +215,10 @@ index dfe1d2a..06cc578 100644
  
  /// An iterator adapter that produces output as long as the underlying
 diff --git a/src/libcore/lib.rs b/src/libcore/lib.rs
-index cdb42c1..75743ee 100644
+index 9516c02..9d91885 100644
 --- a/src/libcore/lib.rs
 +++ b/src/libcore/lib.rs
-@@ -149,14 +149,12 @@ mod uint_macros;
+@@ -148,14 +148,12 @@ mod uint_macros;
  #[path = "num/i16.rs"]   pub mod i16;
  #[path = "num/i32.rs"]   pub mod i32;
  #[path = "num/i64.rs"]   pub mod i64;
@@ -249,7 +249,7 @@ index 29606cb..160cca1 100644
          bool char
      }
 diff --git a/src/libcore/mem.rs b/src/libcore/mem.rs
-index 43afc9a..fc5366b 100644
+index f41d293..71b5e09 100644
 --- a/src/libcore/mem.rs
 +++ b/src/libcore/mem.rs
 @@ -164,12 +164,10 @@ pub fn forget_unsized<T: ?Sized>(t: T) {
@@ -266,7 +266,7 @@ index 43afc9a..fc5366b 100644
  /// f64 | 8
  /// char | 4
 diff --git a/src/libcore/num/mod.rs b/src/libcore/num/mod.rs
-index 5b7d5f4..0cfb96c 100644
+index 6708a19..4066b0c 100644
 --- a/src/libcore/num/mod.rs
 +++ b/src/libcore/num/mod.rs
 @@ -102,13 +102,11 @@ nonzero_integers! {
@@ -283,7 +283,7 @@ index 5b7d5f4..0cfb96c 100644
      #[stable(feature = "signed_nonzero", since = "1.34.0")] NonZeroIsize(isize);
  }
  
-@@ -2120,18 +2118,6 @@ impl i64 {
+@@ -2117,18 +2115,6 @@ impl i64 {
           "[0x12, 0x34, 0x56, 0x78, 0x90, 0x12, 0x34, 0x56]" }
  }
  
@@ -302,7 +302,7 @@ index 5b7d5f4..0cfb96c 100644
  #[cfg(target_pointer_width = "16")]
  #[lang = "isize"]
  impl isize {
-@@ -4407,17 +4393,6 @@ impl u64 {
+@@ -4401,17 +4387,6 @@ impl u64 {
          "[0x12, 0x34, 0x56, 0x78, 0x90, 0x12, 0x34, 0x56]" }
  }
  
@@ -320,7 +320,7 @@ index 5b7d5f4..0cfb96c 100644
  #[cfg(target_pointer_width = "16")]
  #[lang = "usize"]
  impl usize {
-@@ -4376,7 +4376,7 @@ macro_rules! from_str_radix_int_impl {
+@@ -4495,7 +4470,7 @@ macro_rules! from_str_radix_int_impl {
          }
      )*}
  }
@@ -329,7 +329,7 @@ index 5b7d5f4..0cfb96c 100644
  
  /// The error type returned when a checked integral type conversion fails.
  #[stable(feature = "try_from", since = "1.34.0")]
-@@ -4617,30 +4592,25 @@ macro_rules! rev {
+@@ -4621,30 +4596,25 @@ macro_rules! rev {
  try_from_upper_bounded!(u16, u8);
  try_from_upper_bounded!(u32, u16, u8);
  try_from_upper_bounded!(u64, u32, u16, u8);
@@ -364,7 +364,7 @@ index 5b7d5f4..0cfb96c 100644
  
  // usize/isize
  try_from_upper_bounded!(usize, isize);
-@@ -4652,21 +4622,21 @@ mod ptr_try_from_impls {
+@@ -4656,21 +4626,21 @@ mod ptr_try_from_impls {
      use convert::TryFrom;
  
      try_from_upper_bounded!(usize, u8);
@@ -394,7 +394,7 @@ index 5b7d5f4..0cfb96c 100644
  }
  
  #[cfg(target_pointer_width = "32")]
-@@ -4675,24 +4645,24 @@ mod ptr_try_from_impls {
+@@ -4679,24 +4649,24 @@ mod ptr_try_from_impls {
      use convert::TryFrom;
  
      try_from_upper_bounded!(usize, u8, u16);
@@ -427,7 +427,7 @@ index 5b7d5f4..0cfb96c 100644
  }
  
  #[cfg(target_pointer_width = "64")]
-@@ -4701,24 +4671,20 @@ mod ptr_try_from_impls {
+@@ -4705,24 +4675,20 @@ mod ptr_try_from_impls {
      use convert::TryFrom;
  
      try_from_upper_bounded!(usize, u8, u16, u32);
@@ -456,7 +456,7 @@ index 5b7d5f4..0cfb96c 100644
  }
  
  #[doc(hidden)]
-@@ -4753,7 +4719,7 @@ macro_rules! doit {
+@@ -4757,7 +4723,7 @@ macro_rules! doit {
          }
      })*)
  }
@@ -465,7 +465,7 @@ index 5b7d5f4..0cfb96c 100644
  
  fn from_str_radix<T: FromStrRadixHelper>(src: &str, radix: u32) -> Result<T, ParseIntError> {
      use self::IntErrorKind::*;
-@@ -4944,52 +4910,38 @@ impl_from_bool! { u8, #[stable(feature = "from_bool", since = "1.28.0")] }
+@@ -4948,52 +4914,38 @@ impl_from_bool! { u8, #[stable(feature = "from_bool", since = "1.28.0")] }
  impl_from_bool! { u16, #[stable(feature = "from_bool", since = "1.28.0")] }
  impl_from_bool! { u32, #[stable(feature = "from_bool", since = "1.28.0")] }
  impl_from_bool! { u64, #[stable(feature = "from_bool", since = "1.28.0")] }
@@ -519,7 +519,7 @@ index 5b7d5f4..0cfb96c 100644
  // The C99 standard defines bounds on INTPTR_MIN, INTPTR_MAX, and UINTPTR_MAX
  // which imply that pointer-sized integers must be at least 16 bits:
 diff --git a/src/libcore/num/wrapping.rs b/src/libcore/num/wrapping.rs
-index 50e189c..2da3b35 100644
+index 9cd5108..26c8abc 100644
 --- a/src/libcore/num/wrapping.rs
 +++ b/src/libcore/num/wrapping.rs
 @@ -102,19 +102,17 @@ macro_rules! sh_impl_all {
@@ -552,7 +552,7 @@ index 50e189c..2da3b35 100644
  
  macro_rules! wrapping_int_impl {
      ($($t:ty)*) => ($(
-@@ -675,7 +673,7 @@ assert_eq!(Wrapping(3i8).pow(6), Wrapping(-39));
+@@ -677,7 +675,7 @@ assert_eq!(Wrapping(3i8).pow(6), Wrapping(-39));
      )*)
  }
  
@@ -561,7 +561,7 @@ index 50e189c..2da3b35 100644
  
  macro_rules! wrapping_int_impl_signed {
      ($($t:ty)*) => ($(
-@@ -804,7 +802,7 @@ assert!(!Wrapping(10", stringify!($t), ").is_negative());
+@@ -806,7 +804,7 @@ assert!(!Wrapping(10", stringify!($t), ").is_negative());
      )*)
  }
  
@@ -570,7 +570,7 @@ index 50e189c..2da3b35 100644
  
  macro_rules! wrapping_int_impl_unsigned {
      ($($t:ty)*) => ($(
-@@ -881,7 +879,7 @@ assert_eq!(Wrapping(200_u8).next_power_of_two(), Wrapping(0));
+@@ -883,7 +881,7 @@ assert_eq!(Wrapping(200_u8).next_power_of_two(), Wrapping(0));
      )*)
  }
  
@@ -579,7 +579,7 @@ index 50e189c..2da3b35 100644
  
  mod shift_max {
      #![allow(non_upper_case_globals)]
-@@ -908,13 +906,11 @@ mod shift_max {
+@@ -910,13 +908,11 @@ mod shift_max {
      pub const i16: u32 = (1 << 4) - 1;
      pub const i32: u32 = (1 << 5) - 1;
      pub const i64: u32 = (1 << 6) - 1;
@@ -1033,10 +1033,10 @@ index 91161ca..759497f 100644
      ///
      /// # Examples
 diff --git a/src/libstd/lib.rs b/src/libstd/lib.rs
-index c7401e2..3dff42a 100644
+index 2b62b5b..c6515bc 100644
 --- a/src/libstd/lib.rs
 +++ b/src/libstd/lib.rs
-@@ -396,8 +396,6 @@ pub use core::i16;
+@@ -393,8 +393,6 @@ pub use core::i16;
  pub use core::i32;
  #[stable(feature = "rust1", since = "1.0.0")]
  pub use core::i64;
@@ -1045,7 +1045,7 @@ index c7401e2..3dff42a 100644
  #[stable(feature = "rust1", since = "1.0.0")]
  pub use core::usize;
  #[stable(feature = "rust1", since = "1.0.0")]
-@@ -430,8 +428,6 @@ pub use alloc_crate::string;
+@@ -427,8 +425,6 @@ pub use alloc_crate::string;
  pub use alloc_crate::vec;
  #[stable(feature = "rust1", since = "1.0.0")]
  pub use core::char;
@@ -1055,7 +1055,7 @@ index c7401e2..3dff42a 100644
  pub use core::hint;
  
 diff --git a/src/libstd/net/ip.rs b/src/libstd/net/ip.rs
-index c856129..2bfe9cb 100644
+index fa256ce..42b0aa2 100644
 --- a/src/libstd/net/ip.rs
 +++ b/src/libstd/net/ip.rs
 @@ -1391,48 +1391,6 @@ impl FromInner<c::in6_addr> for Ipv6Addr {
@@ -1108,7 +1108,7 @@ index c856129..2bfe9cb 100644
  impl From<[u8; 16]> for Ipv6Addr {
      fn from(octets: [u8; 16]) -> Ipv6Addr {
 diff --git a/src/libstd/num.rs b/src/libstd/num.rs
-index c80b9a5..e32a6b3 100644
+index 828d572..bc04fb1 100644
 --- a/src/libstd/num.rs
 +++ b/src/libstd/num.rs
 @@ -12,7 +12,7 @@ pub use core::num::{FpCategory, ParseIntError, ParseFloatError, TryFromIntError}
@@ -1118,10 +1118,10 @@ index c80b9a5..e32a6b3 100644
 -pub use core::num::{NonZeroU8, NonZeroU16, NonZeroU32, NonZeroU64, NonZeroU128, NonZeroUsize};
 +pub use core::num::{NonZeroU8, NonZeroU16, NonZeroU32, NonZeroU64, NonZeroUsize};
  
- #[cfg(test)] use fmt;
- #[cfg(test)] use ops::{Add, Sub, Mul, Div, Rem};
+ #[cfg(test)] use crate::fmt;
+ #[cfg(test)] use crate::ops::{Add, Sub, Mul, Div, Rem};
 diff --git a/src/libstd/panic.rs b/src/libstd/panic.rs
-index daeac71..717ee82 100644
+index 6a16414..f027102 100644
 --- a/src/libstd/panic.rs
 +++ b/src/libstd/panic.rs
 @@ -254,9 +254,6 @@ impl RefUnwindSafe for atomic::AtomicI32 {}
diff --git a/patches/0014-Don-t-use-OS-TLS.patch b/patches/0014-Don-t-use-OS-TLS.patch
index 01c959c8ae8..1ee70692627 100644
--- a/patches/0014-Don-t-use-OS-TLS.patch
+++ b/patches/0014-Don-t-use-OS-TLS.patch
@@ -1,6 +1,6 @@
-From 1ad7a849f9ff845f676d4625ba71d1060039c0de Mon Sep 17 00:00:00 2001
+From 0c7406a33e3a40427760e6955188be193fd568a8 Mon Sep 17 00:00:00 2001
 From: bjorn3 <bjorn3@users.noreply.github.com>
-Date: Thu, 31 Jan 2019 20:11:56 +0100
+Date: Fri, 1 Mar 2019 18:36:22 +0100
 Subject: [PATCH] Don't use OS TLS
 
 ---
@@ -9,10 +9,10 @@ Subject: [PATCH] Don't use OS TLS
  2 files changed, 2 insertions(+), 3 deletions(-)
 
 diff --git a/src/libstd/thread/local.rs b/src/libstd/thread/local.rs
-index 5d2eb5f..39513b6 100644
+index d1f5373..ce83b3b 100644
 --- a/src/libstd/thread/local.rs
 +++ b/src/libstd/thread/local.rs
-@@ -160,10 +160,10 @@ macro_rules! __thread_local_inner {
+@@ -164,10 +164,10 @@ macro_rules! __thread_local_inner {
                  &'static $crate::cell::UnsafeCell<
                      $crate::option::Option<$t>>>
              {
@@ -24,7 +24,7 @@ index 5d2eb5f..39513b6 100644
                  #[thread_local]
                  #[cfg(all(
                      target_thread_local,
-@@ -178,6 +178,7 @@ macro_rules! __thread_local_inner {
+@@ -182,6 +182,7 @@ macro_rules! __thread_local_inner {
                  ))]
                  static __KEY: $crate::thread::__OsLocalKeyInner<$t> =
                      $crate::thread::__OsLocalKeyInner::new();
@@ -32,16 +32,16 @@ index 5d2eb5f..39513b6 100644
  
                  __KEY.get()
              }
-@@ -304,7 +305,6 @@ impl<T: 'static> LocalKey<T> {
+@@ -308,7 +309,6 @@ impl<T: 'static> LocalKey<T> {
  /// On some platforms like wasm32 there's no threads, so no need to generate
  /// thread locals and we can instead just use plain statics!
  #[doc(hidden)]
 -#[cfg(all(target_arch = "wasm32", not(target_feature = "atomics")))]
  pub mod statik {
-     use cell::UnsafeCell;
-     use fmt;
+     use crate::cell::UnsafeCell;
+     use crate::fmt;
 diff --git a/src/libstd/thread/mod.rs b/src/libstd/thread/mod.rs
-index eb8e0c1..b44d737 100644
+index 08f0aa2..eff3126 100644
 --- a/src/libstd/thread/mod.rs
 +++ b/src/libstd/thread/mod.rs
 @@ -195,7 +195,6 @@ pub use self::local::{LocalKey, AccessError};
@@ -53,5 +53,4 @@ index eb8e0c1..b44d737 100644
  #[unstable(feature = "libstd_thread_internals", issue = "0")]
  #[cfg(target_thread_local)]
 -- 
-2.11.0
-
+2.17.2 (Apple Git-113)
diff --git a/src/abi.rs b/src/abi.rs
index b4de8aeea19..45c2c6d3719 100644
--- a/src/abi.rs
+++ b/src/abi.rs
@@ -152,7 +152,7 @@ pub fn ty_fn_sig<'a, 'tcx>(tcx: TyCtxt<'a, 'tcx, 'tcx>, ty: Ty<'tcx>) -> ty::FnS
             sig.map_bound(|sig| tcx.mk_fn_sig(
                 iter::once(*env_ty.skip_binder()).chain(sig.inputs().iter().cloned()),
                 sig.output(),
-                sig.variadic,
+                sig.c_variadic,
                 sig.unsafety,
                 sig.abi
             ))
@@ -193,7 +193,7 @@ pub fn get_function_name_and_sig<'a, 'tcx>(
     assert!(!inst.substs.needs_infer() && !inst.substs.has_param_types());
     let fn_ty = inst.ty(tcx);
     let fn_sig = ty_fn_sig(tcx, fn_ty);
-    if fn_sig.variadic && !support_vararg {
+    if fn_sig.c_variadic && !support_vararg {
         unimpl!("Variadic function definitions are not yet supported");
     }
     let sig = clif_sig_from_fn_sig(tcx, fn_sig);
@@ -717,7 +717,7 @@ pub fn codegen_call_inner<'a, 'tcx: 'a>(
     };
 
     // FIXME find a cleaner way to support varargs
-    if fn_sig.variadic {
+    if fn_sig.c_variadic {
         if fn_sig.abi != Abi::C {
             unimpl!("Variadic call for non-C abi {:?}", fn_sig.abi);
         }
diff --git a/src/pretty_clif.rs b/src/pretty_clif.rs
index aab6e341a09..31ca4168d24 100644
--- a/src/pretty_clif.rs
+++ b/src/pretty_clif.rs
@@ -20,7 +20,7 @@ use crate::prelude::*;
 /// function u0:0(i64, i64, i64) system_v {
 /// ; symbol _ZN119_$LT$example..IsNotEmpty$u20$as$u20$mini_core..FnOnce$LT$$LP$$RF$$u27$a$u20$$RF$$u27$b$u20$$u5b$u16$u5d$$C$$RP$$GT$$GT$9call_once17he85059d5e6a760a0E
 /// ; instance Instance { def: Item(DefId(0/0:29 ~ example[8787]::{{impl}}[0]::call_once[0])), substs: [ReErased, ReErased] }
-/// ; sig ([IsNotEmpty, (&&[u16],)]; variadic: false)->(u8, u8)
+/// ; sig ([IsNotEmpty, (&&[u16],)]; c_variadic: false)->(u8, u8)
 ///
 /// ; ssa {_2: NOT_SSA, _4: NOT_SSA, _0: NOT_SSA, _3: (empty), _1: NOT_SSA}
 /// ; msg   loc.idx    param    pass mode            ssa flags  ty