Date: Thu, 01 Jan 2009 10:12:36 +0100 From: Christoph Mallon <christoph.mallon@gmx.de> To: Joerg Sonnenberger <joerg@britannica.bec.de> Cc: svn-src-all@freebsd.org Subject: Re: svn commit: r186529 - head/sys/dev/acpi_support Message-ID: <495C8904.8090008@gmx.de> In-Reply-To: <20081228210916.GA13945@britannica.bec.de> References: <200812272048.mBRKmBKo082102@svn.freebsd.org> <20081228045055.GA81182@citylink.fud.org.nz> <20081228223039.cf28e3e2.stas@FreeBSD.org> <4957E8F5.90202@andric.com> <20081228210916.GA13945@britannica.bec.de>
next in thread | previous in thread | raw e-mail | index | archive | help
Joerg Sonnenberger schrieb: > On Sun, Dec 28, 2008 at 10:00:37PM +0100, Dimitry Andric wrote: >> On 2008-12-28 20:30, Stanislav Sedov wrote: >>>>> - ACPI_OBJECT acpiarg[0]; >>>>> + ACPI_OBJECT acpiarg[1]; >>> I wonder how does gcc allowed this. It emits warnings only in >>> pedantic mode which we cannot use to compile kernel with. >> Zero-sized arrays are non-standard, but have been allowed by gcc (and >> many other compilers) since a long time, so it is logical that it >> doesn't warn about it by default. > > Having no size at all would be standard compliant, e.g. acpiarg[[]; No, it wouldn't be standard compliant. You are confusing this with a flexible array member as last entry of a struct declaration (C99 §6.7.2.1:16). As an (old) extension GCC accepts [0] as flexible array member, too. The declaration here is a declaration of an array with automatic storage duration and no linkage. Having nothing in the [] (and no initialiser) would make the array an incomplete type (C99 §6.7.5.2:4), which is not valid for a local variable (C99 §6.2.2:6 and §6.7:7). Also 0 as size expression clearly violates the standard: "If the expression is a constant expression, it shall have a value greater than zero." (C99 §6.7.5.2:1). A local array with length 0 has no practical purpose either. Regards Christoph
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?495C8904.8090008>