Skip to content

Commit 17ef0fe

Browse files
authored
[clang][OpenCL] Only evaluate initializer once to check for zero init (#141474)
Both Expr::isIntegerConstantExpr() and Expr::EvaluateKnownConstInt() evaluate the expression. Just do it once and check the integer result.
1 parent 1cf5dde commit 17ef0fe

File tree

1 file changed

+5
-5
lines changed

1 file changed

+5
-5
lines changed

clang/lib/Sema/SemaInit.cpp

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6410,9 +6410,9 @@ static bool TryOCLSamplerInitialization(Sema &S,
64106410
return true;
64116411
}
64126412

6413-
static bool IsZeroInitializer(Expr *Initializer, Sema &S) {
6414-
return Initializer->isIntegerConstantExpr(S.getASTContext()) &&
6415-
(Initializer->EvaluateKnownConstInt(S.getASTContext()) == 0);
6413+
static bool IsZeroInitializer(const Expr *Init, ASTContext &Ctx) {
6414+
std::optional<llvm::APSInt> Value = Init->getIntegerConstantExpr(Ctx);
6415+
return Value && Value->isZero();
64166416
}
64176417

64186418
static bool TryOCLZeroOpaqueTypeInitialization(Sema &S,
@@ -6431,7 +6431,7 @@ static bool TryOCLZeroOpaqueTypeInitialization(Sema &S,
64316431
// event should be zero.
64326432
//
64336433
if (DestType->isEventT() || DestType->isQueueT()) {
6434-
if (!IsZeroInitializer(Initializer, S))
6434+
if (!IsZeroInitializer(Initializer, S.getASTContext()))
64356435
return false;
64366436

64376437
Sequence.AddOCLZeroOpaqueTypeStep(DestType);
@@ -6447,7 +6447,7 @@ static bool TryOCLZeroOpaqueTypeInitialization(Sema &S,
64476447
if (DestType->isOCLIntelSubgroupAVCMcePayloadType() ||
64486448
DestType->isOCLIntelSubgroupAVCMceResultType())
64496449
return false;
6450-
if (!IsZeroInitializer(Initializer, S))
6450+
if (!IsZeroInitializer(Initializer, S.getASTContext()))
64516451
return false;
64526452

64536453
Sequence.AddOCLZeroOpaqueTypeStep(DestType);

0 commit comments

Comments
 (0)