[PATCH] D34275: [analyzer] Re-implemente current virtual calls checker in a path-sensitive way
Gábor Horváth via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Wed Jul 12 07:55:45 PDT 2017
xazax.hun added a comment.
Thank you! I think we can start to run this check on real world code bases and evaluate the results.
================
Comment at: lib/StaticAnalyzer/Checkers/VirtualCallChecker.cpp:41
+ void checkPreCall(const CallEvent &Call, CheckerContext &C) const;
+ void ChangeMaps(bool IsBeginFunction, CheckerContext &C) const;
+ void ReportBug(const char *Msg, bool PureError, const MemRegion *Reg,
----------------
Function names should start with a lower case letter. These two could be private. I'd prefer another name for this function like `registerCtorDtorCallInState`.
================
Comment at: lib/StaticAnalyzer/Checkers/VirtualCallChecker.cpp:42
+ void ChangeMaps(bool IsBeginFunction, CheckerContext &C) const;
+ void ReportBug(const char *Msg, bool PureError, const MemRegion *Reg,
+ CheckerContext &C) const;
----------------
Use `StringRef` instead of `const char *`. It is more idiomatic in LLVM code.
================
Comment at: lib/StaticAnalyzer/Checkers/VirtualCallChecker.cpp:179
+ } else {
+ const char *Msg = "Call to virtual function during construction";
+ ReportBug(Msg, false, Reg, C);
----------------
I'd omit the `Msg` local variable. After that, we do not need to use braces for single statement blocks.
================
Comment at: lib/StaticAnalyzer/Checkers/VirtualCallChecker.cpp:210
+ const MemRegion *Reg = ThiSVal.getAsRegion();
+ if (IsBeginFunction) {
+ State = State->set<CtorMap>(Reg, true);
----------------
Braces for single statement blocks.
================
Comment at: lib/StaticAnalyzer/Checkers/VirtualCallChecker.cpp:224
+ const MemRegion *Reg = ThiSVal.getAsRegion();
+ if (IsBeginFunction) {
+ State = State->set<CtorMap>(Reg, true);
----------------
Braces for single statement blocks.
================
Comment at: lib/StaticAnalyzer/Checkers/VirtualCallChecker.cpp:238
+ ExplodedNode *N;
+ if (PureError) {
+ N = C.generateErrorNode();
----------------
Do not use braces for single statement blocks.
https://reviews.llvm.org/D34275
More information about the cfe-commits
mailing list