https://gcc.gnu.org/bugzilla/show_bug.cgi?id=120135
--- Comment #5 from Andrew Bell <andrew.bell.ia at gmail dot com> --- The emitted warning is somewhat confusing because it doesn't reference the constructor, which is where the initialization is missing. Also, this generates no warning: struct S { int i_; double d_; S() {} }; S func() { return S(); } and I'm not sure how returning an uninitialized structure is different from assigning it. But I understand tracking such uninitialized data is difficult and it's fine to close this if you like. Thanks for looking.