From owner-svn-src-all@FreeBSD.ORG Tue Jan 18 17:54:38 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 71D28106566C; Tue, 18 Jan 2011 17:54:38 +0000 (UTC) (envelope-from brde@optusnet.com.au) Received: from mail04.syd.optusnet.com.au (mail04.syd.optusnet.com.au [211.29.132.185]) by mx1.freebsd.org (Postfix) with ESMTP id 0B5A18FC0C; Tue, 18 Jan 2011 17:54:37 +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 mail04.syd.optusnet.com.au (8.13.1/8.13.1) with ESMTP id p0IHsYPv010284 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Wed, 19 Jan 2011 04:54:35 +1100 Date: Wed, 19 Jan 2011 04:54:34 +1100 (EST) From: Bruce Evans X-X-Sender: bde@besplex.bde.org To: John Baldwin In-Reply-To: <201101181215.46266.jhb@freebsd.org> Message-ID: <20110119044805.Y2631@besplex.bde.org> References: <201101181523.p0IFNGeB042079@svn.freebsd.org> <20110119035030.W2099@besplex.bde.org> <201101181215.46266.jhb@freebsd.org> MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII; format=flowed Cc: svn-src-head@freebsd.org, svn-src-all@freebsd.org, src-committers@freebsd.org, Roman Divacky , Bruce Evans Subject: Re: svn commit: r217538 - in head/sys/dev: buslogic cs 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: Tue, 18 Jan 2011 17:54:38 -0000 On Tue, 18 Jan 2011, John Baldwin wrote: > On Tuesday, January 18, 2011 12:00:44 pm Bruce Evans wrote: >> On Tue, 18 Jan 2011, John Baldwin wrote: >> >>> Log: >>> Remove some always-true comparisons. >>> >>> Submitted by: clang via rdivacky >>> >>> Modified: head/sys/dev/buslogic/bt.c >>> > ============================================================================== >>> --- head/sys/dev/buslogic/bt.c Tue Jan 18 14:58:44 2011 (r217537) >>> +++ head/sys/dev/buslogic/bt.c Tue Jan 18 15:23:16 2011 (r217538) >>> @@ -975,7 +975,7 @@ bt_find_probe_range(int ioport, int *por >>> int >>> bt_iop_from_bio(isa_compat_io_t bio_index) >>> { >>> - if (bio_index >= 0 && bio_index < BT_NUM_ISAPORTS) >>> + if (bio_index < BT_NUM_ISAPORTS) >>> return (bt_board_ports[bio_index]); >>> return (-1); >>> } >> >> So, what guarantees that isa_compat_io_t is unsigned and will remain so? >> Indexes should be ints, unless you want a sign morass. > > Gah, I trusted the clang warning too much. enum's are ints in C yes? So > clang has a bug if it thinks an enum value cannot be negative. In practice > all the callers of this routine do not pass in negative values, but the > compiler shouldn't warn about enum's bogusly. I didn't know it was a problem already when I asked. I thought isa_compat_io_t was global, but it is private to bt. > Is clang assuming that only defined values for an enum are ever passed in? If > so we probably don't want to turn that checking on for the kernel as we > violate that in lots of places. enum values are int, but an enum type may be implemented as unsigned if that makes no difference for conforming code. I think conforming code can only used declared enum values. Thus if all declared values are >= 0, as is the case here, then the enum type may be implemented as unsigned. Apparently, this happens for clang here, and it checks what it would do itself. Other compilers might do it differently. Bruce