[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