• Re: GCC bug

    From Tim Rentsch@tr.17687@z991.linuxsc.com to comp.lang.c on Sun Dec 14 22:38:34 2025
    From Newsgroup: comp.lang.c

    Andrey Tarasevich <noone@noone.net> writes:

    An attempt to use designated initializers to explicitly re-initialize
    a sub-member `y` of a struct member `b.a`

    #include <stdio.h>

    struct A { int x, y; };
    struct B { struct A a; };

    int main(void)
    {
    struct A ia = { 1, 2 };
    struct B b = { .a = ia, .a.y = 42 };
    printf("%d %d\n", b.a.x, b.a.y);
    }

    GCC outputs:

    0 42

    I.e. it does initialize `b.a.y` with `42`, but for some reason also
    produces zero in `b.a.x`. Meanwhile, Clang, MSVC output

    1 42

    as expected.

    The funny part is that this exact functionality is actually directly illustrated by the standard in "6.7.11 Initialization" example 12.

    Is it just a bug or is there some defiant reasoning (e.g. "we know
    better") for GCC's behavior?

    Given the example that is shown in the C standard, it seems clear
    that what gcc does is wrong, so may be called a bug.
    --- Synchronet 3.21a-Linux NewsLink 1.2