This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
Re: [bugs] Re: GCC problem (Was: Re: [bugs] Problem compiling the kernel)
- From: Bo Thorsen <bo at sonofthor dot dk>
- To: "Joseph S. Myers" <jsm28 at cam dot ac dot uk>, Andreas Jaeger <aj at suse dot de>
- Cc: <bugs at x86-64 dot org>, <gcc at gcc dot gnu dot org>
- Date: Tue, 11 Dec 2001 15:54:18 +0100
- Subject: Re: [bugs] Re: GCC problem (Was: Re: [bugs] Problem compiling the kernel)
- Organization: SuSE Labs
- References: <Pine.LNX.4.33.0112101551130.27525-100000@kern.srcf.societies.cam.ac.uk>
On Monday 10 December 2001 16:57, Joseph S. Myers wrote:
> On Mon, 10 Dec 2001, Andreas Jaeger wrote:
> > > No-one spoke up in favour of this extension (treating compound literals
> > > as if they were the brace-enclosed lists they contain) when I asked
> > > <URL:http://gcc.gnu.org/ml/gcc/2001-11/msg01161.html>, so I killed it
> > > when
> >
> > Seems that nobody noticed this.:-( The Linux kernel relies on this
> > (that's where the example is from) and it seems to work with GCC
> > 2.95.x and GCC 3.0 also.
>
> Can Linux be fixed not to?
I have spent a little time doing this. It's possible to remove the use of
this extension from the kernel (obviously), but it's pretty painful. The
macros using this are all over the place.
The problem is that you can't just change a MACRO(x) (x) { } to MACRO(x) { }
since that gives a *lot* of compilation errors from various places where the
cast is necessary. I'll give you one example of this necessity:
Excepts from include/linux/spinlock.h and include/linux/wait.h:
typedef struct { } rwlock_t;
#define RW_LOCK_UNLOCKED { }
#define WAITQUEUE_RW_LOCK_UNLOCKED RW_LOCK_UNLOCKED
struct __wait_queue_head {
rwlock_t lock;
};
static inline void init_waitqueue_head(struct __wait_queue_head *q)
{
q->lock = WAITQUEUE_RW_LOCK_UNLOCKED;
}
gcc_3.1 -c tmp.c
tmp.c: In function `init_waitqueue_head':
tmp.c:11: parse error before '{' token
But if I change the first define to
#define RW_LOCK_UNLOCKED (rwlock_t) { }
It's compiled without problems.
So, what's wrong here? The (rwlock_t) needs to be removed to make some parts
compile, but then this problem surfaces. To me it looks like the extension is
only partially gone, and this is one of the cases where it's still needed?
Bo.
--
Bo Thorsen | Praestevejen 4
Free software developer | 5290 Marslev
SuSE Labs | Denmark