[PATCH] D99260: [analyzer] Fix false positives in inner pointer checker (PR49628)

Gabor Marton via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Wed Mar 31 07:47:58 PDT 2021


martong added inline comments.


================
Comment at: clang/test/Analysis/inner-pointer.cpp:23
+
+char *data(std::string &c);
+
----------------
vsavchenko wrote:
> martong wrote:
> > Seems like all test are exercising with std::string, this looks like a legacy in this Checker.
> > Still, I miss a bit at least one test for the other overloads of `std::data`, maybe in a follow up patch?
> I can add it here, but what other test you suggest to add?
For example,
```
    char a[20];
    auto c = std::data(s);
    consume(c);
```
Would this produce a warning?

Similarly to initializer list:
```
template <class E> 
constexpr const E* data(std::initializer_list<E> il) noexcept
{
    return il.begin();
}

int test() {
    auto IL = {0,1,2};
    const auto I = data(IL);
    consume(I);
    return 0;
}
```



================
Comment at: clang/test/Analysis/inner-pointer.cpp:378-392
+void func_addressof() {
+  const char *c;
+  std::string s;
+  c = s.c_str();
+  addressof(s);
+  consume(c); // no-warning
+}
----------------
vsavchenko wrote:
> martong wrote:
> > So these are the FP cases that you are trying to solve?
> > Would be nice to see more details about the bug report (rdar://73463300) if that is not proprietary.
> ```
> std::optional<std::string> str = "example";
> char* dup = strndup(str->c_str(), str->size());
> ```
> `std::optional::operator->` uses `std::addressof` and the analyzer thinks that the pointer might get changed and raises the alarm.
> I decided not to replicate `std::optional` in tests, and get straight to the point.
Okay, thanks, makes sense.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D99260



More information about the cfe-commits mailing list