34 lines
1.5 KiB
Diff
34 lines
1.5 KiB
Diff
|
From 1c95f5a34c14f08d65cdd198827e3a2fcb63cf39 Mon Sep 17 00:00:00 2001
|
||
|
From: Tom Tromey <tom@tromey.com>
|
||
|
Date: Tue, 22 Jan 2019 11:13:53 -0700
|
||
|
Subject: [PATCH] Fix issue 57762
|
||
|
|
||
|
Issue 57762 points out a compiler crash when the compiler was built
|
||
|
using a stock LLVM 7. LLVM 7 was released without a necessary fix for
|
||
|
a bug in the DWARF discriminant code.
|
||
|
|
||
|
This patch changes rustc to use the fallback mode on (non-Rust) LLVM 7.
|
||
|
|
||
|
Closes #57762
|
||
|
---
|
||
|
src/librustc_codegen_llvm/debuginfo/metadata.rs | 6 +++++-
|
||
|
1 file changed, 5 insertions(+), 1 deletion(-)
|
||
|
|
||
|
diff --git a/src/librustc_codegen_llvm/debuginfo/metadata.rs b/src/librustc_codegen_llvm/debuginfo/metadata.rs
|
||
|
index 6deedd0b5ea3..a354eef6887a 100644
|
||
|
--- a/src/librustc_codegen_llvm/debuginfo/metadata.rs
|
||
|
+++ b/src/librustc_codegen_llvm/debuginfo/metadata.rs
|
||
|
@@ -1164,7 +1164,11 @@ fn use_enum_fallback(cx: &CodegenCx) -> bool {
|
||
|
// On MSVC we have to use the fallback mode, because LLVM doesn't
|
||
|
// lower variant parts to PDB.
|
||
|
return cx.sess().target.target.options.is_like_msvc
|
||
|
- || llvm_util::get_major_version() < 7;
|
||
|
+ || llvm_util::get_major_version() < 7
|
||
|
+ // LLVM version 7 did not release with an important bug fix;
|
||
|
+ // but the required patch is in the equivalent Rust LLVM.
|
||
|
+ // See https://github.com/rust-lang/rust/issues/57762.
|
||
|
+ || (llvm_util::get_major_version() == 7 && unsafe { !llvm::LLVMRustIsRustLLVM() });
|
||
|
}
|
||
|
|
||
|
// Describes the members of an enum value: An enum is described as a union of
|