[cfe-dev] Undiagnosed "reference to stack memory [...] returned"

Matthieu Monrocq matthieu.monrocq at gmail.com
Wed Sep 15 11:54:18 PDT 2010


Hi Ted,

I haven't got to generate an executable with Clang (issues with the linker,
I am still trying to configure my environment...), on gcc I got a garbage
value in the 3rd case.

Matthieu

2010/9/15 Ted Kremenek <kremenek at apple.com>

> I'm not certain this is a bug.  The 'const int&' causes the lifetime of the
> object returned from get_value() to be extended to its last use.  Does this
> extend to the caller of get_reference_no_warning_2() since that also returns
> a const reference?
>
> On Sep 15, 2010, at 11:04 AM, Matthieu Monrocq wrote:
>
> > Hi guys,
> >
> > here is a very simple test case:
> >
> >     int const& get_reference_warning()
> >     {
> >       int w = 0;
> >       return w; // expected-warning{{reference to stack memory associated
> with local variable 'w' returned}}
> >     }
> >
> >     int get_value();
> >
> >     int const& get_reference_no_warning() { return get_value(); } //
> Diagnosed by VC++ 2010 (haven't tested on gcc), but unnoticed by Clang
> >
> >     int const& get_reference_no_warning_2()
> >     {
> >       int const& w2 = get_value();         // Correct, lifetime of the
> value is extended to the lifetime of the const reference
> >       return w2;                                   // Undefined behavior:
> goes unnoticed by Clang, VC++ 2010 and gcc 3.4.2
> >     }
> >
> > I compiled it with:   clang.exe -fsyntax-only -Wall -pedantic test.cpp
> (on Windows, using PowerShell)
> >
> >     test.cpp(9) :  warning: reference to stack memory associated with
> local variable 'w' returned
> >       return w; // expected-warning{{reference to stack memory associated
> with local variable 'w' returned}}
> >          ^
> >     1 warning generated.
> >
> > As expected, the first return provoked a warning.
> >
> > However in the two other cases, no warning is generated.
> >
> > I was wondering if it would be possible for clang to diagnose those cases
> as well. I guess the third case is the trickier, though since the lifetime
> of the value is correctly extended, therre should be a way to detect that
> `w2` is not just an ordinary const reference. I must admit I haven't come
> over the Clang code base yet so it's still a bit blurry to me (by the way if
> someone could kindly point me to some doc for developers...)
> >
> > Should I file a bug ? (or perhaps one already exists...)
> >
> > Matthieu.
> > _______________________________________________
> > cfe-dev mailing list
> > cfe-dev at cs.uiuc.edu
> > http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20100915/72d6ddb5/attachment.html>


More information about the cfe-dev mailing list