[Mlir-commits] [mlir] [MLIR][Utils] Fix the overflow issue in computeSuffixProductImpl for 32-bit system. (PR #140567)

llvmlistbot at llvm.org llvmlistbot at llvm.org
Mon May 19 09:12:04 PDT 2025


llvmbot wrote:


<!--LLVM PR SUMMARY COMMENT-->

@llvm/pr-subscribers-mlir

Author: Chao Chen (chencha3)

<details>
<summary>Changes</summary>

In `int64_t r = strides.size() - 2`, it may cause overflow on 32-bit system when strides.size() is 1. be cause `strides.size()` is a `size_t` which is a `unsigned int` (32-bit), leading 1 - 2 = 4294967295 (on unsigned computing). 

---
Full diff: https://github.com/llvm/llvm-project/pull/140567.diff


1 Files Affected:

- (modified) mlir/lib/Dialect/Utils/IndexingUtils.cpp (+1-1) 


``````````diff
diff --git a/mlir/lib/Dialect/Utils/IndexingUtils.cpp b/mlir/lib/Dialect/Utils/IndexingUtils.cpp
index d9edabef6693d..8de77e2c3cb08 100644
--- a/mlir/lib/Dialect/Utils/IndexingUtils.cpp
+++ b/mlir/lib/Dialect/Utils/IndexingUtils.cpp
@@ -24,7 +24,7 @@ SmallVector<ExprType> computeSuffixProductImpl(ArrayRef<ExprType> sizes,
   if (sizes.empty())
     return {};
   SmallVector<ExprType> strides(sizes.size(), unit);
-  for (int64_t r = strides.size() - 2; r >= 0; --r)
+  for (int64_t r = static_cast<int64_t>(strides.size()) - 2; r >= 0; --r)
     strides[r] = strides[r + 1] * sizes[r + 1];
   return strides;
 }

``````````

</details>


https://github.com/llvm/llvm-project/pull/140567


More information about the Mlir-commits mailing list