[clang][dataflow] Add matchers for smart pointer accessors to be cached (#120102)

This is part 1 of caching for smart pointer accessors, building on top
of the CachedConstAccessorsLattice, which caches "normal" accessors.

Smart pointer accessors are a bit different in that they may:
- have aliases to access the same underlying data (but potentially
  returning slightly different types like `&` vs `*`). Within a
  "checked" sequence users may mix uses of the different aliases and the
  check should apply to any of the spellings.
- may have non-const overloads in addition to the const version, where
  the non-const doesn't actually modify the container

Part 2 will follow and add transfer functions utilities. It will also
add a user UncheckedOptionalAccessModel. We'd seen false positives when
nesting StatusOr<optional<T>> and optional<StatusOr<T>>, etc. which this
can help address.

GitOrigin-RevId: 54309b1c2f7a9acdb91ae1735cf4eb0877eadfc0
5 files changed
tree: 400f3ab479f391d93ebb3dcbc68a890f2f4a9784
  1. bindings/
  2. cmake/
  3. docs/
  4. examples/
  5. include/
  6. lib/
  7. runtime/
  8. test/
  9. tools/
  10. unittests/
  11. utils/
  12. www/
  13. .clang-format
  14. .clang-tidy
  15. .gitignore
  16. CMakeLists.txt
  17. INSTALL.txt
  18. LICENSE.TXT
  19. Maintainers.rst
  20. NOTES.txt
  21. README.md
README.md

C language Family Front-end

Welcome to Clang.

This is a compiler front-end for the C family of languages (C, C++ and Objective-C) which is built as part of the LLVM compiler infrastructure project.

Unlike many other compiler frontends, Clang is useful for a number of things beyond just compiling code: we intend for Clang to be host to a number of different source-level tools. One example of this is the Clang Static Analyzer.

If you're interested in more (including how to build Clang) it is best to read the relevant websites. Here are some pointers: