about summary refs log tree commit diff
diff options
context:
space:
mode:
authorbors <bors@rust-lang.org>2015-10-05 21:47:47 +0000
committerbors <bors@rust-lang.org>2015-10-05 21:47:47 +0000
commit6843ea4a46f1479b5f33d0d46512083f432d6251 (patch)
tree6737971f5148a481c56451610695969a3a918fac
parentc2be91ede0a6f1cbda3c14488c93abe6c7ee5f9c (diff)
parenta7f2a7881dc724fd9e36e31c8bf969225f72f792 (diff)
downloadrust-6843ea4a46f1479b5f33d0d46512083f432d6251.tar.gz
rust-6843ea4a46f1479b5f33d0d46512083f432d6251.zip
Auto merge of #28717 - nagisa:optional-no-landing-pads, r=alexcrichton
Part of #28710

Landing pads during stage0 are now enabled by defaullt. Since this has its downsides and upsides either way, I made it possible to change the option through configure.
-rwxr-xr-xconfigure1
-rw-r--r--mk/main.mk5
-rw-r--r--src/libstd/sys/common/unwind/mod.rs12
3 files changed, 16 insertions, 2 deletions
diff --git a/configure b/configure
index 21657b0bdaa..60d366100f8 100755
--- a/configure
+++ b/configure
@@ -578,6 +578,7 @@ opt ccache 0 "invoke gcc/clang via ccache to reuse object files between builds"
 opt local-rust 0 "use an installed rustc rather than downloading a snapshot"
 opt llvm-static-stdcpp 0 "statically link to libstdc++ for LLVM"
 opt rpath 0 "build rpaths into rustc itself"
+opt stage0-landing-pads 1 "enable landing pads during bootstrap with stage0"
 # This is used by the automation to produce single-target nightlies
 opt dist-host-only 0 "only install bins for the host architecture"
 opt inject-std-version 1 "inject the current compiler version of libstd into programs"
diff --git a/mk/main.mk b/mk/main.mk
index fa6d8097150..dedf4ec57ea 100644
--- a/mk/main.mk
+++ b/mk/main.mk
@@ -170,7 +170,10 @@ RUST_LIB_FLAGS_ST3 += -C prefer-dynamic
 
 # Landing pads require a lot of codegen. We can get through bootstrapping faster
 # by not emitting them.
-RUSTFLAGS_STAGE0 += -Z no-landing-pads
+
+ifdef CFG_DISABLE_STAGE0_LANDING_PADS
+  RUSTFLAGS_STAGE0 += -Z no-landing-pads
+endif
 
 # Enable MIR to "always build" for crates where this works. This is
 # just temporary while MIR is being actively built up -- it's just a
diff --git a/src/libstd/sys/common/unwind/mod.rs b/src/libstd/sys/common/unwind/mod.rs
index c06d7886a75..3978aeb39bc 100644
--- a/src/libstd/sys/common/unwind/mod.rs
+++ b/src/libstd/sys/common/unwind/mod.rs
@@ -81,8 +81,18 @@ use sys_common::mutex::Mutex;
 #[path = "seh.rs"] #[doc(hidden)]
 pub mod imp;
 
+// SNAP: i686-pc-windows-gnu
+#[cfg(all(stage0, windows, target_arch = "x86_64", target_env = "gnu"))]
+#[path = "seh64_gnu.rs"] #[doc(hidden)]
+pub mod imp;
+
+// SNAP: x86_64-pc-windows-msvc
+#[cfg(all(stage0, windows, target_arch = "x86_64", target_env = "msvc"))]
+#[path = "seh.rs"] #[doc(hidden)]
+pub mod imp;
+
 // x86_64-pc-windows-*
-#[cfg(all(windows, target_arch = "x86_64"))]
+#[cfg(all(not(stage0), windows, target_arch = "x86_64"))]
 #[path = "seh64_gnu.rs"] #[doc(hidden)]
 pub mod imp;