Does this warrant a bug with gcc? Thank you, Amol On Fri, 17 May 2024 at 20:32, Amol Surati <suratiamol@xxxxxxxxx> wrote: > > Hello, > > [1] says > > "Although any non-initialized subobjects are initialized implicitly, implicit > initialization of a subobject never overrides explicit initialization of the > same subobject if it appeared earlier in the initializer list (choose clang > to observe the correct output)". > > There's a sample program attached on the website at [1] around the > statement, and the behaviour clearly differs between gcc and clang. > > ----------- > This difference is affecting Mesa builds with gcc, because Mesa utilizes > such subobject-init-override patterns. One such instance is within the > function blorp_params_get_clear_kernel_fs listed at [2]. > > The relevant parts were extracted and built into a small test program, > available at [3] (for gcc) and [4] (for clang) > > gcc prints: "" '' > clang prints: "blorp" 'b' > clang does spit out warnings about -Winitializer-overrides before > allowing the compilation to succeed. > > According to the cppref website, Mesa's usage is correct, and it is gcc > that's ignoring the fact that the subobject was previously *explicitly* > initialized. > > The C spec says: > "The initialization shall occur in initializer list order, each initializer > provided for a particular subobject overriding any previously listed > initializer for the same subobject;170) all subobjects that are not > initialized explicitly are subject to default initialization." > > Is there a way to force gcc to behave as clang does? > If not, could you please help determine who exactly is at fault here > and must receive a change/bug request, if needed? > > Thank you, > Amol > ----------------------------- > [1] https://en.cppreference.com/w/c/language/struct_initialization > [2] https://gitlab.freedesktop.org/mesa/mesa/-/blob/main/src/intel/blorp/blorp_clear.c?ref_type=heads > [3] https://godbolt.org/z/env53Wq9M > [4] https://godbolt.org/z/8TMfbb5Ef