]> granicus.if.org Git - llvm/commitdiff
[WebAssembly] EmscriptenEHSjLj: Don't abort if __THREW__ is defined
authorSam Clegg <sbc@chromium.org>
Thu, 4 Apr 2019 01:43:21 +0000 (01:43 +0000)
committerSam Clegg <sbc@chromium.org>
Thu, 4 Apr 2019 01:43:21 +0000 (01:43 +0000)
This allows __THREW__ to be defined in the current module, although
it is still required to be a GlobalVariable.

In emscripten we want to be able to compile the source code that
defines this symbols.

Previously we were avoid this by not running this pass when building
that compiler-rt library, but I have change out to build it using the
normal compiler path:
https://github.com/emscripten-core/emscripten/pull/8391

Differential Revision: https://reviews.llvm.org/D60232

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@357665 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/WebAssembly/WebAssemblyLowerEmscriptenEHSjLj.cpp

index 9c33508a3df18fe0de1cb685f7c818bbf649b136..7ab8e361a8becb29cd6d31642e3e8802abb0037e 100644 (file)
@@ -334,11 +334,12 @@ static bool canThrow(const Value *V) {
 // which will generate an import and asssumes that it will exist at link time.
 static GlobalVariable *getGlobalVariableI32(Module &M, IRBuilder<> &IRB,
                                             const char *Name) {
-  if (M.getNamedGlobal(Name))
-    report_fatal_error(Twine("variable name is reserved: ") + Name);
 
-  return new GlobalVariable(M, IRB.getInt32Ty(), false,
-                            GlobalValue::ExternalLinkage, nullptr, Name);
+  auto* GV = dyn_cast<GlobalVariable>(M.getOrInsertGlobal(Name, IRB.getInt32Ty()));
+  if (!GV)
+    report_fatal_error(Twine("unable to create global: ") + Name);
+
+  return GV;
 }
 
 // Simple function name mangler.