Hi Ted,<br><br>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.<br><br>Matthieu<br><br><div class="gmail_quote">
2010/9/15 Ted Kremenek <span dir="ltr"><<a href="mailto:kremenek@apple.com">kremenek@apple.com</a>></span><br><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">
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?<br>

<div><div></div><div class="h5"><br>
On Sep 15, 2010, at 11:04 AM, Matthieu Monrocq wrote:<br>
<br>
> Hi guys,<br>
><br>
> here is a very simple test case:<br>
><br>
>     int const& get_reference_warning()<br>
>     {<br>
>       int w = 0;<br>
>       return w; // expected-warning{{reference to stack memory associated with local variable 'w' returned}}<br>
>     }<br>
><br>
>     int get_value();<br>
><br>
>     int const& get_reference_no_warning() { return get_value(); } // Diagnosed by VC++ 2010 (haven't tested on gcc), but unnoticed by Clang<br>
><br>
>     int const& get_reference_no_warning_2()<br>
>     {<br>
>       int const& w2 = get_value();         // Correct, lifetime of the value is extended to the lifetime of the const reference<br>
>       return w2;                                   // Undefined behavior: goes unnoticed by Clang, VC++ 2010 and gcc 3.4.2<br>
>     }<br>
><br>
> I compiled it with:   clang.exe -fsyntax-only -Wall -pedantic test.cpp   (on Windows, using PowerShell)<br>
><br>
>     test.cpp(9) :  warning: reference to stack memory associated with local variable 'w' returned<br>
>       return w; // expected-warning{{reference to stack memory associated with local variable 'w' returned}}<br>
>          ^<br>
>     1 warning generated.<br>
><br>
> As expected, the first return provoked a warning.<br>
><br>
> However in the two other cases, no warning is generated.<br>
><br>
> 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...)<br>

><br>
> Should I file a bug ? (or perhaps one already exists...)<br>
><br>
> Matthieu.<br>
</div></div>> _______________________________________________<br>
> cfe-dev mailing list<br>
> <a href="mailto:cfe-dev@cs.uiuc.edu">cfe-dev@cs.uiuc.edu</a><br>
> <a href="http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev</a><br>
<br>
</blockquote></div><br>