Date: Fri, 27 Mar 2015 09:31:02 -0500 From: Pedro Giffuni <pfg@FreeBSD.org> To: Bruce Evans <brde@optusnet.com.au>, Tijl Coosemans <tijl@freebsd.org> Cc: svn-src-head@freebsd.org, svn-src-all@freebsd.org, src-committers@freebsd.org, gerald@freebsd.org Subject: Re: svn commit: r280636 - head/include Message-ID: <551569A6.9010601@FreeBSD.org> In-Reply-To: <20150327214341.E2629@besplex.bde.org> References: <201503252153.t2PLrInc025854@svn.freebsd.org> <20150326130403.W993@besplex.bde.org> <551376D4.4030003@FreeBSD.org> <20150326170535.U2239@besplex.bde.org> <20150326142052.6789dd50@kalimero.tijl.coosemans.org> <20150327214341.E2629@besplex.bde.org>
next in thread | previous in thread | raw e-mail | index | archive | help
On 03/27/15 06:01, Bruce Evans wrote: > On Thu, 26 Mar 2015, Tijl Coosemans wrote: > >> On Thu, 26 Mar 2015 17:37:53 +1100 (EST) Bruce Evans >> <brde@optusnet.com.au> wrote: >>> On Wed, 25 Mar 2015, Pedro Giffuni wrote: >>>> On 03/25/15 21:14, Bruce Evans wrote: >>>>> On Wed, 25 Mar 2015, Pedro F. Giffuni wrote: >>>>>> Log: >>>>>> Temporarily revert 280458. >>>>>> >>>>>> GCC is still carries an old version of cdefs.h which doesn't >>>>>> accept multiple parameters for the nonnull attribute. >>>>>> Since this issue probably affects many ports in the tree >>>>>> we will revert it for now until gcc gets fixed. >>>>> >>>>> Note that sys/cdefs.h is supposed to work with any version of >>>>> gcc back to gcc-1, and does mostly work back to at least gcc-2.95. >>>>> The whole point of sys/cdefs.h is to provide compatibity macros >>>>> for old and other non-default compilers. Standard compilers don't >>>>> even have __attribute__(()). So no changes in future versions >>>>> of gcc will fix the previous commit. >>>> >>>> cdefs.h still works for all versions of gcc back to gcc-1 AFAICT. >>> >>> I now remember other bugs in it. I think you put the varargs stuff >>> in the non-gcc version. That won't work compilers that don't support >>> varargs for macros. Neither will not changing the non-gcc version. > > I confirmed the complete brokenness of the varargs stuff for the > non-C99 case. > Hmm ... disabling existing compiler features to get a -Wall error doesn't qualify as complete brokenness. since gcc 2.95 C99 supports vararg macros we are basically talking about support for gcc 2.8 here. >>> glibc (2.6 at least) avoids using varargs in its __nonnull() macro >>> by using the same portable method that is used in many optional >>> debugging statements including FreeBSD's KASSERT(). ... >> >> Maybe introduce a __nonnull_all macro and leave __nonnull varargs-free: >> >> #define __nonnull(x) __attribute__((__nonnull__(x))) >> #define __nonnull_all __attribute__((__nonnull__)) >> >> Then in the rare cases where multiple arguments must be nonnull but >> __nonnull_all doesn't apply you can use multiple __nonnull: >> >> int f(void *, void *, void *) __nonnull(1) __nonnull(2); > > Good idea. There aren't many functions that accept null for some > pointer args but not others. > > The multiple __nonnull() method is already used a lot. E.g., in > sys/systm.h it is used 11 times. systm.h also gives many examples > where __nonnull_all cannot be used. It cannot be used for the > strto* family because endptr can be null, or for the copyinstr() > family for similar reasons (a value may be returned indirectly > but the pointer for this is null if this value is not needed). > This would become very long for some of the functions in pthread.h. I can accept reverting the variadic macro merge in 10-stable but I really think FreeBSD 11 has to move on. Pedro.
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?551569A6.9010601>