From b8ec430de71766d9a35a6b737c8a789c0c7cf812 Mon Sep 17 00:00:00 2001 From: Shilei Tian Date: Fri, 4 Feb 2022 15:00:36 -0500 Subject: [PATCH] [Clang][Sema][OpenMP] Fix uninitialized variable Op This can fix the case atomic_messages --- clang/lib/Sema/SemaOpenMP.cpp | 27 +++++++++++++++++++++++---- 1 file changed, 23 insertions(+), 4 deletions(-) diff --git a/clang/lib/Sema/SemaOpenMP.cpp b/clang/lib/Sema/SemaOpenMP.cpp index 4143e07..7486e13 100644 --- a/clang/lib/Sema/SemaOpenMP.cpp +++ b/clang/lib/Sema/SemaOpenMP.cpp @@ -11063,8 +11063,18 @@ bool OpenMPAtomicCompareChecker::checkCondUpdateStmt(IfStmt *S, ErrorInfo.ErrorRange = ErrorInfo.NoteRange = S->getCond()->getSourceRange(); return false; } - if (Cond->getOpcode() != BO_EQ && Cond->getOpcode() != BO_LT && - Cond->getOpcode() != BO_GT) { + + switch (Cond->getOpcode()) { + case BO_EQ: + Op = OMPAtomicCompareOp::EQ; + break; + case BO_LT: + Op = OMPAtomicCompareOp::MIN; + break; + case BO_GT: + Op = OMPAtomicCompareOp::MAX; + break; + default: ErrorInfo.Error = ErrorTy::InvalidBinaryOp; ErrorInfo.ErrorLoc = ErrorInfo.NoteLoc = Cond->getExprLoc(); ErrorInfo.ErrorRange = ErrorInfo.NoteRange = Cond->getSourceRange(); @@ -11148,8 +11158,17 @@ bool OpenMPAtomicCompareChecker::checkCondExprStmt(Stmt *S, return false; } - if (Cond->getOpcode() != BO_EQ && Cond->getOpcode() != BO_LT && - Cond->getOpcode() != BO_GT) { + switch (Cond->getOpcode()) { + case BO_EQ: + Op = OMPAtomicCompareOp::EQ; + break; + case BO_LT: + Op = OMPAtomicCompareOp::MIN; + break; + case BO_GT: + Op = OMPAtomicCompareOp::MAX; + break; + default: ErrorInfo.Error = ErrorTy::InvalidBinaryOp; ErrorInfo.ErrorLoc = ErrorInfo.NoteLoc = Cond->getExprLoc(); ErrorInfo.ErrorRange = ErrorInfo.NoteRange = Cond->getSourceRange(); -- 2.7.4