Skip to content

Commit 274e798

Browse files
authored
[flang] use set_union instead of merge in added DerivedTypeCache (#147024)
When merging the list of recursive reference under two components, duplicates should be removed. If the recursive reference to parents nodes (referred by depth of the parents node) are [1, 2, 5] and [4, 5], the new list should be [1,2,4,5]. With std::merge the order was correct but 5 was duplicated. Use std::set_union instead that removes duplicates. With this patch Fujitsu tests 0394_0030.f90 [1] and 0390_0230.f90 [2]() finally compile with -g in about 10s. Their compilation was hanging before #146543, and they were now hitting an error: "LLVM ERROR: SmallVector unable to grow" which is fixed by this patch. [1]: https://github.com/fujitsu/compiler-test-suite/blob/0d02267bb98b6bfdf46d1f6bbd92e9781c24356c/Fortran/0394/0394_0030.f90 [2]: https://github.com/fujitsu/compiler-test-suite/blob/0d02267bb98b6bfdf46d1f6bbd92e9781c24356c/Fortran/0390/0390_0230.f90
1 parent 0ba5958 commit 274e798

File tree

1 file changed

+3
-3
lines changed

1 file changed

+3
-3
lines changed

flang/lib/Optimizer/Transforms/DebugTypeGenerator.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -303,9 +303,9 @@ void DerivedTypeCache::postComponentVisitUpdate(
303303
return;
304304
ActiveLevels oldLevels;
305305
oldLevels.swap(activeRecursionLevels);
306-
std::merge(componentActiveRecursionLevels.begin(),
307-
componentActiveRecursionLevels.end(), oldLevels.begin(),
308-
oldLevels.end(), std::back_inserter(activeRecursionLevels));
306+
std::set_union(componentActiveRecursionLevels.begin(),
307+
componentActiveRecursionLevels.end(), oldLevels.begin(),
308+
oldLevels.end(), std::back_inserter(activeRecursionLevels));
309309
}
310310

311311
void DerivedTypeCache::finalize(mlir::Type ty, mlir::LLVM::DITypeAttr attr,

0 commit comments

Comments
 (0)