From f8000577968f75fb35b9f1cef3b95a2eda1e1563 Mon Sep 17 00:00:00 2001 From: Thomas Lively Date: Fri, 1 Mar 2019 00:12:13 +0000 Subject: [PATCH] [WebAssembly] Fix crash when @llvm.global_dtors is external Reviewers: aheejin Subscribers: dschuff, sbc100, jgravelle-google, hiraditya, sunfish, llvm-commits Tags: #llvm Differential Revision: https://reviews.llvm.org/D58799 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@355157 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Target/WebAssembly/WebAssemblyLowerGlobalDtors.cpp | 2 +- test/CodeGen/WebAssembly/global_dtors.ll | 9 +++++++++ 2 files changed, 10 insertions(+), 1 deletion(-) create mode 100644 test/CodeGen/WebAssembly/global_dtors.ll diff --git a/lib/Target/WebAssembly/WebAssemblyLowerGlobalDtors.cpp b/lib/Target/WebAssembly/WebAssemblyLowerGlobalDtors.cpp index 72e0c33e1e0..494d3fadbc8 100644 --- a/lib/Target/WebAssembly/WebAssemblyLowerGlobalDtors.cpp +++ b/lib/Target/WebAssembly/WebAssemblyLowerGlobalDtors.cpp @@ -61,7 +61,7 @@ bool LowerGlobalDtors::runOnModule(Module &M) { LLVM_DEBUG(dbgs() << "********** Lower Global Destructors **********\n"); GlobalVariable *GV = M.getGlobalVariable("llvm.global_dtors"); - if (!GV) + if (!GV || !GV->hasInitializer()) return false; const ConstantArray *InitList = dyn_cast(GV->getInitializer()); diff --git a/test/CodeGen/WebAssembly/global_dtors.ll b/test/CodeGen/WebAssembly/global_dtors.ll new file mode 100644 index 00000000000..9321dc511d4 --- /dev/null +++ b/test/CodeGen/WebAssembly/global_dtors.ll @@ -0,0 +1,9 @@ +; RUN: llc < %s + +target datalayout = "e-m:e-p:32:32-i64:64-n32:64-S128" +target triple = "wasm32-unknown-unknown" + +; Check that we do not crash when attempting to lower away +; global_dtors without a definition. + +@llvm.global_dtors = external global [2 x { i32, void ()*, i8* }] -- 2.40.0