Files
termux-packages/packages/rust/rust-1.63.0-llvm-wrapper.patch
termux-pacman-bot 1de946251b chore(main/rust): update llvm-15 patch
The PR it was taken from was updated before merge.
2022-09-21 11:37:23 +00:00

121 lines
5.5 KiB
Diff

https://github.com/rust-lang/rust/commit/fe02ee8be97fc94166e3920d16d550bd6994fabd
https://github.com/rust-lang/rust/commit/a89d014a211386f2b0ead0d309a588c625d45514
https://github.com/rust-lang/rust/commit/a3a88c73f104d11849a31ebbf1c4ff4b10fc1e8d
From a3a88c73f104d11849a31ebbf1c4ff4b10fc1e8d Mon Sep 17 00:00:00 2001
From: Krasimir Georgiev <krasimir@google.com>
Date: Wed, 29 Jun 2022 14:00:40 +0000
Subject: [PATCH] llvm-wrapper: adapt for LLVMConstExtractValue removal
---
compiler/rustc_codegen_llvm/src/common.rs | 3 +--
compiler/rustc_codegen_llvm/src/llvm/ffi.rs | 6 +-----
compiler/rustc_llvm/llvm-wrapper/RustWrapper.cpp | 8 ++++++++
3 files changed, 10 insertions(+), 7 deletions(-)
diff --git a/compiler/rustc_codegen_llvm/src/common.rs b/compiler/rustc_codegen_llvm/src/common.rs
index b69d7a000ee9..d37aadeb523a 100644
--- a/compiler/rustc_codegen_llvm/src/common.rs
+++ b/compiler/rustc_codegen_llvm/src/common.rs
@@ -109,8 +109,7 @@ pub fn const_bytes(&self, bytes: &[u8]) -> &'ll Value {
pub fn const_get_elt(&self, v: &'ll Value, idx: u64) -> &'ll Value {
unsafe {
assert_eq!(idx as c_uint as u64, idx);
- let us = &[idx as c_uint];
- let r = llvm::LLVMConstExtractValue(v, us.as_ptr(), us.len() as c_uint);
+ let r = llvm::LLVMGetAggregateElement(v, idx as c_uint).unwrap();
debug!("const_get_elt(v={:?}, idx={}, r={:?})", v, idx, r);
diff --git a/compiler/rustc_codegen_llvm/src/llvm/ffi.rs b/compiler/rustc_codegen_llvm/src/llvm/ffi.rs
index b831423994f2..d92d9d96fe2c 100644
--- a/compiler/rustc_codegen_llvm/src/llvm/ffi.rs
+++ b/compiler/rustc_codegen_llvm/src/llvm/ffi.rs
@@ -1134,11 +1134,7 @@ pub fn LLVMRustConstInBoundsGEP2<'a>(
pub fn LLVMConstIntToPtr<'a>(ConstantVal: &'a Value, ToType: &'a Type) -> &'a Value;
pub fn LLVMConstBitCast<'a>(ConstantVal: &'a Value, ToType: &'a Type) -> &'a Value;
pub fn LLVMConstPointerCast<'a>(ConstantVal: &'a Value, ToType: &'a Type) -> &'a Value;
- pub fn LLVMConstExtractValue(
- AggConstant: &Value,
- IdxList: *const c_uint,
- NumIdx: c_uint,
- ) -> &Value;
+ pub fn LLVMGetAggregateElement(ConstantVal: &Value, Idx: c_uint) -> Option<&Value>;
// Operations on global variables, functions, and aliases (globals)
pub fn LLVMIsDeclaration(Global: &Value) -> Bool;
diff --git a/compiler/rustc_llvm/llvm-wrapper/RustWrapper.cpp b/compiler/rustc_llvm/llvm-wrapper/RustWrapper.cpp
index a52d53402420..8c5b4e2dc96f 100644
--- a/compiler/rustc_llvm/llvm-wrapper/RustWrapper.cpp
+++ b/compiler/rustc_llvm/llvm-wrapper/RustWrapper.cpp
@@ -1865,3 +1865,11 @@ extern "C" void LLVMRustGetMangledName(LLVMValueRef V, RustStringRef Str) {
GlobalValue *GV = unwrap<GlobalValue>(V);
Mangler().getNameWithPrefix(OS, GV, true);
}
+
+// LLVMGetAggregateElement was added in LLVM 15. For earlier LLVM versions just
+// use its implementation.
+#if LLVM_VERSION_LT(15, 0)
+extern "C" LLVMValueRef LLVMGetAggregateElement(LLVMValueRef C, unsigned Idx) {
+ return wrap(unwrap<Constant>(C)->getAggregateElement(Idx));
+}
+#endif
From fe02ee8be97fc94166e3920d16d550bd6994fabd Mon Sep 17 00:00:00 2001
From: Krasimir Georgiev <krasimir@google.com>
Date: Tue, 28 Jun 2022 14:08:35 +0000
Subject: [PATCH] llvm-wrapper: adapt for an LLVM API change
This adapts llvm-wrapper for
https://github.com/llvm/llvm-project/commit/dacfa24f75c328ae30b710ecadaa18e4ba10cdc6,
which removed ASanGlobalsMetadataAnalysis.
---
compiler/rustc_llvm/llvm-wrapper/PassWrapper.cpp | 2 ++
1 file changed, 2 insertions(+)
diff --git a/compiler/rustc_llvm/llvm-wrapper/PassWrapper.cpp b/compiler/rustc_llvm/llvm-wrapper/PassWrapper.cpp
index 38fddbdba54dd..0f4973ebf7129 100644
--- a/compiler/rustc_llvm/llvm-wrapper/PassWrapper.cpp
+++ b/compiler/rustc_llvm/llvm-wrapper/PassWrapper.cpp
@@ -985,7 +985,9 @@ LLVMRustOptimizeWithNewPassManager(
if (SanitizerOptions->SanitizeAddress) {
OptimizerLastEPCallbacks.push_back(
[SanitizerOptions](ModulePassManager &MPM, OptimizationLevel Level) {
+#if LLVM_VERSION_LT(15, 0)
MPM.addPass(RequireAnalysisPass<ASanGlobalsMetadataAnalysis, Module>());
+#endif
#if LLVM_VERSION_GE(14, 0)
AddressSanitizerOptions opts = AddressSanitizerOptions{
/*CompileKernel=*/false,
From a89d014a211386f2b0ead0d309a588c625d45514 Mon Sep 17 00:00:00 2001
From: Krasimir Georgiev <krasimir@google.com>
Date: Tue, 12 Jul 2022 15:36:28 +0000
Subject: [PATCH] llvm-wrapper: adapt for LLVM API change
---
compiler/rustc_llvm/llvm-wrapper/RustWrapper.cpp | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/compiler/rustc_llvm/llvm-wrapper/RustWrapper.cpp b/compiler/rustc_llvm/llvm-wrapper/RustWrapper.cpp
index 8c5b4e2dc96f9..7ac3157e7a1de 100644
--- a/compiler/rustc_llvm/llvm-wrapper/RustWrapper.cpp
+++ b/compiler/rustc_llvm/llvm-wrapper/RustWrapper.cpp
@@ -411,8 +411,14 @@ LLVMRustInlineAsm(LLVMTypeRef Ty, char *AsmString, size_t AsmStringLen,
extern "C" bool LLVMRustInlineAsmVerify(LLVMTypeRef Ty, char *Constraints,
size_t ConstraintsLen) {
+#if LLVM_VERSION_LT(15, 0)
return InlineAsm::Verify(unwrap<FunctionType>(Ty),
StringRef(Constraints, ConstraintsLen));
+#else
+ // llvm::Error converts to true if it is an error.
+ return !llvm::errorToBool(InlineAsm::verify(
+ unwrap<FunctionType>(Ty), StringRef(Constraints, ConstraintsLen)));
+#endif
}
extern "C" void LLVMRustAppendModuleInlineAsm(LLVMModuleRef M, const char *Asm,