[clang] [Clang] Fix cluster_dims thread block limit checks (PR #230186)
Petar Jovanovic via cfe-commits
cfe-commits at lists.llvm.org
Thu Oct 8 16:00:07 PDT 2026
================
@@ -6180,10 +6180,13 @@ static void handleLaunchBoundsAttr(Sema &S, Decl *D, const ParsedAttr &AL) {
AL.getNumArgs() > 2 ? AL.getArgAsExpr(2) : nullptr);
}
-static std::pair<Expr *, int>
+static std::pair<Expr *, uint64_t>
makeClusterDimsArgExpr(Sema &S, Expr *E, const CUDAClusterDimsAttr &AL,
const unsigned Idx) {
- if (!E || S.DiagnoseUnexpandedParameterPack(E))
+ if (!E)
+ return {nullptr, 1};
+
+ if (S.DiagnoseUnexpandedParameterPack(E))
----------------
petar-jovanovic wrote:
> I meant to ask the `!E` case, since it was `{}` before, but now it is `{nullptr, 1}`.
I was responding to your comment on !E. Just follow the previous path with cluster_dims(15,15) and you will see that we would return wrong result. !E is not a failure path; it represents an omitted dimension. Since FlatDim is computed as a product, an omitted dimension must contribute 1, not 0. Previously cluster_dims(15, 15) was evaluated as 15 * 15 * 0, which disabled the flat-size check and incorrectly accepted a 225-block cluster. The change only fixes that value; the Expr * remains nullptr and the existing caller logic is unchanged.
https://github.com/llvm/llvm-project/pull/230186
More information about the cfe-commits
mailing list