Commit Graph

3 Commits

Author SHA1 Message Date
Shuai Wang 71235610d1 [NFC] cosmetic tweaks to ExprMutationAnalyzer to be more consistent
especially considering future changes.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@342340 91177308-0d34-0410-b5e6-96231b3b80d8
2018-09-15 21:38:18 +00:00
Shuai Wang 2530891b27 [analyzer] Handle forwarding reference better in ExprMutationAnalyzer.
Summary:
We used to treat an `Expr` mutated whenever it's passed as non-const
reference argument to a function. This results in false positives in
cases like this:
```
int x;
std::vector<int> v;
v.emplace_back(x); // `x` is passed as non-const reference to `emplace_back`
```
In theory the false positives can be suppressed with
`v.emplace_back(std::as_const(x))` but that's considered overly verbose,
inconsistent with existing code and spammy as diags.

This diff handles such cases by following into the function definition
and see whether the argument is mutated inside.

Reviewers: lebedev.ri, JonasToth, george.karpenkov

Subscribers: xazax.hun, szepet, a.sidorin, mikhail.ramalho, Szelethus, cfe-commits

Differential Revision: https://reviews.llvm.org/D52008

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@342271 91177308-0d34-0410-b5e6-96231b3b80d8
2018-09-14 20:07:18 +00:00
Shuai Wang e716a0c90e [analyzer] Add ExprMutationAnalyzer
Summary:
This is 1/2 of moving ExprMutationAnalyzer from clangtidy to
clang/Analysis.
This diff along simply copies the ExprMutationAnalyzer over with trivial
modifications (e.g. include path, namespace)
2/2 will migrate existing usage of ExprMutationAnalyzer and remove the
original copy inside clangtidy.

Reviewers: george.karpenkov

Subscribers: mgorny, xazax.hun, szepet, a.sidorin, mikhail.ramalho, Szelethus, cfe-commits, JonasToth

Differential Revision: https://reviews.llvm.org/D51948

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@341994 91177308-0d34-0410-b5e6-96231b3b80d8
2018-09-11 21:13:20 +00:00