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>