mailing list of musl libc
 help / color / mirror / code / Atom feed
From: Rich Felker <dalias@aerifal.cx>
To: musl@lists.openwall.com
Subject: Re: [PATCH] Problem is static inline
Date: Thu, 23 Aug 2012 08:18:24 -0400	[thread overview]
Message-ID: <20120823121824.GK27715@brightrain.aerifal.cx> (raw)
In-Reply-To: <59250.132.241.65.179.1345702298.squirrel@lavabit.com>

On Wed, Aug 22, 2012 at 11:11:38PM -0700, idunham@lavabit.com wrote:
> > I've been trying to get musl compatability patches for libuv merged
> > upstream, and I have it building, but there's one sticking point:
> > Upstream insists on using --std=c89 (I guess for portability to other
> > platforms).
> > This makes GCC choke on "long" in <bits/syscall.h>.
> I tried fixing it, and ended up finding that the issue was the "static
> inline" in the header.
> 
> For future reference:
> sed -e 's/static inline/#if __STDC_VERSION__ >=
> 199901L\ninline\n#endif\nstatic/g' -i <filename>
> is what I used.

I really dislike this type of fix because it potentially generates
much worse code on compilers where c89 is the default but not strictly
enforced (e.g. gnu89 is the default). (While inline is usually ignored
for inlining purposes, lots of gcc versions seem to avoid eliminating
dead static functions from the .o file unless they're also marked
inline.)

Is there an easy way to detect gcc's obnoxious strict c89 mode?

By the way, I also wonder if it wouldn't be easier to do:

#if [strict c89 mode]
#define inline
#endif

or

#if [strict c89 mode]
#define inline __inline
#endif

in headers that will use it, rather than repeating the #if over and
over for each use.

We're going to need something like this for adding restrict at a later
time, anyway...

Perhaps (but I also find this really ugly...) it would be better to
do it the other way around: use __inline in the headers, and do

#if __STDC_VERSION__ >= 199901L
#define __inline inline
#endif

This would support any C99 compiler that does not need __inline for
its own purposes separate from inline, as well as any compiler in
legacy mode that has __inline as an extension.

Rich


  parent reply	other threads:[~2012-08-23 12:18 UTC|newest]

Thread overview: 19+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-08-23  5:07 compatability: bits/syscall.h requires C99 idunham
2012-08-23  6:11 ` [PATCH] Problem is static inline idunham
2012-08-23  6:20   ` [PATCH 2/1] " idunham
2012-08-23  6:43     ` Szabolcs Nagy
2012-08-23  6:51   ` [PATCH] " Szabolcs Nagy
2012-08-23 12:18   ` Rich Felker [this message]
2012-08-23 12:31 ` compatability: bits/syscall.h requires C99 John Spencer
2012-08-23 12:34   ` Rich Felker
2012-08-24  0:25     ` Isaac Dunham
2012-08-24  2:07       ` Rich Felker
2012-08-24  2:34         ` Rich Felker
2012-08-24  3:31           ` [PATCH/RFC] __inline for C89 compilers (take 3?) Isaac Dunham
2012-08-24  7:53           ` compatability: bits/syscall.h requires C99 Szabolcs Nagy
2012-08-30 22:45             ` [PATCH/RFC] inline cleanup/C89 support Isaac Dunham
2012-08-31  8:34               ` Szabolcs Nagy
2012-08-31 19:27                 ` Isaac Dunham
2012-09-02 16:51               ` Rich Felker
2012-09-04 15:49                 ` philomath
2012-09-04 17:44                   ` 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=20120823121824.GK27715@brightrain.aerifal.cx \
    --to=dalias@aerifal.cx \
    --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).