pg.ddx.io  pgsql-hackers@postgresql.org mailing list archive  
help / color / mirror / Atom feed
From: Tom Lane <tgl@sss.pgh.pa.us>
To: Andres Freund <andres@anarazel.de>
Cc: Andrew Dunstan <andrew@dunslane.net>
Cc: Dave Page <dpage@pgadmin.org>
Cc: David Steele <david@pgmasters.net>
Cc: pgsql-hackers@lists.postgresql.org
Subject: Re: C99 compliance for src/port/snprintf.c
Date: Sat, 25 Aug 2018 13:08:18 -0400
Message-ID: <16652.1535216898@sss.pgh.pa.us> (raw)
In-Reply-To: <20180816160508.nd5u6fblr3jwcg6f@alap3.anarazel.de>
References: <e452e970-cf80-6e7e-17c1-24730a5c9ca9@pgmasters.net>
	<2069.1534363063@sss.pgh.pa.us>
	<20180815214931.vlwsz4s55enbppna@alap3.anarazel.de>
	<9877.1534371239@sss.pgh.pa.us>
	<20180815222401.kxsupl5zie2jgi4x@alap3.anarazel.de>
	<10675.1534372270@sss.pgh.pa.us>
	<20180816084134.sqggeatubeufpc2r@alap3.anarazel.de>
	<20180816111859.n6vtt322jpjwflij@alap3.anarazel.de>
	<20180816142220.yowdd6626c6mea5o@alap3.anarazel.de>
	<14429.1534434090@sss.pgh.pa.us>
	<20180816160508.nd5u6fblr3jwcg6f@alap3.anarazel.de>

Andres Freund <andres@anarazel.de> writes:
> On 2018-08-16 11:41:30 -0400, Tom Lane wrote:
>> Andres Freund <andres@anarazel.de> writes:
>>> While I'd personally have no problem kicking gcc 3.4 to the curb, I'm
>>> still confused what causes this error mode.  Kinda looks like
>>> out-of-sync headers with gcc or something.

>> Yeah, this is *absolutely* unsurprising for a non-native gcc installation
>> on an old platform.

> Sure, but that still requires the headers to behave differently between
> C89 and C99 mode, as this worked before. But it turns out there's two
> different math.h implementation headers, depending on c99 being enabled
> (math_c99.h being the troublesome).  If I understand correctly the
> problem is more that the system library headers are *newer* (and assume
> a sun studio emulating/copying quite a bit of gcc) than the gcc that's
> being used, and therefore gcc fails.

I have some more info on this issue, based on having successfully
updated "gaur" using gcc 3.4.6 (which I picked because it was the last
of the 3.x release series).  It seems very unlikely that there's much
difference between 3.4.3 and 3.4.6 as far as external features go.
What I find in the 3.4.6 documentation is

 -- Built-in Function: double __builtin_inf (void)
     Similar to `__builtin_huge_val', except a warning is generated if
     the target floating-point format does not support infinities.
     This function is suitable for implementing the ISO C99 macro
     `INFINITY'.

Note that the function is called "__builtin_inf", whereas what we see
protosciurus choking on is "__builtin_infinity".  So I don't think this
is a version skew issue at all.  I think that the system headers are
written for the Solaris cc, and its name for the equivalent function is
__builtin_infinity, whereas what gcc wants is __builtin_inf.  Likewise,
the failures we see for __builtin_isinf and __builtin_isnan are because
Solaris cc provides those but gcc does not.

If we wanted to keep protosciurus going without a compiler update, my
thought would be to modify gcc's copy of math_c99.h to correct the
function name underlying INFINITY, and change the definitions of isinf()
and isnan() back to whatever was being used pre-C99.

It's possible that newer gcc releases have been tweaked so that they
make appropriate corrections in this header file automatically, but
that's not a sure thing.

			regards, tom lane




view thread (46+ messages)  latest in thread

Message-ID: <16652.1535216898@sss.pgh.pa.us>
Permalink:  ../16652.1535216898@sss.pgh.pa.us/
Also on:    postgresql.org/message-id/16652.1535216898@sss.pgh.pa.us

 · 

reply

Reply instructions:

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

* Reply to all the recipients using the --to and --cc options:
  reply via email

  To: pgsql-hackers@postgresql.org
  Cc: tgl@sss.pgh.pa.us, andres@anarazel.de, andrew@dunslane.net, dpage@pgadmin.org, david@pgmasters.net, pgsql-hackers@lists.postgresql.org
  Subject: Re: C99 compliance for src/port/snprintf.c
  In-Reply-To: <16652.1535216898@sss.pgh.pa.us>

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

This inbox is served by DDX for PostgreSQL; see mirroring instructions
for how to clone and mirror all data and code used for this inbox