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

Reply via email to