forked from OSchip/llvm-project
[WebAssembly] Explicily disable comdat support for wasm output
For now at least. We clearly need some kind of comdat or linkonce_odr support for wasm but currently COMDAT is not supported. Disable COMDAT support in the same way we do the Mach-O. This also causes clang not to generated COMDATs. Differential Revision: https://reviews.llvm.org/D39873 llvm-svn: 318123
This commit is contained in:
parent
e41151965f
commit
999660761e
|
@ -661,7 +661,9 @@ public:
|
|||
}
|
||||
|
||||
/// Tests wether the target supports comdat
|
||||
bool supportsCOMDAT() const { return !isOSBinFormatMachO(); }
|
||||
bool supportsCOMDAT() const {
|
||||
return !isOSBinFormatMachO() && !isOSBinFormatWasm();
|
||||
}
|
||||
|
||||
/// @}
|
||||
/// @name Mutators
|
||||
|
|
|
@ -1825,10 +1825,10 @@ Expected<Value *> BitcodeReader::recordValue(SmallVectorImpl<uint64_t> &Record,
|
|||
auto *GO = dyn_cast<GlobalObject>(V);
|
||||
if (GO) {
|
||||
if (GO->getComdat() == reinterpret_cast<Comdat *>(1)) {
|
||||
if (TT.isOSBinFormatMachO())
|
||||
GO->setComdat(nullptr);
|
||||
else
|
||||
if (TT.supportsCOMDAT())
|
||||
GO->setComdat(TheModule->getOrInsertComdat(V->getName()));
|
||||
else
|
||||
GO->setComdat(nullptr);
|
||||
}
|
||||
}
|
||||
return V;
|
||||
|
|
|
@ -1233,21 +1233,21 @@ void TargetLoweringObjectFileCOFF::emitLinkerFlagsForGlobal(
|
|||
// Wasm
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
static const Comdat *getWasmComdat(const GlobalValue *GV) {
|
||||
static void checkWasmComdat(const GlobalValue *GV) {
|
||||
const Comdat *C = GV->getComdat();
|
||||
if (!C)
|
||||
return nullptr;
|
||||
return;
|
||||
|
||||
if (C->getSelectionKind() != Comdat::Any)
|
||||
report_fatal_error("Wasm COMDATs only support SelectionKind::Any, '" +
|
||||
C->getName() + "' cannot be lowered.");
|
||||
|
||||
return C;
|
||||
// TODO(sbc): At some point we may need COMDAT support but currently
|
||||
// they are not supported.
|
||||
report_fatal_error("WebAssembly doesn't support COMDATs, '" + C->getName() +
|
||||
"' cannot be lowered.");
|
||||
}
|
||||
|
||||
MCSection *TargetLoweringObjectFileWasm::getExplicitSectionGlobal(
|
||||
const GlobalObject *GO, SectionKind Kind, const TargetMachine &TM) const {
|
||||
StringRef Name = GO->getSection();
|
||||
checkWasmComdat(GO);
|
||||
return getContext().getWasmSection(Name, SectionKind::getData());
|
||||
}
|
||||
|
||||
|
@ -1255,8 +1255,7 @@ static MCSectionWasm *selectWasmSectionForGlobal(
|
|||
MCContext &Ctx, const GlobalObject *GO, SectionKind Kind, Mangler &Mang,
|
||||
const TargetMachine &TM, bool EmitUniqueSection, unsigned *NextUniqueID) {
|
||||
StringRef Group = "";
|
||||
if (getWasmComdat(GO))
|
||||
llvm_unreachable("comdat not yet supported for wasm");
|
||||
checkWasmComdat(GO);
|
||||
|
||||
bool UniqueSectionNames = TM.getUniqueSectionNames();
|
||||
SmallString<128> Name = getSectionPrefixForGlobal(Kind);
|
||||
|
|
|
@ -0,0 +1,5 @@
|
|||
; RUN: not llc -mtriple wasm32-unknown-unknown-wasm %s 2>&1 | FileCheck %s
|
||||
|
||||
$f = comdat any
|
||||
@f = global i32 0, comdat
|
||||
; CHECK: LLVM ERROR: WebAssembly doesn't support COMDATs, 'f' cannot be lowered.
|
Loading…
Reference in New Issue