From owner-svn-src-head@freebsd.org Sun Aug 6 11:39:29 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 2AC63DD4B1F; Sun, 6 Aug 2017 11:39:29 +0000 (UTC) (envelope-from brde@optusnet.com.au) Received: from mail105.syd.optusnet.com.au (mail105.syd.optusnet.com.au [211.29.132.249]) by mx1.freebsd.org (Postfix) with ESMTP id E15DB82816; Sun, 6 Aug 2017 11:39:28 +0000 (UTC) (envelope-from brde@optusnet.com.au) Received: from [192.168.0.102] (c110-21-101-228.carlnfd1.nsw.optusnet.com.au [110.21.101.228]) by mail105.syd.optusnet.com.au (Postfix) with ESMTPS id 6FAF51047DC3; Sun, 6 Aug 2017 21:39:19 +1000 (AEST) Date: Sun, 6 Aug 2017 21:39:18 +1000 (EST) From: Bruce Evans X-X-Sender: bde@besplex.bde.org To: Konstantin Belousov cc: Bruce Evans , Hans Petter Selasky , src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: Re: svn commit: r321920 - head/sys/sys In-Reply-To: <20170805074243.GX1700@kib.kiev.ua> Message-ID: <20170806213334.V1366@besplex.bde.org> References: <201708021014.v72AEHEk061037@repo.freebsd.org> <37abc595-c80e-a8da-04a8-815f42c634de@selasky.org> <20170802135455.GG1700@kib.kiev.ua> <20170803122015.Q1093@besplex.bde.org> <20170803075747.GJ1700@kib.kiev.ua> <20170803180419.R2314@besplex.bde.org> <20170803120729.GO1700@kib.kiev.ua> <20170805112924.W1055@besplex.bde.org> <20170805074243.GX1700@kib.kiev.ua> MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII; format=flowed X-Optus-CM-Score: 0 X-Optus-CM-Analysis: v=2.2 cv=KeqiiUQD c=1 sm=1 tr=0 a=PalzARQSbocsUSjMRkwAPg==:117 a=PalzARQSbocsUSjMRkwAPg==:17 a=kj9zAlcOel0A:10 a=RFnRnYDGFsOq-WPcPKwA:9 a=CjuIK1q_8ugA:10 X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 06 Aug 2017 11:39:29 -0000 On Sat, 5 Aug 2017, Konstantin Belousov wrote: > On Sat, Aug 05, 2017 at 12:26:03PM +1000, Bruce Evans wrote: >>> +#define minor(x) ((int)(x)) >> >> Another nice simplification. Strictly, it should be (int)(dev_t)(x) since >> the pseudo-prototype says that the arg is converted to dev_t, but yesterday >> I couldn't see any differences even for exotic x and exotic arches. >> >> Today I can see some difference for exotic x and perverse implementations. >> E.g., x with extra bits in a large signed integer type to invoke >> implementation-defined behaviour, and a perverse implementation that >> truncates to 0 for direct conversion to int but does the right thing >> for indirect conversion). But we depend on the implementation doing >> the right thing for other casts to int. >> >> Also, if dev_t == uintptr_t, it is valid for the caller to keep dev_t's >> in void *'s internally but not to pass void * to minor() or major() >> according to the prototype. However, casting in the macros breaks the >> warning for this. I think pure macros should not cast their args or >> pretend to have prototypes, but require callers to pass args of supported >> types. The old dev_t macros were closer to this -- they have expressions >> like ((x) << 8) which will fail if x is not an integral type or give >> wrong results ix x has extra bits. > So you are arguing to keep the & 0xffffffff operation ? No, I don't want to go that deep. > I think this is not needed, since your note about cast being equivalent > holds for all supported architectures and I do not see anywhere a contract > for the operations to work on non-dev_t. The pseudo-prototypes look like they provide such a contract. They must be read sort of backwards as saying that it is the caller's responsibility to pass args of the type in the pseudo-prototype, like for a K&R function or a C90 function with prototype is in scope. > So are you fine with the posted patch to sys/types.h ? OK. Bruce