diff options
Diffstat (limited to 'llvm/lib/Transforms/Utils/CloneModule.cpp')
-rw-r--r-- | llvm/lib/Transforms/Utils/CloneModule.cpp | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/llvm/lib/Transforms/Utils/CloneModule.cpp b/llvm/lib/Transforms/Utils/CloneModule.cpp index 6de679b..487cd4e 100644 --- a/llvm/lib/Transforms/Utils/CloneModule.cpp +++ b/llvm/lib/Transforms/Utils/CloneModule.cpp @@ -120,9 +120,13 @@ std::unique_ptr<Module> llvm::CloneModule( SmallVector<std::pair<unsigned, MDNode *>, 1> MDs; G.getAllMetadata(MDs); + + // FIXME: Stop using RF_ReuseAndMutateDistinctMDs here, since it's unsound + // to mutate metadata that is still referenced by the source module unless + // the source is about to be discarded (see IRMover for a valid use). for (auto MD : MDs) - GV->addMetadata(MD.first, - *MapMetadata(MD.second, VMap, RF_MoveDistinctMDs)); + GV->addMetadata(MD.first, *MapMetadata(MD.second, VMap, + RF_ReuseAndMutateDistinctMDs)); if (G.isDeclaration()) continue; |