https://gcc.gnu.org/bugzilla/show_bug.cgi?id=111771
Bug ID: 111771
Summary: Incorrect "is used uninitialized" warning, as if
zero-initialization didn't propagate through
user-provided default constructors
Product: gcc
Version: 13.2.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
Assignee: unassigned at gcc dot gnu.org
Reporter: iamsupermouse at mail dot ru
Target Milestone: ---
Here's the code. GCC with `-Wall -O3` warns that `x` is used uninitialized,
even though it's zeroed.
struct A
{
A() {}
int x;
};
struct B : A {};
int main()
{
B b = B();
return b.x;
}
Since `B` doesn't have a user-provided default constructor, value-initializing
it like this performs zero-initialization, which propagates recursively
(http://eel.is/c++draft/dcl.dcl#dcl.init.general-6.2) over all members, zeroing
everything. Yet GCC incorrectly warns about `x` being uninitialized.