mailing list of musl libc
 help / color / mirror / code / Atom feed
From: Morten Welinder <mwelinder@gmail.com>
To: musl@lists.openwall.com
Subject: Re: Explicit casts in ctype.h suppress compiler warnings
Date: Fri, 17 Apr 2015 22:03:53 -0400	[thread overview]
Message-ID: <CANv4PNkN6=MKEhcDf6bgQwSo_dSKFFhhr7ha_T8mKOVQU0DdJQ@mail.gmail.com> (raw)
In-Reply-To: <20150417213602.GF6817@brightrain.aerifal.cx>

Ideally isspace and friends should also cause a warning
if called with a "char" or "signed char" argument.  Such calls
are generally wrong unless the range of the argument
can somehow be controlled.  ("char" might be unsigned,
for example.)

The number of people who have no idea why they should
not make such calls is astounding.  The typical response
is to blame the compiler and add an (int) cast.  The search
at

    https://searchcode.com/?q=isspace+%28int%29

claims ~55k instances.  Ignore the first page which is finding
isspace implementations, but incorrect uses.

M.






On Fri, Apr 17, 2015 at 5:36 PM, Rich Felker <dalias@libc.org> wrote:
> On Fri, Apr 17, 2015 at 09:24:09PM +0300, Alexander Monakov wrote:
>> > Do you have an idea in mind for how we could achieve that? I suspect
>> > the macros are still better optimizable than the inline function
>> > approach, so I'd lean towards doing a macro that avoids evaluating c
>> > and just checks its type, which would involve using ?: I think.
>>
>> I admit I was thinking of doing isspace-style inlines everywhere, but thanks
>> to your suggestion I was able to come up with this:
>>
>> static __inline void __is_int(int a) {}
>> #define isdigit(a) (__is_int(0?(a):0), ((unsigned)(a)-'0') < 10)
>
> This still depends on the inline function getting honored, and puts
> extra crap in the debug output. Instead, how about:
>
> #define isdigit(a) (0 ? (isdigit)(a) : ((unsigned)(a)-'0') < 10)
>
> Rich


  reply	other threads:[~2015-04-18  2:03 UTC|newest]

Thread overview: 13+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-04-17 10:59 Alexander Monakov
2015-04-17 16:49 ` Jens Gustedt
2015-04-17 16:52   ` Rich Felker
2015-04-17 18:24     ` Alexander Monakov
2015-04-17 18:35       ` Szabolcs Nagy
2015-04-17 19:43         ` Szabolcs Nagy
2015-04-17 20:21           ` Rich Felker
2015-04-17 20:32             ` Szabolcs Nagy
2015-04-17 20:34         ` Jens Gustedt
2015-04-17 21:36       ` Rich Felker
2015-04-18  2:03         ` Morten Welinder [this message]
2015-04-17 19:33     ` William Ahern
2015-04-17 16:50 ` Rich Felker

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to='CANv4PNkN6=MKEhcDf6bgQwSo_dSKFFhhr7ha_T8mKOVQU0DdJQ@mail.gmail.com' \
    --to=mwelinder@gmail.com \
    --cc=musl@lists.openwall.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://git.vuxu.org/mirror/musl/

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).