aboutsummaryrefslogtreecommitdiff
path: root/src/zig_llvm.cpp
diff options
context:
space:
mode:
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) {