aboutsummaryrefslogtreecommitdiff
path: root/src/zig_llvm.cpp
diff options
context:
space:
mode:
authorJacob Young <jacobly0@users.noreply.github.com>2023-08-08 22:34:24 -0400
committerJacob Young <jacobly0@users.noreply.github.com>2023-08-08 23:32:40 -0400
commit3e1dd93bb2ac7e9d99fb340f1f4ca6868a52cb6b (patch)
tree3a67b92da2378f614bc52bf23133bcf22b5a5c4b /src/zig_llvm.cpp
parent53bea0f7e44591e741c357297a1f25310d36ca78 (diff)
downloadzig-3e1dd93bb2ac7e9d99fb340f1f4ca6868a52cb6b.tar.gz
zig-3e1dd93bb2ac7e9d99fb340f1f4ca6868a52cb6b.zip
llvm: force strip without libllvm to avoid unimplemented behavior
Also fix deinit bugs.
Diffstat (limited to 'src/zig_llvm.cpp')
-rw-r--r--src/zig_llvm.cpp11
1 files changed, 10 insertions, 1 deletions
diff --git a/src/zig_llvm.cpp b/src/zig_llvm.cpp
index 6dd54d3ae4..256d3581df 100644
--- a/src/zig_llvm.cpp
+++ b/src/zig_llvm.cpp
@@ -1131,7 +1131,16 @@ void ZigLLVMEraseGlobalValue(LLVMValueRef GlobalVal) {
}
void ZigLLVMDeleteGlobalValue(LLVMValueRef GlobalVal) {
- delete unwrap<GlobalVariable>(GlobalVal);
+ auto *GV = unwrap<GlobalValue>(GlobalVal);
+ assert(GV->getParent() == nullptr);
+ switch (GV->getValueID()) {
+#define HANDLE_GLOBAL_VALUE(NAME) \
+ case Value::NAME##Val: \
+ delete static_cast<NAME *>(GV); \
+ break;
+#include <llvm/IR/Value.def>
+ default: llvm_unreachable("Expected global value");
+ }
}
void ZigLLVMSetInitializer(LLVMValueRef GlobalVar, LLVMValueRef ConstantVal) {