Index: llvm/trunk/lib/MC/WasmObjectWriter.cpp =================================================================== --- llvm/trunk/lib/MC/WasmObjectWriter.cpp +++ llvm/trunk/lib/MC/WasmObjectWriter.cpp @@ -1350,7 +1350,9 @@ report_fatal_error(".size expression must be evaluatable"); auto &DataSection = static_cast(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. Index: llvm/trunk/test/MC/WebAssembly/data-symbol-in-text-section.ll =================================================================== --- llvm/trunk/test/MC/WebAssembly/data-symbol-in-text-section.ll +++ llvm/trunk/test/MC/WebAssembly/data-symbol-in-text-section.ll @@ -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 +}