[LLVMbugs] [Bug 14921] New: recursive lambda warns "uninitialized within its own definition"

bugzilla-daemon at llvm.org bugzilla-daemon at llvm.org
Fri Jan 11 09:16:58 PST 2013


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

             Bug #: 14921
           Summary: recursive lambda warns "uninitialized within its own
                    definition"
           Product: clang
           Version: 3.2
          Platform: PC
        OS/Version: Linux
            Status: NEW
          Severity: enhancement
          Priority: P
         Component: -New Bugs
        AssignedTo: unassignedclangbugs at nondot.org
        ReportedBy: moritz at bunkus.org
                CC: llvmbugs at cs.uiuc.edu
    Classification: Unclassified


Compiling the following code with "clang++ -std=c++11 -Wuninitialized" results
in the following warning:

cpp1.cpp:9:7: warning: variable 'recur' is uninitialized when used within its
own initialization [-Wuninitialized]
      recur(val - 1);
      ^~~~~
1 warning generated.

This is with clang 3.2 release. I think it has not happened with 3.1, though I
cannot test that at the moment as I don't have 3.1 installed anymore.

The code executes just fine and prints out the expected ("210").

Compiling with "-O2" yields code that runs just as well.

Code:

#include <functional>
#include <iostream>

int
main() {
  std::function<void(unsigned int)> recur = [&recur](unsigned int val) {
    std::cout << val;
    if (val)
      recur(val - 1);
  };

  recur(2);
  std::cout << std::endl;

  return 0;
}

Splitting the assignment into declaration and assignment makes the warning go
away:

  std::function<void(unsigned int)> recur;
  recur = [&recur](unsigned int val) {

-- 
Configure bugmail: http://llvm.org/bugs/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are on the CC list for the bug.



More information about the llvm-bugs mailing list