[llvm] r319991 - [WebAssembly] Don't try to emit size information for unsized types

Dan Gohman via llvm-commits llvm-commits at lists.llvm.org
Wed Dec 6 16:14:30 PST 2017


Author: djg
Date: Wed Dec  6 16:14:30 2017
New Revision: 319991

URL: http://llvm.org/viewvc/llvm-project?rev=319991&view=rev
Log:
[WebAssembly] Don't try to emit size information for unsized types

Patch by John Sully!

Fixes PR35164.

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

Modified:
    llvm/trunk/lib/Target/WebAssembly/WebAssemblyAsmPrinter.cpp
    llvm/trunk/test/CodeGen/WebAssembly/global.ll

Modified: llvm/trunk/lib/Target/WebAssembly/WebAssemblyAsmPrinter.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/WebAssembly/WebAssemblyAsmPrinter.cpp?rev=319991&r1=319990&r2=319991&view=diff
==============================================================================
--- llvm/trunk/lib/Target/WebAssembly/WebAssemblyAsmPrinter.cpp (original)
+++ llvm/trunk/lib/Target/WebAssembly/WebAssemblyAsmPrinter.cpp Wed Dec  6 16:14:30 2017
@@ -90,11 +90,13 @@ void WebAssemblyAsmPrinter::EmitEndOfAsm
   }
   for (const auto &G : M.globals()) {
     if (!G.hasInitializer() && G.hasExternalLinkage()) {
-      uint16_t Size = M.getDataLayout().getTypeAllocSize(G.getValueType());
-      if (TM.getTargetTriple().isOSBinFormatELF())
-        getTargetStreamer()->emitGlobalImport(G.getGlobalIdentifier());
-      OutStreamer->emitELFSize(getSymbol(&G),
-                               MCConstantExpr::create(Size, OutContext));
+      if (G.getValueType()->isSized()) {
+        uint16_t Size = M.getDataLayout().getTypeAllocSize(G.getValueType());
+        if (TM.getTargetTriple().isOSBinFormatELF())
+          getTargetStreamer()->emitGlobalImport(G.getGlobalIdentifier());
+        OutStreamer->emitELFSize(getSymbol(&G),
+                                 MCConstantExpr::create(Size, OutContext));
+      }
     }
   }
 }

Modified: llvm/trunk/test/CodeGen/WebAssembly/global.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/WebAssembly/global.ll?rev=319991&r1=319990&r2=319991&view=diff
==============================================================================
--- llvm/trunk/test/CodeGen/WebAssembly/global.ll (original)
+++ llvm/trunk/test/CodeGen/WebAssembly/global.ll Wed Dec  6 16:14:30 2017
@@ -213,3 +213,10 @@ define i8* @call_memcpy(i8* %p, i8* noca
 ; CHECK-NEXT: .size       pointer_to_array, 4
 @array = internal constant [8 x i8] zeroinitializer, align 1
 @pointer_to_array = constant i8* getelementptr inbounds ([8 x i8], [8 x i8]* @array, i32 0, i32 4), align 4
+
+; Handle external objects with opaque type.
+%struct.ASTRUCT = type opaque
+ at g_struct = external global %struct.ASTRUCT, align 1
+define i32 @address_of_opaque()  {
+  ret i32 ptrtoint (%struct.ASTRUCT* @g_struct to i32)
+}




More information about the llvm-commits mailing list