about summary refs log tree commit diff
diff options
context:
space:
mode:
authorbors <bors@rust-lang.org>2017-07-17 03:03:19 +0000
committerbors <bors@rust-lang.org>2017-07-17 03:03:19 +0000
commit08652ec95721ea66facfda4626dd1ec543434ade (patch)
treefb0394928fa6fd98e8dcb8f050254b9d35f77800
parent56071f68795f91ee8b617b6a20fc22675b53eafc (diff)
parent5f37110e5e1ae14a19aa7ee036f27e47e08ee73d (diff)
downloadrust-08652ec95721ea66facfda4626dd1ec543434ade.tar.gz
rust-08652ec95721ea66facfda4626dd1ec543434ade.zip
Auto merge of #43258 - petrochenkov:cbabort, r=alexcrichton
Compile `compiler_builtins` with `abort` panic strategy

A workaround for https://github.com/rust-lang/rust/issues/43095

In case this causes unexpected consequences, I use a simpler workaround locally:
```diff
--- a/src/bootstrap/bin/rustc.rs
+++ b/src/bootstrap/bin/rustc.rs
@@ -175,7 +175,9 @@ fn main() {
         }

         if let Ok(s) = env::var("RUSTC_CODEGEN_UNITS") {
-            cmd.arg("-C").arg(format!("codegen-units={}", s));
+            if crate_name != "compiler_builtins" {
+                cmd.arg("-C").arg(format!("codegen-units={}", s));
+            }
         }

         // Emit save-analysis info.
```

r? @alexcrichton
-rw-r--r--src/bootstrap/bin/rustc.rs7
-rw-r--r--src/librustc/middle/dependency_format.rs3
2 files changed, 8 insertions, 2 deletions
diff --git a/src/bootstrap/bin/rustc.rs b/src/bootstrap/bin/rustc.rs
index 497a5ab6c53..134406b1acd 100644
--- a/src/bootstrap/bin/rustc.rs
+++ b/src/bootstrap/bin/rustc.rs
@@ -150,7 +150,12 @@ fn main() {
         // This... is a bit of a hack how we detect this. Ideally this
         // information should be encoded in the crate I guess? Would likely
         // require an RFC amendment to RFC 1513, however.
-        if crate_name == "panic_abort" {
+        //
+        // `compiler_builtins` are unconditionally compiled with panic=abort to
+        // workaround undefined references to `rust_eh_unwind_resume` generated
+        // otherwise, see issue https://github.com/rust-lang/rust/issues/43095.
+        if crate_name == "panic_abort" ||
+           crate_name == "compiler_builtins" && stage != "0" {
             cmd.arg("-C").arg("panic=abort");
         }
 
diff --git a/src/librustc/middle/dependency_format.rs b/src/librustc/middle/dependency_format.rs
index 9af93d0d494..837ab4fd4a3 100644
--- a/src/librustc/middle/dependency_format.rs
+++ b/src/librustc/middle/dependency_format.rs
@@ -396,7 +396,8 @@ fn verify_ok<'a, 'tcx>(tcx: TyCtxt<'a, 'tcx, 'tcx>, list: &[Linkage]) {
             }
             let cnum = CrateNum::new(i + 1);
             let found_strategy = sess.cstore.panic_strategy(cnum);
-            if desired_strategy == found_strategy {
+            let is_compiler_builtins = sess.cstore.is_compiler_builtins(cnum);
+            if is_compiler_builtins || desired_strategy == found_strategy {
                 continue
             }