The following piece of code compiles with gcc-3.0 but not with
gcc-3.2... is this a gcc bug? or is the code broken?

[EMAIL PROTECTED]:~$ gcc-3.2 -c t.c
t.c: In function `foo':
t.c:12: initializer element is not constant

(it's a simplified example of some code from the parisc-linux kernel)

---------------------8<-----------------------
/* compile with gcc -c foo.c */

typedef struct {
        volatile unsigned int lock;
} spinlock_t;

typedef struct {
        spinlock_t lock;
        volatile int counter;
} rwlock_t;

void foo(void)
{
        static rwlock_t x = (rwlock_t) { (spinlock_t) { 1 }, 0 };
}
---------------------8<-----------------------

removing the (rwlock_t) cast allows the initializer construct to
compile, but the kernel also uses the construct to assign values
post-initialization to some variables, in which case the cast 
seems to be required.

e.g. kernel/fork.c has something like this:

    struct *fs = /* allocate memory for fs */;
    fs->lock = (rwlock_t) { ... };

thanks,
randolph
--  
Randolph Chung
Debian GNU/Linux Developer, hppa/ia64 ports
http://www.tausq.org/


Reply via email to