summaryrefslogtreecommitdiff
path: root/dev-lang/rust/files/1.32.0-system-llvm-7-SIGSEGV.patch
blob: afc2cabde4b5086fa042ca3feb5131b1f76525ac (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
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