danix800 created this revision. danix800 added reviewers: donat.nagy, steakhal. danix800 added a project: clang. Herald added subscribers: manas, ASDenysPetrov, martong, dkrupp, Szelethus, mikhail.ramalho, a.sidorin, szepet, baloghadamsoftware, xazax.hun. Herald added a reviewer: NoQ. Herald added a project: All. danix800 requested review of this revision. Herald added subscribers: cfe-commits, wangpc.
ExplodedNode might be null and shoud be checked conventionally. Fixes https://github.com/llvm/llvm-project/issues/64647 Repository: rG LLVM Github Monorepo https://reviews.llvm.org/D158858 Files: clang/lib/StaticAnalyzer/Checkers/MPI-Checker/MPIChecker.cpp clang/test/Analysis/mpichecker.cpp Index: clang/test/Analysis/mpichecker.cpp =================================================================== --- clang/test/Analysis/mpichecker.cpp +++ clang/test/Analysis/mpichecker.cpp @@ -389,3 +389,13 @@ void callNonblockingExtern(MPI_Request *req); callNonblockingExtern(&req); } + +bool contains(); +void gh64647() { + if (contains()) { + MPI_Request request_item; + MPI_Wait(&request_item, MPI_STATUS_IGNORE); + // expected-warning@-1 {{Request 'request_item' has no matching nonblocking call.}} + } + gh64647(); +} Index: clang/lib/StaticAnalyzer/Checkers/MPI-Checker/MPIChecker.cpp =================================================================== --- clang/lib/StaticAnalyzer/Checkers/MPI-Checker/MPIChecker.cpp +++ clang/lib/StaticAnalyzer/Checkers/MPI-Checker/MPIChecker.cpp @@ -43,6 +43,9 @@ // double nonblocking detected if (Req && Req->CurrentState == Request::State::Nonblocking) { ExplodedNode *ErrorNode = Ctx.generateNonFatalErrorNode(); + if (!ErrorNode) + return; + BReporter.reportDoubleNonblocking(PreCallEvent, *Req, MR, ErrorNode, Ctx.getBugReporter()); Ctx.addTransition(ErrorNode->getState(), ErrorNode); @@ -83,6 +86,9 @@ if (!Req) { if (!ErrorNode) { ErrorNode = Ctx.generateNonFatalErrorNode(State, &Tag); + if (!ErrorNode) + break; + State = ErrorNode->getState(); } // A wait has no matching nonblocking call. @@ -115,6 +121,9 @@ if (!ErrorNode) { ErrorNode = Ctx.generateNonFatalErrorNode(State, &Tag); + if (!ErrorNode) + break; + State = ErrorNode->getState(); } BReporter.reportMissingWait(Req.second, Req.first, ErrorNode,
Index: clang/test/Analysis/mpichecker.cpp =================================================================== --- clang/test/Analysis/mpichecker.cpp +++ clang/test/Analysis/mpichecker.cpp @@ -389,3 +389,13 @@ void callNonblockingExtern(MPI_Request *req); callNonblockingExtern(&req); } + +bool contains(); +void gh64647() { + if (contains()) { + MPI_Request request_item; + MPI_Wait(&request_item, MPI_STATUS_IGNORE); + // expected-warning@-1 {{Request 'request_item' has no matching nonblocking call.}} + } + gh64647(); +} Index: clang/lib/StaticAnalyzer/Checkers/MPI-Checker/MPIChecker.cpp =================================================================== --- clang/lib/StaticAnalyzer/Checkers/MPI-Checker/MPIChecker.cpp +++ clang/lib/StaticAnalyzer/Checkers/MPI-Checker/MPIChecker.cpp @@ -43,6 +43,9 @@ // double nonblocking detected if (Req && Req->CurrentState == Request::State::Nonblocking) { ExplodedNode *ErrorNode = Ctx.generateNonFatalErrorNode(); + if (!ErrorNode) + return; + BReporter.reportDoubleNonblocking(PreCallEvent, *Req, MR, ErrorNode, Ctx.getBugReporter()); Ctx.addTransition(ErrorNode->getState(), ErrorNode); @@ -83,6 +86,9 @@ if (!Req) { if (!ErrorNode) { ErrorNode = Ctx.generateNonFatalErrorNode(State, &Tag); + if (!ErrorNode) + break; + State = ErrorNode->getState(); } // A wait has no matching nonblocking call. @@ -115,6 +121,9 @@ if (!ErrorNode) { ErrorNode = Ctx.generateNonFatalErrorNode(State, &Tag); + if (!ErrorNode) + break; + State = ErrorNode->getState(); } BReporter.reportMissingWait(Req.second, Req.first, ErrorNode,
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits