Compiling:

typedef struct t {
    char *d;
    union {
        int aa;
        float ab;
    } a;
} T;

int f() {
    T s = {"one", 1};
    return s.a.aa;
}

with -Wall --std=c99 yields:

structinit.c: In function 'f':
structinit.c:10: warning: missing braces around initializer
structinit.c:10: warning: (near initialization for 's.a')

However, my understanding of C99[/TC3] section 6.7.8, point 17 and in
particular footnote 129 suggests that this initialisation is quite valid.

(Tested here against gcc version 4.2.1 20070719 [FreeBSD]; 3.2.3 on redhat
produced the same warning.)


-- 
           Summary: Initialising a union member of a struct without braces
           Product: gcc
           Version: 4.2.1
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c
        AssignedTo: unassigned at gcc dot gnu dot org
        ReportedBy: stl at koffein dot net


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=37476

Reply via email to