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

Matthieu Monrocq matthieu.monrocq at gmail.com
Wed Sep 15 11:04:45 PDT 2010


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.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20100915/a72d54e2/attachment.html>


More information about the cfe-dev mailing list