[Bug c/71552] Confusing error for incorrect struct initialization
mpeg.blue at free dot fr
gcc-bugzilla@gcc.gnu.org
Sat Jun 18 07:12:00 GMT 2016
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=71552
--- Comment #2 from Mason <mpeg.blue at free dot fr> ---
Martin,
Please reconsider this bug's resolution.
In my opinion, "conversion of integers to pointers" is a red herring.
This test case (double vs double ptr) triggers the same confusing error:
struct foo { double *p; };
static double d = 0.5;
struct foo bar = { d }; /*** should be &d ***/
$ gcc-6 -c qoi.c
qoi.c:3:20: error: initializer element is not constant
struct foo bar = { d }; /*** should be &d ***/
^
qoi.c:3:20: note: (near initialization for 'bar.p')
My actual code was, in fact, closer to this:
struct xxx { void *p; int a,b,c,d; double x,y; };
struct foo { struct xxx *p; int e,f,g; };
static struct xxx s = { 0 };
struct foo bar = { s }; /*** should be &s ***/
$ gcc-6 -c qoi.c
qoi.c:4:20: error: initializer element is not constant
struct foo bar = { s }; /*** should be &s ***/
^
qoi.c:4:20: note: (near initialization for 'bar.p')
In fact, "simple" incorrect initialization triggers the expected error:
struct xxx { void *p; int a,b,c,d; double x,y; };
struct foo { struct xxx *p; int e,f,g; };
static struct xxx s = { 0 };
void func(void)
{
struct xxx *p = s;
}
$ gcc-6 -c qoi.c
qoi.c: In function 'func':
qoi.c:6:18: error:
incompatible types when initializing type 'struct xxx *' using type 'struct
xxx'
struct xxx *p = s;
^
Couldn't struct member initialization be handled the same way?
Regards.
More information about the Gcc-bugs
mailing list