leonardchan added a comment. In D64256#1626329 <https://reviews.llvm.org/D64256#1626329>, @xazax.hun wrote:
> In D64256#1626279 <https://reviews.llvm.org/D64256#1626279>, @leonardchan > wrote: > > > In D64256#1626025 <https://reviews.llvm.org/D64256#1626025>, @xazax.hun > > wrote: > > > > > In D64256#1625998 <https://reviews.llvm.org/D64256#1625998>, @leonardchan > > > wrote: > > > > > > > Hi. I noticed in our builders that both of the warnings introduced in > > > > this patch are being diagnosed for pointers that don't use GSL at all. > > > > I'm attempting to make a small reproducer now. > > > > > > > > > Hi! > > > > > > Clang now apply GSL annotations for some STL types automatically. So this > > > is the expected behavior. Are any of those warnings unwanted/false > > > positive with the newest Clang version? If so, please share the > > > reproducers and I will either fix them ASAP or revert/turn off the > > > warnings. > > > > > > Thanks! I didn't know that they were applied to stl types. This could > > explain why the warning is raised in my case (std::string), but I don't > > think there's anything wrong in this example that would lead to a warning: > > > > leonardchan@cp-snakewater:~/llvm-monorepo/llvm-build-3-master$ cat > > ~/misc/test.cpp > > #include <string> > > > > std::string MakeStr(); > > void other_func(const char *s); > > > > void func(std::string s) { > > const char *x = MakeStr().c_str(); > > other_func(x); > > } > > leonardchan@cp-snakewater:~/llvm-monorepo/llvm-build-3-master$ > > ~/llvm-monorepo/llvm-build-3-master/bin/clang++ -c ~/misc/test.cpp > > /usr/local/google/home/leonardchan/misc/test.cpp:7:19: warning: object > > backing the pointer will be destroyed at the end of the full-expression > > [-Wdangling] > > const char *x = MakeStr().c_str(); > > ^~~~~~~~~ > > 1 warning generated. > > > > > > This was made using a release build from ToT clang. > > > Thanks for the repro! I think this is a true positive. `MakeStr` will create > a temporary object, and `c_str()` will create a pointer that points into the > buffer owned by the temporary object. At the end of the full expression the > temporary object is destroyed and the result of `c_str` will dangle. Ah you're right! I accidentally glossed over that. This means your patch is working as expected then. Thanks! Repository: rL LLVM CHANGES SINCE LAST ACTION https://reviews.llvm.org/D64256/new/ https://reviews.llvm.org/D64256 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits