[test-suite] CLAMR: port upstream index resize fix in rezone_all (#300)
When running CLAMR with libstdc++ container checks enabled
(_GLIBCXX_DEBUG or _GLIBCXX_ASSERTIONS), Mesh::rezone_all sometimes
aborts with a std::vector<int>::operator[] assertion.
The root cause is that index is resized to new_ncells, but both the
REZONE_NO_OPTIMIZATION and optimized paths fill and read index[ic]
for ic in [0, ncells). On net coarsening steps we have
new_ncells = ncells + add_ncells < ncells,
so index has size new_ncells but is indexed up to ncells - 1, causing
an out-of-bounds access.
Fix this by resizing index to ncells (as done in upstream CLAMR),
because index is a map from old cells to new cells and the loops that
populate and read it always use ic < ncells.
This makes CLAMR pass under libstdc++ debug mode and assertions on
Fedora 42 with GCC 15.
References:
- https://github.com/lanl/CLAMR/blob/master/mesh/mesh.cpp#L2974-L2978
- llvm/llvm-project#144678
- llvm/llvm-test-suite#259 (follow-up for the remaining CLAMR failure)
Signed-off-by: Jerry Zhang Jian <[email protected]>1 file changed