Index: llvm/lib/MC/MCParser/WasmAsmParser.cpp =================================================================== --- llvm/lib/MC/MCParser/WasmAsmParser.cpp +++ llvm/lib/MC/MCParser/WasmAsmParser.cpp @@ -221,18 +221,22 @@ Lexer->is(AsmToken::Identifier))) return error("Expected label,@type declaration, got: ", Lexer->getTok()); auto TypeName = Lexer->getTok().getString(); + auto *Current = + cast(getStreamer().getCurrentSection().first); if (TypeName == "function") { WasmSym->setType(wasm::WASM_SYMBOL_TYPE_FUNCTION); - auto *Current = - cast(getStreamer().getCurrentSection().first); if (Current->getGroup()) WasmSym->setComdat(true); - } else if (TypeName == "global") + } else if (TypeName == "global") { WasmSym->setType(wasm::WASM_SYMBOL_TYPE_GLOBAL); - else if (TypeName == "object") + } else if (TypeName == "object") { + if (Current->getKind().isText()) + return error("WASM doesn\'t support data symbols in text sections: ", + Lexer->getTok()); WasmSym->setType(wasm::WASM_SYMBOL_TYPE_DATA); - else + } else { return error("Unknown WASM symbol type: ", Lexer->getTok()); + } Lex(); return expect(AsmToken::EndOfStatement, "EOL"); } Index: llvm/lib/MC/WasmObjectWriter.cpp =================================================================== --- llvm/lib/MC/WasmObjectWriter.cpp +++ llvm/lib/MC/WasmObjectWriter.cpp @@ -488,10 +488,14 @@ const MCSymbol *SectionSymbol = nullptr; const MCSection &SecA = SymA->getSection(); - if (SecA.getKind().isText()) - SectionSymbol = SectionFunctions.find(&SecA)->second; - else + if (SecA.getKind().isText()) { + auto &SecSymIt = SectionFunctions.find(&SecA); + if (SecSymIt == SectionFunctions.end()) + report_fatal_error("section doesn\'t have defining symbol"); + SectionSymbol = SecSymIt->second; + } else { SectionSymbol = SecA.getBeginSymbol(); + } if (!SectionSymbol) report_fatal_error("section symbol is required for relocation");