diff options
-rw-r--r-- | llvm/lib/Linker/IRMover.cpp | 2 | ||||
-rw-r--r-- | llvm/lib/Transforms/Utils/ValueMapper.cpp | 9 |
2 files changed, 10 insertions, 1 deletions
diff --git a/llvm/lib/Linker/IRMover.cpp b/llvm/lib/Linker/IRMover.cpp index 272dfcf6dc4..02fe58d2cc5 100644 --- a/llvm/lib/Linker/IRMover.cpp +++ b/llvm/lib/Linker/IRMover.cpp @@ -540,7 +540,7 @@ void IRLinker::materializeInitFor(GlobalValue *New, GlobalValue *Old, if (!F->isDeclaration()) return; } else if (auto *V = dyn_cast<GlobalVariable>(New)) { - if (V->hasInitializer()) + if (V->hasInitializer() || V->hasAppendingLinkage()) return; } else { auto *A = cast<GlobalAlias>(New); diff --git a/llvm/lib/Transforms/Utils/ValueMapper.cpp b/llvm/lib/Transforms/Utils/ValueMapper.cpp index 84dcb42a749..8ab6626202c 100644 --- a/llvm/lib/Transforms/Utils/ValueMapper.cpp +++ b/llvm/lib/Transforms/Utils/ValueMapper.cpp @@ -13,6 +13,7 @@ //===----------------------------------------------------------------------===// #include "llvm/Transforms/Utils/ValueMapper.h" +#include "llvm/ADT/DenseSet.h" #include "llvm/IR/CallSite.h" #include "llvm/IR/Constants.h" #include "llvm/IR/DebugInfoMetadata.h" @@ -99,6 +100,10 @@ class MDNodeMapper; class Mapper { friend class MDNodeMapper; +#ifndef NDEBUG + DenseSet<GlobalValue *> AlreadyScheduled; +#endif + RemapFlags Flags; ValueMapTypeRemapper *TypeMapper; unsigned CurrentMCID = 0; @@ -965,6 +970,7 @@ void Mapper::mapAppendingVariable(GlobalVariable &GV, Constant *InitPrefix, void Mapper::scheduleMapGlobalInitializer(GlobalVariable &GV, Constant &Init, unsigned MCID) { + assert(AlreadyScheduled.insert(&GV).second && "Should not reschedule"); assert(MCID < MCs.size() && "Invalid mapping context"); WorklistEntry WE; @@ -980,6 +986,7 @@ void Mapper::scheduleMapAppendingVariable(GlobalVariable &GV, bool IsOldCtorDtor, ArrayRef<Constant *> NewMembers, unsigned MCID) { + assert(AlreadyScheduled.insert(&GV).second && "Should not reschedule"); assert(MCID < MCs.size() && "Invalid mapping context"); WorklistEntry WE; @@ -995,6 +1002,7 @@ void Mapper::scheduleMapAppendingVariable(GlobalVariable &GV, void Mapper::scheduleMapGlobalAliasee(GlobalAlias &GA, Constant &Aliasee, unsigned MCID) { + assert(AlreadyScheduled.insert(&GA).second && "Should not reschedule"); assert(MCID < MCs.size() && "Invalid mapping context"); WorklistEntry WE; @@ -1006,6 +1014,7 @@ void Mapper::scheduleMapGlobalAliasee(GlobalAlias &GA, Constant &Aliasee, } void Mapper::scheduleRemapFunction(Function &F, unsigned MCID) { + assert(AlreadyScheduled.insert(&F).second && "Should not reschedule"); assert(MCID < MCs.size() && "Invalid mapping context"); WorklistEntry WE; |