[PATCH] D45532: [StaticAnalyzer] Checker to find uninitialized fields after a constructor call
Umann Kristóf via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Mon Apr 16 06:23:50 PDT 2018
Szelethus updated this revision to Diff 142624.
Szelethus added a comment.
> Would be interesting to extend this checker (maybe in an upcoming patch) to report on uninitialized members not only in constructors, but also copy constructors and move constructors.
Added 3 new test cases. to cover them. Interestingly, move constructors don't emit any warnings - the core can only assert that the fields after a move construction are valid (returns `true` for Val::isValid()`).
Came to think of it, I'm not 100% confident in the checkers name. It could be misleading, as this checker doesn't check constructors, but rather objects after construction. The end of a constructor call is only the point at which we know that analysis can be done.
> This bug report also mentions assignment operator. But for that a warning may be not so useful. In that case the members of the assigned to object should have some initialized value already which the programmer may not want to overwrite in the assignment operator.
I believe there's a checker for that already, but I'm really not sure whether `UndefinedAssignmentChecker` covers all such cases.
Also, I managed to cause a crash with the class `linked_ptr_internal` from google's boringssl when I analyzed the grpc project. I'll look deeper into this, but I have a strong suspicion that the error lies within the CSA core.
https://reviews.llvm.org/D45532
Files:
include/clang/StaticAnalyzer/Checkers/Checkers.td
lib/StaticAnalyzer/Checkers/CMakeLists.txt
lib/StaticAnalyzer/Checkers/CtorUninitializedMemberChecker.cpp
test/Analysis/ctor-uninitialized-member-inheritance.cpp
test/Analysis/ctor-uninitialized-member.cpp
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D45532.142624.patch
Type: text/x-patch
Size: 56399 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20180416/5b0e999d/attachment-0001.bin>
More information about the cfe-commits
mailing list