[PATCH] D114718: [analyzer] Implement a new checker for Strict Aliasing Rule.

Denys Petrov via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Wed Dec 22 09:10:47 PST 2021


ASDenysPetrov updated this revision to Diff 395881.
ASDenysPetrov added a comment.

Added more tests for records (classes, structs, unions). Improved `AccessInferrer`. Removed support of cast kinds such as `DerivedToBase` and `BaseToDerived`, since they are not implied in //[[ https://eel.is/c++draft/basic.lval#11 | C++20 7.2.1 p11 [basic.lval] ]]// paragraph.
TODO: White tests for multi-level casts, e.g.:

  T1 a;              // a
  auto* b = (T2*)&a; // {a, T2}
  auto* c = (T3*)b;  // {{a, T2}, T3}
  auto* d = (T4*)c;  // {{{a, T2}, T3}, T4}
  auto e = *d;

TODO: Fix case with `loc::ConcreteInt`, e.g.:

  T1 *a = nullptr;   // 0 loc
  auto* b = (T2*)&a; // 0 loc
  auto c = *d;       // We are not able to detect an original type and aliased type from 0loc.


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D114718/new/

https://reviews.llvm.org/D114718

Files:
  clang/include/clang/StaticAnalyzer/Checkers/Checkers.td
  clang/lib/StaticAnalyzer/Checkers/CMakeLists.txt
  clang/lib/StaticAnalyzer/Checkers/StrictAliasingChecker.cpp
  clang/test/Analysis/Checkers/StrictAliasingChecker/cv.cpp
  clang/test/Analysis/Checkers/StrictAliasingChecker/enam-ptr-to-scalar.cpp
  clang/test/Analysis/Checkers/StrictAliasingChecker/enam-var-to-scalar.cpp
  clang/test/Analysis/Checkers/StrictAliasingChecker/enum-ptr-to-enum.cpp
  clang/test/Analysis/Checkers/StrictAliasingChecker/enum-ptr-to-record.cpp
  clang/test/Analysis/Checkers/StrictAliasingChecker/enum-var-to-enum.cpp
  clang/test/Analysis/Checkers/StrictAliasingChecker/enum-var-to-record.cpp
  clang/test/Analysis/Checkers/StrictAliasingChecker/enums.h
  clang/test/Analysis/Checkers/StrictAliasingChecker/record-ptr-to-enum.cpp
  clang/test/Analysis/Checkers/StrictAliasingChecker/record-ptr-to-record.cpp
  clang/test/Analysis/Checkers/StrictAliasingChecker/record-ptr-to-scalar.cpp
  clang/test/Analysis/Checkers/StrictAliasingChecker/record-var-to-enum.cpp
  clang/test/Analysis/Checkers/StrictAliasingChecker/record-var-to-record.cpp
  clang/test/Analysis/Checkers/StrictAliasingChecker/record-var-to-scalar.cpp
  clang/test/Analysis/Checkers/StrictAliasingChecker/records.h
  clang/test/Analysis/Checkers/StrictAliasingChecker/scalar-ptr-to-enum.cpp
  clang/test/Analysis/Checkers/StrictAliasingChecker/scalar-ptr-to-record.cpp
  clang/test/Analysis/Checkers/StrictAliasingChecker/scalar-ptr-to-scalar.cpp
  clang/test/Analysis/Checkers/StrictAliasingChecker/scalar-var-to-enum.cpp
  clang/test/Analysis/Checkers/StrictAliasingChecker/scalar-var-to-record.cpp
  clang/test/Analysis/Checkers/StrictAliasingChecker/scalar-var-to-scalar.cpp
  clang/test/Analysis/Checkers/StrictAliasingChecker/typedef.cpp

-------------- next part --------------
A non-text attachment was scrubbed...
Name: D114718.395881.patch
Type: text/x-patch
Size: 187913 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20211222/dfc821f9/attachment-0001.bin>


More information about the cfe-commits mailing list