[cfe-dev] Undiagnosed "reference to stack memory [...] returned"
Ted Kremenek
kremenek at apple.com
Wed Sep 15 11:32:21 PDT 2010
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
More information about the cfe-dev
mailing list