[clang] [OpenMP] Add diagnostic for 'factor' width mismatch in 'unroll partial' (PR #139986)
Shilei Tian via cfe-commits
cfe-commits at lists.llvm.org
Thu May 15 06:54:11 PDT 2025
================
@@ -14924,8 +14924,25 @@ StmtResult SemaOpenMP::ActOnOpenMPUnrollDirective(ArrayRef<OMPClause *> Clauses,
SourceLocation FactorLoc;
if (Expr *FactorVal = PartialClause->getFactor();
FactorVal && !FactorVal->containsErrors()) {
+ if (!VerifyPositiveIntegerConstantInClause(FactorVal, OMPC_partial,
+ /*StrictlyPositive=*/true,
+ /*SuppressExprDiags=*/false)
+ .isUsable()) {
+ return StmtError();
+ }
+ // Checking if Iterator Variable Type can hold the Factor Width
+ auto FactorValWidth = FactorVal->getIntegerConstantExpr(Context)->getActiveBits();
+ auto IteratorVWidth = Context.getTypeSize(OrigVar->getType());
+ if ( FactorValWidth > IteratorVWidth ) {
+ Diag(FactorVal->getExprLoc(), diag::err_omp_unroll_factor_width_mismatch)
+ << FactorValWidth << OrigVar->getType()
+ << IteratorVWidth;
+ return StmtError();
+ }
+
Factor = FactorVal->getIntegerConstantExpr(Context)->getZExtValue();
FactorLoc = FactorVal->getExprLoc();
+
----------------
shiltian wrote:
unrelated changes
https://github.com/llvm/llvm-project/pull/139986
More information about the cfe-commits
mailing list