From owner-svn-src-all@FreeBSD.ORG Sat Jan 15 06:27:46 2011 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id D7C54106566B; Sat, 15 Jan 2011 06:27:46 +0000 (UTC) (envelope-from brde@optusnet.com.au) Received: from mail03.syd.optusnet.com.au (mail03.syd.optusnet.com.au [211.29.132.184]) by mx1.freebsd.org (Postfix) with ESMTP id 5B0998FC0A; Sat, 15 Jan 2011 06:27:45 +0000 (UTC) Received: from c122-106-165-206.carlnfd1.nsw.optusnet.com.au (c122-106-165-206.carlnfd1.nsw.optusnet.com.au [122.106.165.206]) by mail03.syd.optusnet.com.au (8.13.1/8.13.1) with ESMTP id p0F6RhDC017926 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Sat, 15 Jan 2011 17:27:43 +1100 Date: Sat, 15 Jan 2011 17:27:42 +1100 (EST) From: Bruce Evans X-X-Sender: bde@besplex.bde.org To: Garrett Cooper In-Reply-To: Message-ID: <20110115170529.T16715@besplex.bde.org> References: <201101131820.p0DIKXip059402@svn.freebsd.org> <20110114174719.D28159@besplex.bde.org> <20110115133929.D16210@besplex.bde.org> MIME-Version: 1.0 Content-Type: MULTIPART/MIXED; BOUNDARY="0-2066649743-1295072862=:16715" Cc: svn-src-head@freebsd.org, mdf@freebsd.org, svn-src-all@freebsd.org, src-committers@freebsd.org, Bruce Evans Subject: Re: svn commit: r217369 - in head/sys: cam/scsi sys X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 15 Jan 2011 06:27:47 -0000 This message is in MIME format. The first part should be readable text, while the remaining parts are likely unreadable without MIME-aware tools. --0-2066649743-1295072862=:16715 Content-Type: TEXT/PLAIN; charset=X-UNKNOWN; format=flowed Content-Transfer-Encoding: QUOTED-PRINTABLE On Fri, 14 Jan 2011, Garrett Cooper wrote: > On Fri, Jan 14, 2011 at 6:42 PM, Bruce Evans wrote= : >> On Fri, 14 Jan 2011 mdf@FreeBSD.org wrote: >> >>> On Thu, Jan 13, 2011 at 10:50 PM, Bruce Evans >>> wrote: >>>> >>>> On Thu, 13 Jan 2011 mdf@freebsd.org wrote: >>>> >>>>> There appear to be 330 uses of SYSCTL and QUAD on the same line in >>>>> CURRENT. =A0This seems reasonable to change them to S64, U64 and X64 = so >>>>> they correctly reflect the size they operate upon. >>>>> >>>>> What do y'all think? >>>> >>>> Now I suggest delaying this until they can be renamed to a type- gener= ic >>>> SYSCTL_INT() (would probably need to be spelled differently, SYSCTL_I(= ) >>>> say, even if SYSCTL_INT() was changed at the same time). >>> >>> I'm torn on this one. =A0The compiler knows the type (unless, for >>> SYSCTL_INT, NULL/0 is used, but that is also a compile-time check), >>> but to interpret it requires the use of __builtin_foo which is a gcc >>> extension and not part of standard C. >>> >>> Philosophically, while I like this kind of letting the compiler do the >>> work, if you want C++ you know where to find it. >> >> Oops. =A0I think sizeof() and issigned() can be used to determine the ty= pe >> well enough in functions and initialized data (do a fuller type check if >> the compiler supports it), but I don't know how to do this in static >> sysctl declarations (since sizeof() can't be used in cpp expressions). > > Why not just create some dumb testcases that can be run at build > time to determine that for you? Well, how? You are given SYSCTL_I(&var, ...) and have to convert this to what is now in SYSCTL_INT(), using only the type of var, in hundreds or thousands of files. I don't even know how to do this with a test case for each file, short of parsing all the files. Oops, I do know how to translate from sizeof(var) to CTLTYPE_INT or CTLTYPE_UINT. That's just (sizeof(var) =3D=3D sizeof(int) ? CTLTYPE_INT : ...). The signness is harder (might need gnu typeof(), but not the recent type checking attributes). This won't convert from SYSCTL_I() existing SYSCTL_INT() (the switch on the size would have to be in an ifdef for that, but sizeof() doesn't work in ifdefs), but it works for generating CTLTYPE_* internally SYSCTL_I(). The difficulty is converting from a bare variable `var' to an integer representing the signedness of its type, without using an unportability like typeof(). With typeof(), this is: =09/* Only works for arithmetic types: */ =09#define=09isinteger(var)=09((typeof(var))0.1 =3D=3D 0) =09#define=09issigned(var)=09((typeof(var))-1 < 0) =09... Bruce --0-2066649743-1295072862=:16715--