diff options
| author | bors <bors@rust-lang.org> | 2018-09-30 06:44:13 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2018-09-30 06:44:13 +0000 |
| commit | 8c1d5e5b712fa372d5dcab5a5bb97b24a6a7fef3 (patch) | |
| tree | 12c086c9d29e5570c74b447a410375834db59460 /src/librustc_codegen_llvm | |
| parent | 6310be458f4665f537419f033a764b0644c7e5ab (diff) | |
| parent | 9c62193fec1c5d2200c19d9445fe9bad753eefea (diff) | |
| download | rust-8c1d5e5b712fa372d5dcab5a5bb97b24a6a7fef3.tar.gz rust-8c1d5e5b712fa372d5dcab5a5bb97b24a6a7fef3.zip | |
Auto merge of #54639 - nagisa:lets-alias-for-now, r=eddyb
Do not put noalias annotations by default This will be re-enabled sooner or later depending on results of further investigation. Fixes #54462 Beta backport is: #54640 r? @nikomatsakis
Diffstat (limited to 'src/librustc_codegen_llvm')
| -rw-r--r-- | src/librustc_codegen_llvm/type_of.rs | 19 |
1 files changed, 12 insertions, 7 deletions
diff --git a/src/librustc_codegen_llvm/type_of.rs b/src/librustc_codegen_llvm/type_of.rs index 6eec0b0b68c..765708aeafd 100644 --- a/src/librustc_codegen_llvm/type_of.rs +++ b/src/librustc_codegen_llvm/type_of.rs @@ -10,11 +10,9 @@ use abi::{FnType, FnTypeExt}; use common::*; -use llvm; use rustc::hir; use rustc::ty::{self, Ty, TypeFoldable}; use rustc::ty::layout::{self, Align, LayoutOf, Size, TyLayout}; -use rustc_target::spec::PanicStrategy; use rustc_target::abi::FloatTy; use rustc_mir::monomorphize::item::DefPathBasedNames; use type_::Type; @@ -433,12 +431,19 @@ impl<'tcx> LayoutLlvmExt<'tcx> for TyLayout<'tcx> { PointerKind::Shared }, hir::MutMutable => { - // Only emit noalias annotations for LLVM >= 6 or in panic=abort - // mode, as prior versions had many bugs in conjunction with - // unwinding. See also issue #31681. + // Previously we would only emit noalias annotations for LLVM >= 6 or in + // panic=abort mode. That was deemed right, as prior versions had many bugs + // in conjunction with unwinding, but later versions didn’t seem to have + // said issues. See issue #31681. + // + // Alas, later on we encountered a case where noalias would generate wrong + // code altogether even with recent versions of LLVM in *safe* code with no + // unwinding involved. See #54462. + // + // For now, do not enable mutable_noalias by default at all, while the + // issue is being figured out. let mutable_noalias = cx.tcx.sess.opts.debugging_opts.mutable_noalias - .unwrap_or(unsafe { llvm::LLVMRustVersionMajor() >= 6 } - || cx.tcx.sess.panic_strategy() == PanicStrategy::Abort); + .unwrap_or(false); if mutable_noalias { PointerKind::UniqueBorrowed } else { |
