]> git.lizzy.rs Git - rust.git/commitdiff
Revert "msvc: Enable landing pads by default"
authorAlex Crichton <alex@alexcrichton.com>
Thu, 9 Jul 2015 16:50:08 +0000 (09:50 -0700)
committerAlex Crichton <alex@alexcrichton.com>
Thu, 9 Jul 2015 16:50:08 +0000 (09:50 -0700)
This reverts commit f9de964ccf767498ed7b1b4a879aaca1777a9d3d.

Conflicts:
src/librustc_trans/trans/base.rs

src/librustc_trans/trans/base.rs
src/librustc_trans/trans/glue.rs

index 08b8fab1fd7075ea3bf27d85172fa0ac7e223e44..edb61b0d3cf384cfb8aaf882a05e452c8e65c290 100644 (file)
@@ -753,15 +753,13 @@ pub fn invoke<'blk, 'tcx>(bcx: Block<'blk, 'tcx>,
 }
 
 pub fn need_invoke(bcx: Block) -> bool {
-    if bcx.sess().no_landing_pads() {
-        return false
-    }
-
-    // Currently 32-bit MSVC unwinding is not super well implemented in LLVM, so
-    // we avoid it entirely.
-    if bcx.sess().target.target.options.is_like_msvc &&
-       bcx.sess().target.target.arch == "x86" {
-        return false
+    // FIXME(#25869) currently unwinding is not implemented for MSVC and our
+    //               normal unwinding infrastructure ends up just causing linker
+    //               errors with the current LLVM implementation, so landing
+    //               pads are disabled entirely for MSVC targets
+    if bcx.sess().no_landing_pads() ||
+       bcx.sess().target.target.options.is_like_msvc {
+        return false;
     }
 
     // Avoid using invoke if we are already inside a landing pad.
index 541a9ab466e566159bf75e765bbaa77bbd854e76..e530eb0de59b8e7b9ed9cdbc6f6c08033be85d89 100644 (file)
@@ -22,9 +22,8 @@
 use middle::subst;
 use middle::subst::{Subst, Substs};
 use middle::ty::{self, Ty};
-use trans::adt::GetDtorType; // for tcx.dtor_type()
 use trans::adt;
-use trans::attributes;
+use trans::adt::GetDtorType; // for tcx.dtor_type()
 use trans::base::*;
 use trans::build::*;
 use trans::callee;
@@ -44,7 +43,6 @@
 use arena::TypedArena;
 use libc::c_uint;
 use syntax::ast;
-use syntax::attr::InlineAttr;
 
 pub fn trans_exchange_free_dyn<'blk, 'tcx>(cx: Block<'blk, 'tcx>,
                                            v: ValueRef,
@@ -252,25 +250,6 @@ fn get_drop_glue_core<'a, 'tcx>(ccx: &CrateContext<'a, 'tcx>,
 
     update_linkage(ccx, llfn, None, OriginalTranslation);
 
-    // FIXME: Currently LLVM has a bug where if an SSA value is created in one
-    //        landing pad and then used in another it will abort during
-    //        compilation. The compiler never actually generates nested landing
-    //        pads, but this often arises when destructors are inlined into
-    //        other functions. To prevent this inlining from happening (and thus
-    //        preventing the LLVM abort) we mark all drop glue as inline(never)
-    //        on MSVC.
-    //
-    //        For more information about the bug, see:
-    //
-    //            https://llvm.org/bugs/show_bug.cgi?id=23884
-    //
-    //        This is clearly not the ideal solution to the problem (due to the
-    //        perf hits), so this should be removed once the upstream bug is
-    //        fixed.
-    if ccx.sess().target.target.options.is_like_msvc {
-        attributes::inline(llfn, InlineAttr::Never);
-    }
-
     ccx.stats().n_glues_created.set(ccx.stats().n_glues_created.get() + 1);
     // All glue functions take values passed *by alias*; this is a
     // requirement since in many contexts glue is invoked indirectly and