diff --git a/include/swift/IRGen/Linking.h b/include/swift/IRGen/Linking.h index ca7024cd87d39..d721ac0d8515c 100644 --- a/include/swift/IRGen/Linking.h +++ b/include/swift/IRGen/Linking.h @@ -1095,6 +1095,14 @@ class ApplyIRLinkage { if (Triple.isOSBinFormatELF()) return; + // WebAssembly: disable COMDATs. + // LLVM's Wasm COMDAT code assumes each COMDAT will be in its own section. + // This works for C++ on Clang, since each COMDAT is emitted into its own + // .rodata. section, + // but not for Swift metadata, which are all placed in the same section. + if (Triple.isOSBinFormatWasm()) + return; + if (IRL.Linkage == llvm::GlobalValue::LinkOnceODRLinkage || IRL.Linkage == llvm::GlobalValue::WeakODRLinkage) if (Triple.supportsCOMDAT())