https://gcc.gnu.org/bugzilla/show_bug.cgi?id=112546
Bug ID: 112546 Summary: -Wmaybe-uninitialized and -Wuninitialized does not detect usage of uninitilazed value in a lambda Product: gcc Version: 13.2.1 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: federico at kircheis dot it Target Milestone: --- I noticed the issue when comparing this three equivalent bar functions: ---- struct data{ int i; }; data foo(); void bar(const data& d); void bar1(){ data d = [&]{bar(d); return foo();}(); } void bar2(){ data d = (bar(d), void(), foo()); } void bar3(){ data d; bar(d); d = foo(); } ---- example on godbolt: https://godbolt.org/z/Wxj6rbKb9 With "-Wmaybe-uninitialized", GCC detects in bar2 and bar3 that d is possible used inside bar without being initialized, but it fails to do so when using a lambda. In fact, I noticed that it fails to report (with "-Wuninitialized") even when the value is used directly in the lambda: ---- void bar4(){ data d = [&]{ ++d.i; bar(d); return foo();}(); } ----