clang does not warn about uninitialized reads in lambdas (original) (raw)

This warns (as it should):

$ cat test.cc
struct S {};

void g() {
  S s1 = s1;
}
$ out/gn/bin/clang -c test.cc
test.cc:4:10: warning: variable 's1' is uninitialized when used within its own initialization [-Wuninitialized]
    4 |   S s1 = s1;
      |     ~~   ^~
1 warning generated.

This doesn't (but should, too):

$ cat test.cc
struct S {};

void g() {
  S s2 = [&]() { return s2; }();
}
$ out/gn/bin/clang -c test.cc
# No diag