Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 01 Mar 2009 14:10:18 -0800
From:      Julian Elischer <julian@elischer.org>
To:        Ed Schouten <ed@80386.nl>
Cc:        net@FreeBSD.org
Subject:   Re: Making Netgraph compile with LLVM
Message-ID:  <49AB07CA.4070607@elischer.org>
In-Reply-To: <20090301220024.GU19161@hoeg.nl>
References:  <20090301161827.GR19161@hoeg.nl> <49AAFF4F.6010400@elischer.org> <20090301220024.GU19161@hoeg.nl>

next in thread | previous in thread | raw e-mail | index | archive | help
Ed Schouten wrote:
> * Julian Elischer <julian@elischer.org> wrote:
>> Ed Schouten wrote:
>>> Hello all,
>>>
>>> It turns out Netgraph uses a language construct that is only allowed
>>> with GCC, but not with LLVM. According to the specs, LLVM's behaviour is
>>> correct. It is not allowed to do this:
>>>
>>> 	struct a {
>>> 		struct {
>>> 			int i;
>>> 			char j[];
>>> 		} b;
>>> 		char k[20];
>>> 	};
>>>
>>> error: variable sized type 'b' must be at end of struct or class
>> not sure wher eyou are seeing this.
>>
>> the examples you fix don't seem to be nested structs..  what is the  
>> outer struct?
> 
> In the Netgraph code, this isn't done in a single declaration, but there
> are several structs that (indirectly) nest pppoe_tags. An example is
> ng_pppoe.c, line 1179:
> 
> 	struct {
> 		struct pppoe_tag hdr;
> 		union   uniq    data;
> 	} __packed      uniqtag;
> 
> It turns out that this is not valid:
> 
> 	http://llvm.org/bugs/show_bug.cgi?id=3671

then the answer is to create a separate structure 'tag header'
that can be used in both places. I think....


> 




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?49AB07CA.4070607>