http://llvm.org/bugs/show_bug.cgi?id=22833

            Bug ID: 22833
           Summary: False "undefined or garbage value returned" from C++14
                    lambda capture
           Product: clang
           Version: 3.5
          Hardware: Macintosh
                OS: MacOS X
            Status: NEW
          Severity: normal
          Priority: P
         Component: Static Analyzer
          Assignee: [email protected]
          Reporter: [email protected]
                CC: [email protected]
    Classification: Unclassified

Created attachment 14003
  --> http://llvm.org/bugs/attachment.cgi?id=14003&action=edit
Runnable example

Giving a lambda capture parameter an explicit value (new feature in C++14)
causes the analyzer to believe that value is undefined.  The simplest code
snippet which exhibits the problem:


    auto f1 = [a=1] () {
        return a;
    };
    const function<int()> f2 = f1;

/ws/art_hack/ArtCppHack/ArtCppHack/main.cpp:24:9: warning: Undefined or garbage
value returned to caller
        return a;
        ^~~~~~~~
1 warning generated.


Creating the std::function is required to get the analyzer to analyze the
return path in a way which triggers the warning.  Calling the lambda locally
instead doesn't cause the warning.  Passing it to a template function which
calls it does trigger the warning.  It doesn't seem to matter what the type of
the captured variable is, or what the expression assigned to it is.  The
constant int above is the simplest example, but our real code is capturing a
shared_ptr, and gets the warning on the return value from its operator->.

I'd love to hear if there's a workaround for this I can use cleanly in my code,
short of using "#ifdef __clang_analyzer__" to compile out the whole body.

The code compiles and runs correctly, so it's only the analyzer which is
confused.  I'm using the analyzer integrated into Xcode 6.1.1.  A colleague
confirmed the same bug in Xcode 6.3b2.

-- 
You are receiving this mail because:
You are on the CC list for the bug.
_______________________________________________
LLVMbugs mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/llvmbugs

Reply via email to