|
|
Message-ID: <20150417165049.GZ6817@brightrain.aerifal.cx>
Date: Fri, 17 Apr 2015 12:50:49 -0400
From: Rich Felker <dalias@...c.org>
To: musl@...ts.openwall.com
Subject: Re: Explicit casts in ctype.h suppress compiler warnings
On Fri, Apr 17, 2015 at 01:59:14PM +0300, Alexander Monakov wrote:
> For the following erroneous source code:
>
> #include <ctype.h>
> int f(char *c)
> {
> return isdigit(c) || isspace(c);
> }
>
> GCC warns only for passing a pointer to isspace; isdigit is implemented as a
> macro that casts its argument to unsigned, and the warning is suppresed
> because the origin of the cast is in a system header. Since isspace is
> implemented with a static inline helper function, there is a warning. With
> glibc headers, no warning is issued in either case for a similar reason.
>
> I think it would be nice if musl's ctype.h could aid the compiler in
> diagnosing erroneous use, like it happens today for only for isspace() of all
> macros declared there. The cost of restructuring the header to achieve that
> does not seem too high. Thoughts?
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.
Rich
Powered by blists - more mailing lists
Confused about mailing lists and their use? Read about mailing lists on Wikipedia and check out these guidelines on proper formatting of your messages.