[llvm] r372934 - [MC][WebAssembly] Error on data symbols in the text section.

Sam Clegg via llvm-commits llvm-commits at lists.llvm.org
Wed Sep 25 16:33:17 PDT 2019


Author: sbc
Date: Wed Sep 25 16:33:16 2019
New Revision: 372934

URL: http://llvm.org/viewvc/llvm-project?rev=372934&view=rev
Log:
[MC][WebAssembly] Error on data symbols in the text section.

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

Added:
    llvm/trunk/test/MC/WebAssembly/data-symbol-in-text-section.ll
Modified:
    llvm/trunk/lib/MC/WasmObjectWriter.cpp

Modified: llvm/trunk/lib/MC/WasmObjectWriter.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/MC/WasmObjectWriter.cpp?rev=372934&r1=372933&r2=372934&view=diff
==============================================================================
--- llvm/trunk/lib/MC/WasmObjectWriter.cpp (original)
+++ llvm/trunk/lib/MC/WasmObjectWriter.cpp Wed Sep 25 16:33:16 2019
@@ -1350,7 +1350,9 @@ uint64_t WasmObjectWriter::writeObject(M
         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.

Added: llvm/trunk/test/MC/WebAssembly/data-symbol-in-text-section.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/WebAssembly/data-symbol-in-text-section.ll?rev=372934&view=auto
==============================================================================
--- llvm/trunk/test/MC/WebAssembly/data-symbol-in-text-section.ll (added)
+++ llvm/trunk/test/MC/WebAssembly/data-symbol-in-text-section.ll Wed Sep 25 16:33:16 2019
@@ -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"
+
+ at 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
+}




More information about the llvm-commits mailing list