diff options
Diffstat (limited to 'src/zig_llvm.cpp')
| -rw-r--r-- | src/zig_llvm.cpp | 11 |
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) { |
