================ @@ -14924,6 +14924,21 @@ 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(); + // Check that the iterator variable’s type can hold the factor’s bit-width + unsigned factorValWidth = + FactorVal->getIntegerConstantExpr(Context)->getActiveBits(); + unsigned iteratorVWidth = Context.getTypeSize(OrigVar->getType()); + if (factorValWidth > iteratorVWidth) { + Diag(FactorVal->getExprLoc(), diag::err_omp_unroll_factor_width_mismatch) + << factorValWidth << OrigVar->getType() << iteratorVWidth; + return StmtError(); ---------------- AaronBallman wrote:
```suggestion unsigned FactorValWidth = FactorVal->getIntegerConstantExpr(Context)->getActiveBits(); unsigned IteratorVWidth = Context.getTypeSize(OrigVar->getType()); if (FactorValWidth > IteratorVWidth) { Diag(FactorVal->getExprLoc(), diag::err_omp_unroll_factor_width_mismatch) << FactorValWidth << OrigVar->getType() << IteratorVWidth; return StmtError(); ``` https://github.com/llvm/llvm-project/pull/139986 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits