On 2 Sep 2007 13:19:45 -0000, hjl at lucon dot org <[EMAIL PROTECTED]> wrote: > [EMAIL PROTECTED] uninit-2]$ cat x.c > typedef int mpz_t[1]; > typedef struct iterator_stack > { > struct iterator_stack *prev; > mpz_t value; > } iterator_stack; > iterator_stack *x; > void bar (mpz_t); > void > foo () > { > iterator_stack frame; > bar (frame.value); > x = frame.prev; > } > [EMAIL PROTECTED] uninit-2]$ make > /export/build/gnu/gcc/build-x86_64-linux/gcc/xgcc > -B/export/build/gnu/gcc/build-x86_64-linux/gcc/ -O2 -Wuninitialized -S x.c
Not really because this is the same as bar (&frame.value[0]); Where bar can do pointer tricks to get back to original struct and then change prev, trust me, this is allowed. There is a comment in GCC sources about this specific issue.