]> git.lizzy.rs Git - rust.git/commitdiff
Compile `compiler_builtins` with `abort` panic strategy
authorVadim Petrochenkov <vadim.petrochenkov@gmail.com>
Sat, 15 Jul 2017 23:02:34 +0000 (02:02 +0300)
committerVadim Petrochenkov <vadim.petrochenkov@gmail.com>
Sat, 15 Jul 2017 23:02:34 +0000 (02:02 +0300)
src/bootstrap/bin/rustc.rs
src/librustc/middle/dependency_format.rs

index 497a5ab6c536caef5e8fb8ba7e0fbb2afda85b65..134406b1acdb38dd78eaa4ead2f0e245985d774c 100644 (file)
@@ -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");
         }
 
index 9af93d0d494244591cac86d942c6e59327e35537..837ab4fd4a3ccf7a64f8f71b581f10c072f688fb 100644 (file)
@@ -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
             }