[Mlir-commits] [mlir] 51dd3ec - [MLIR][OpenMP] Bail early in sortMapIndices if indices are the same (#169474)
llvmlistbot at llvm.org
llvmlistbot at llvm.org
Tue Nov 25 03:23:17 PST 2025
Author: Aiden Grossman
Date: 2025-11-25T06:23:12-05:00
New Revision: 51dd3ec13c51b0e399cbceafb84698b7241ed731
URL: https://github.com/llvm/llvm-project/commit/51dd3ec13c51b0e399cbceafb84698b7241ed731
DIFF: https://github.com/llvm/llvm-project/commit/51dd3ec13c51b0e399cbceafb84698b7241ed731.diff
LOG: [MLIR][OpenMP] Bail early in sortMapIndices if indices are the same (#169474)
If we are given the same index in the comparator callback, simply return
false. Otherwise we will end up adding invalid items to
occludedChildren, causing extra items to get removed that should not be,
resulting in failures that manifest in different forms (assertions, asan
failures, ubsan failures, etc.).
Added:
Modified:
mlir/lib/Target/LLVMIR/Dialect/OpenMP/OpenMPToLLVMIRTranslation.cpp
Removed:
################################################################################
diff --git a/mlir/lib/Target/LLVMIR/Dialect/OpenMP/OpenMPToLLVMIRTranslation.cpp b/mlir/lib/Target/LLVMIR/Dialect/OpenMP/OpenMPToLLVMIRTranslation.cpp
index 5511f4f1af1ad..98775c2d18bd4 100644
--- a/mlir/lib/Target/LLVMIR/Dialect/OpenMP/OpenMPToLLVMIRTranslation.cpp
+++ b/mlir/lib/Target/LLVMIR/Dialect/OpenMP/OpenMPToLLVMIRTranslation.cpp
@@ -4095,6 +4095,12 @@ static void sortMapIndices(llvm::SmallVectorImpl<size_t> &indices,
llvm::SmallVector<size_t> occludedChildren;
llvm::sort(
indices.begin(), indices.end(), [&](const size_t a, const size_t b) {
+ // Bail early if we are asked to look at the same index. If we do not
+ // bail early, we can end up mistakenly adding indices to
+ // occludedChildren. This can occur with some types of libc++ hardening.
+ if (a == b)
+ return false;
+
auto memberIndicesA = cast<ArrayAttr>(indexAttr[a]);
auto memberIndicesB = cast<ArrayAttr>(indexAttr[b]);
More information about the Mlir-commits
mailing list