[Mlir-commits] [mlir] [MLIR][LLVM] Recursion importer handle repeated self-references (PR #87295)
Billy Zhu
llvmlistbot at llvm.org
Mon Apr 8 09:51:43 PDT 2024
================
@@ -216,18 +216,15 @@ DebugTranslation::translateImpl(DIGlobalVariableAttr attr) {
llvm::DIType *
DebugTranslation::translateRecursive(DIRecursiveTypeAttrInterface attr) {
DistinctAttr recursiveId = attr.getRecId();
- if (attr.isRecSelf()) {
- auto *iter = recursiveTypeMap.find(recursiveId);
- assert(iter != recursiveTypeMap.end() && "unbound DI recursive self type");
+ if (auto *iter = recursiveTypeMap.find(recursiveId);
+ iter != recursiveTypeMap.end()) {
return iter->second;
+ } else {
+ assert(!attr.isRecSelf() && "unbound DI recursive self type");
}
auto setRecursivePlaceholder = [&](llvm::DIType *placeholder) {
- [[maybe_unused]] auto [iter, inserted] =
- recursiveTypeMap.try_emplace(recursiveId, placeholder);
- (void)iter;
- (void)inserted;
- assert(inserted && "illegal reuse of recursive id");
+ recursiveTypeMap.try_emplace(recursiveId, placeholder);
----------------
zyx-billy wrote:
oof 🤦 thanks for the test case. I think the emplace here is guaranteed to insert because the check above will return if the recId is found in the map. I see that this use-after-free is the temporary that was created, and then RAUW'ed, but referenced again. I'm afraid we might have just exposed an existing issue with the exporter? Let me take a closer look 👀 ...
https://github.com/llvm/llvm-project/pull/87295
More information about the Mlir-commits
mailing list