]> granicus.if.org Git - llvm/commitdiff
[MC][WebAssembly] Error on data symbols in the text section.
authorSam Clegg <sbc@chromium.org>
Wed, 25 Sep 2019 23:33:16 +0000 (23:33 +0000)
committerSam Clegg <sbc@chromium.org>
Wed, 25 Sep 2019 23:33:16 +0000 (23:33 +0000)
Previously we had an assert but this can actually occur in valid user
code so we need to handle this in release builds too.

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

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

lib/MC/WasmObjectWriter.cpp
test/MC/WebAssembly/data-symbol-in-text-section.ll [new file with mode: 0644]

index 53618887bb50d878999ea60732833e1cdb1ceccd..c1ff3cc2480cdfd70524d6fa4ac62cc3d5f7a94b 100644 (file)
@@ -1350,7 +1350,9 @@ uint64_t WasmObjectWriter::writeObject(MCAssembler &Asm,
         report_fatal_error(".size expression must be evaluatable");
 
       auto &DataSection = static_cast<MCSectionWasm &>(WS.getSection());
-      assert(DataSection.isWasmData());
+      if (!DataSection.isWasmData())
+        report_fatal_error("data symbols must live in a data section: " +
+                           WS.getName());
 
       // For each data symbol, export it in the symtab as a reference to the
       // corresponding Wasm data segment.
diff --git a/test/MC/WebAssembly/data-symbol-in-text-section.ll b/test/MC/WebAssembly/data-symbol-in-text-section.ll
new file mode 100644 (file)
index 0000000..7e9b28a
--- /dev/null
@@ -0,0 +1,13 @@
+; RUN: not llc -filetype=obj %s -o /dev/null 2>&1 | FileCheck %s
+; CHECK: data symbols must live in a data section: data_symbol
+
+target datalayout = "e-m:e-p:32:32-i64:64-n32:64-S128"
+target triple = "wasm32-unknown-unknown"
+
+@data_symbol = constant [1024 x i32] zeroinitializer, section ".text", align 16
+
+define hidden i32 @main() local_unnamed_addr #0 {
+entry:
+  %0 = load i32, i32* getelementptr inbounds ([1024 x i32], [1024 x i32]* @data_symbol, i32 0, i32 10)
+  ret i32 %0
+}