gcc "missing initializer" warning with stmt expr

Bug #1648852 reported by Bob Miller
6
This bug affects 1 person
Affects Status Importance Assigned to Milestone
GNU Arm Embedded Toolchain
New
Undecided
Unassigned

Bug Description

The combination of union with anonymous struct member and initializer with statement expression containing a declaration causes a spurious "missing initializer for field" warning.

I am using arm-none-eabi-gcc 5.4.1 20160919. I am using the project-compiled binaries. The bug is also present in 4.9.3 20141119 and 5.2.1 20151202.

Host machine is MacOS 10.11.6.

Transcript:

~$ cat > init-bug.c
union gfx_point {
    struct {
        float x, y;
    };
};

union gfx_point line_p0;

void animate(void)
{
    line_p0 = (union gfx_point) {
#ifdef NO_ERROR
        .x = ({ 0; }),
#else
        .x = ({
            float z = 0;
            z;
        }),
#endif
        .y = 0,
    };
}
~$ arm-none-eabi-gcc --version
arm-none-eabi-gcc (GNU Tools for ARM Embedded Processors) 5.4.1 20160919 (release) [ARM/embedded-5-branch revision 240496]
Copyright (C) 2015 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

~$ arm-none-eabi-gcc -Wextra -c -std=c11 init-bug.c
init-bug.c: In function 'animate':
init-bug.c:20:9: warning: missing initializer for field 'y' of 'struct <anonymous>' [-Wmissing-field-initializers]
         .y = 0,
         ^
init-bug.c:3:18: note: 'y' declared here
         float x, y;
                  ^
~$ arm-none-eabi-gcc -Wextra -c -std=c11 init-bug.c -DNO_ERROR
~$

Revision history for this message
Bob Miller (kbob) wrote :
description: updated
To post a comment you must log in.
This report contains Public information  
Everyone can see this information.

Other bug subscribers

Bug attachments

Remote bug watches

Bug watches keep track of this bug in other bug trackers.