[analyzer][NFC] Add unittests for CallDescription and split the old ones
authorBalazs Benics <balazs.benics@sigmatechnology.se>
Mon, 18 Oct 2021 12:57:24 +0000 (14:57 +0200)
committerBalazs Benics <balazs.benics@sigmatechnology.se>
Mon, 18 Oct 2021 12:57:24 +0000 (14:57 +0200)
commit5644d152578f4604f7dc8c908a0a3f91a726ad80
treeee5dd991c2a27c894398f79821a12487ad511a95
parentcbf778a592fa5ee7c2bdd3d3ee7b468da2a7c9e6
[analyzer][NFC] Add unittests for CallDescription and split the old ones

This NFC change accomplishes three things:
1) Splits up the single unittest into reasonable segments.
2) Extends the test infra using a template to select the AST-node
   from which it is supposed to construct a `CallEvent`.
3) Adds a *lot* of different tests, documenting the current
   capabilities of the `CallDescription`. The corresponding tests are
   marked with `FIXME`s, where the current behavior should be different.

Both `CXXMemberCallExpr` and `CXXOperatorCallExpr` are derived from
`CallExpr`, so they are matched by using the default template parameter.
On the other hand, `CXXConstructExpr` is not derived from `CallExpr`.
In case we want to match for them, we need to pass the type explicitly
to the `CallDescriptionAction`.

About destructors:
They have no AST-node, but they are generated in the CFG machinery in
the analyzer. Thus, to be able to match against them, we would need to
construct a CFG and walk on that instead of simply walking the AST.

I'm also relaxing the `EXPECT`ation in the
`CallDescriptionConsumer::performTest()`, to check the `LookupResult`
only if we matched for the `CallDescription`.
This is necessary to allow tests in which we expect *no* matches at all.

Reviewed By: martong

Differential Revision: https://reviews.llvm.org/D111794
clang/unittests/StaticAnalyzer/CallDescriptionTest.cpp