[llvm] r355157 - [WebAssembly] Fix crash when @llvm.global_dtors is external

Thomas Lively via llvm-commits llvm-commits at lists.llvm.org
Thu Feb 28 16:12:13 PST 2019


Author: tlively
Date: Thu Feb 28 16:12:13 2019
New Revision: 355157

URL: http://llvm.org/viewvc/llvm-project?rev=355157&view=rev
Log:
[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

Added:
    llvm/trunk/test/CodeGen/WebAssembly/global_dtors.ll
Modified:
    llvm/trunk/lib/Target/WebAssembly/WebAssemblyLowerGlobalDtors.cpp

Modified: llvm/trunk/lib/Target/WebAssembly/WebAssemblyLowerGlobalDtors.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/WebAssembly/WebAssemblyLowerGlobalDtors.cpp?rev=355157&r1=355156&r2=355157&view=diff
==============================================================================
--- llvm/trunk/lib/Target/WebAssembly/WebAssemblyLowerGlobalDtors.cpp (original)
+++ llvm/trunk/lib/Target/WebAssembly/WebAssemblyLowerGlobalDtors.cpp Thu Feb 28 16:12:13 2019
@@ -61,7 +61,7 @@ bool LowerGlobalDtors::runOnModule(Modul
   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<ConstantArray>(GV->getInitializer());

Added: llvm/trunk/test/CodeGen/WebAssembly/global_dtors.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/WebAssembly/global_dtors.ll?rev=355157&view=auto
==============================================================================
--- llvm/trunk/test/CodeGen/WebAssembly/global_dtors.ll (added)
+++ llvm/trunk/test/CodeGen/WebAssembly/global_dtors.ll Thu Feb 28 16:12:13 2019
@@ -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.
+
+ at llvm.global_dtors = external global [2 x { i32, void ()*, i8* }]




More information about the llvm-commits mailing list