diff options
Diffstat (limited to 'llvm/lib/Transforms/Utils/ValueMapper.cpp')
-rw-r--r-- | llvm/lib/Transforms/Utils/ValueMapper.cpp | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/llvm/lib/Transforms/Utils/ValueMapper.cpp b/llvm/lib/Transforms/Utils/ValueMapper.cpp index a5981115584..b18af19a981 100644 --- a/llvm/lib/Transforms/Utils/ValueMapper.cpp +++ b/llvm/lib/Transforms/Utils/ValueMapper.cpp @@ -434,7 +434,8 @@ bool MDNodeMapper::mapOperand(const Metadata *Op) { return false; if (Optional<Metadata *> MappedOp = M.mapSimpleMetadata(Op)) { - assert(M.VM.getMappedMD(Op) && "Expected result to be memoized"); + assert((isa<MDString>(Op) || M.VM.getMappedMD(Op)) && + "Expected result to be memoized"); return *MappedOp != Op; } @@ -448,6 +449,9 @@ Optional<Metadata *> MDNodeMapper::getMappedOp(const Metadata *Op) const { if (Optional<Metadata *> MappedOp = M.VM.getMappedMD(Op)) return *MappedOp; + if (isa<MDString>(Op)) + return const_cast<Metadata *>(Op); + return None; } @@ -649,7 +653,7 @@ Optional<Metadata *> Mapper::mapSimpleMetadata(const Metadata *MD) { return *NewMD; if (isa<MDString>(MD)) - return mapToSelf(MD); + return const_cast<Metadata *>(MD); // This is a module-level metadata. If nothing at the module level is // changing, use an identity mapping. |