From patchwork Thu Oct 30 21:06:38 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Roland McGrath X-Patchwork-Id: 405133 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from sourceware.org (server1.sourceware.org [209.132.180.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 1916D140080 for ; Fri, 31 Oct 2014 08:06:47 +1100 (AEDT) DomainKey-Signature: a=rsa-sha1; c=nofws; d=sourceware.org; h=list-id :list-unsubscribe:list-subscribe:list-archive:list-post :list-help:sender:mime-version:content-type :content-transfer-encoding:from:to:subject:message-id:date; q= dns; s=default; b=TXN+BIW3ka64fcGflZ2s0cn+WMXWD4528v2VH6Y8logmEh bzPbEwMIn0ABbANkqsAlwEquOHH+tgcaA7j/+Fwqwr+yREHjHy5Ed+JkgEtDBzEg W1qouYYd6/VB6ddhJ4F+cMvUhy6zJL+vhLNaqwiTKCppaWoNFBHCguecfa52o= DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=sourceware.org; h=list-id :list-unsubscribe:list-subscribe:list-archive:list-post :list-help:sender:mime-version:content-type :content-transfer-encoding:from:to:subject:message-id:date; s= default; bh=uA2dRhrRAQTJYi29UXw0g18mHOE=; b=ykHiytcF0/O8l3hi54kt mKs3GIQwczJEHw4UAo/fQ/QmJz7m4xP9gAbtonj3nGycFO84Epcao+RDPRMN56ZJ E03qvhu/efZrJicaU74dzoE53cVfoWUR+fjjG2ZRv8AlLbXviRDndxPJ94/81jLr 5906gyg3lej/10EP971NSvw= Received: (qmail 30734 invoked by alias); 30 Oct 2014 21:06:42 -0000 Mailing-List: contact libc-alpha-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: libc-alpha-owner@sourceware.org Delivered-To: mailing list libc-alpha@sourceware.org Received: (qmail 30723 invoked by uid 89); 30 Oct 2014 21:06:41 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-2.2 required=5.0 tests=AWL, BAYES_00 autolearn=ham version=3.3.2 X-HELO: topped-with-meat.com MIME-Version: 1.0 From: Roland McGrath To: "GNU C. Library" Subject: [COMMITTED PATCH] Clean up internal ctype.h header. Message-Id: <20141030210638.917922C3B15@topped-with-meat.com> Date: Thu, 30 Oct 2014 14:06:38 -0700 (PDT) X-CMAE-Score: 0 X-CMAE-Analysis: v=2.1 cv=SvUDtp+0 c=1 sm=1 tr=0 a=WkljmVdYkabdwxfqvArNOQ==:117 a=14OXPxybAAAA:8 a=kj9zAlcOel0A:10 a=hOe2yjtxAAAA:8 a=jVdSMGeGhmcr-zEh7-kA:9 a=CjuIK1q_8ugA:10 This avoids some badness such as defining extern inlines before their normal extern declarations. In general, every include/foo.h wrapper should start with #include . This has almost no effect on generated code. On x86_64-linux-gnu with gcc 4.8.2, only nsswitch.c and getaddrinfo.c produced slightly different code. It differs in some register allocation and scheduling choices, but does not appear to differ in any meaningful way. I have no idea why the code differs at all. Thanks, Roland 2014-10-30 Roland McGrath * include/ctype.h: Include first thing rather than after defining inlines. Instead, just use parens to defeat macro expansion of __isctype in its declaration. --- a/include/ctype.h +++ b/include/ctype.h @@ -1,11 +1,15 @@ #ifndef _CTYPE_H +#include + #ifndef _ISOMAC /* Initialize ctype locale data. */ extern void __ctype_init (void); libc_hidden_proto (__ctype_init) -extern int __isctype (int __c, int __mask); +/* ctype/ctype.h defined this as a macro and we don't want to #undef it. + So defeat macro expansion with parens for this declaration. */ +extern int (__isctype) (int __c, int __mask); # ifndef NOT_IN_libc @@ -46,22 +50,18 @@ __ctype_tolower_loc (void) return __libc_tsd_address (const int32_t *, CTYPE_TOLOWER); } -# endif /* Not NOT_IN_libc. */ -#endif - -#include - -#ifndef _ISOMAC -# if !defined __NO_CTYPE && !defined NOT_IN_libc +# ifndef __NO_CTYPE /* The spec says that isdigit must only match the decimal digits. We can check this without a memory access. */ -# undef isdigit -# define isdigit(c) ({ int __c = (c); __c >= '0' && __c <= '9'; }) -# undef isdigit_l -# define isdigit_l(c, l) ({ int __c = (c); __c >= '0' && __c <= '9'; }) -# undef __isdigit_l -# define __isdigit_l(c, l) ({ int __c = (c); __c >= '0' && __c <= '9'; }) -# endif -#endif +# undef isdigit +# define isdigit(c) ({ int __c = (c); __c >= '0' && __c <= '9'; }) +# undef isdigit_l +# define isdigit_l(c, l) ({ int __c = (c); __c >= '0' && __c <= '9'; }) +# undef __isdigit_l +# define __isdigit_l(c, l) ({ int __c = (c); __c >= '0' && __c <= '9'; }) +# endif /* Not __NO_CTYPE. */ + +# endif /* Not NOT_IN_libc. */ +#endif /* Not _ISOMAC. */ #endif /* ctype.h */