[PATCH] D155084: [analyzer] Fix crash in MoveChecker when it tries to report duplicate issue
Tomasz KamiĆski via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Thu Jul 13 01:23:55 PDT 2023
This revision was automatically updated to reflect the committed changes.
Closed by commit rGd172b65ef001: [analyzer] Fix crash in MoveChecker when it tries to report duplicate issue (authored by arseniy-sonar, committed by tomasz-kaminski-sonarsource).
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D155084/new/
https://reviews.llvm.org/D155084
Files:
clang/lib/StaticAnalyzer/Checkers/MoveChecker.cpp
Index: clang/lib/StaticAnalyzer/Checkers/MoveChecker.cpp
===================================================================
--- clang/lib/StaticAnalyzer/Checkers/MoveChecker.cpp
+++ clang/lib/StaticAnalyzer/Checkers/MoveChecker.cpp
@@ -213,8 +213,9 @@
// Returns the exploded node against which the report was emitted.
// The caller *must* add any further transitions against this node.
- ExplodedNode *reportBug(const MemRegion *Region, const CXXRecordDecl *RD,
- CheckerContext &C, MisuseKind MK) const;
+ // Returns nullptr and does not report if such node already exists.
+ ExplodedNode *tryToReportBug(const MemRegion *Region, const CXXRecordDecl *RD,
+ CheckerContext &C, MisuseKind MK) const;
bool isInMoveSafeContext(const LocationContext *LC) const;
bool isStateResetMethod(const CXXMethodDecl *MethodDec) const;
@@ -377,19 +378,20 @@
return;
}
- ExplodedNode *N = reportBug(Region, RD, C, MK);
+ ExplodedNode *N = tryToReportBug(Region, RD, C, MK);
// If the program has already crashed on this path, don't bother.
- if (N->isSink())
+ if (!N || N->isSink())
return;
State = State->set<TrackedRegionMap>(Region, RegionState::getReported());
C.addTransition(State, N);
}
-ExplodedNode *MoveChecker::reportBug(const MemRegion *Region,
- const CXXRecordDecl *RD, CheckerContext &C,
- MisuseKind MK) const {
+ExplodedNode *MoveChecker::tryToReportBug(const MemRegion *Region,
+ const CXXRecordDecl *RD,
+ CheckerContext &C,
+ MisuseKind MK) const {
if (ExplodedNode *N = misuseCausesCrash(MK) ? C.generateErrorNode()
: C.generateNonFatalErrorNode()) {
// Uniqueing report to the same object.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D155084.539889.patch
Type: text/x-patch
Size: 1958 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20230713/0cd332cf/attachment-0001.bin>
More information about the cfe-commits
mailing list