Index: lib/CodeGen/BackendUtil.cpp =================================================================== --- lib/CodeGen/BackendUtil.cpp +++ lib/CodeGen/BackendUtil.cpp @@ -56,6 +56,7 @@ #include "llvm/Transforms/Scalar/GVN.h" #include "llvm/Transforms/Utils/NameAnonGlobals.h" #include "llvm/Transforms/Utils/SymbolRewriter.h" +#include #include using namespace clang; using namespace llvm; @@ -1014,8 +1015,18 @@ continue; auto GUID = GlobalList.first; - assert(GlobalList.second.SummaryList.size() == 1 && - "Expected individual combined index to have one summary per GUID"); + auto &SummaryList = GlobalList.second.SummaryList; + auto MultipleDefPred = [](std::unique_ptr &S) { + auto Linkage = S->linkage(); + return GlobalValue::isAvailableExternallyLinkage(Linkage) || + GlobalValue::isLinkOnceODRLinkage(Linkage) || + GlobalValue::isWeakODRLinkage(Linkage); + }; + assert((SummaryList.size() == 1 || (SummaryList.size() > 1 && + std::all_of(SummaryList.begin(), SummaryList.end(), + MultipleDefPred))) && + "Expected individual combined index to have one summary per GUID or " + "multiple entries if the allow multiple definitions."); auto &Summary = GlobalList.second.SummaryList[0]; // Skip the summaries for the importing module. These are included to // e.g. record required linkage changes.