Re: C99 compliance for src/port/snprintf.c
Andrew Dunstan <andrew.dunstan@2ndquadrant.com>
From: Andrew Dunstan <andrew.dunstan@2ndquadrant.com>
To: Andres Freund <andres@anarazel.de>, Tom Lane <tgl@sss.pgh.pa.us>
Cc: Dave Page <dpage@pgadmin.org>, David Steele <david@pgmasters.net>,
pgsql-hackers@lists.postgresql.org
Date: 2018-08-16T20:36:39Z
Lists: pgsql-hackers
On 08/16/2018 12:05 PM, Andres Freund wrote: > Hi, > > On 2018-08-16 11:41:30 -0400, Tom Lane wrote: >> Andres Freund <andres@anarazel.de> writes: >>> But enabling C99 support triggered a somewhat weird failure on >>> protosciurus (also solaris, but gcc) >>> https://buildfarm.postgresql.org/cgi-bin/show_log.pl?nm=protosciurus&dt=2018-08-16%2013%3A37%3A46 >>> It detects C99 support successfully via -std=gnu99 but then fails >>> somewhere during build with: >>> ../../../../src/include/utils/float.h:71: error: `__builtin_infinity' undeclared (first use in this function) >>> 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. It only works to the extent that the platform's >> library headers are up to snuff. The gcc installation process actually >> knows enough to do a certain amount of editing of the platform's headers, >> and install "fixed" copies of those headers where gcc will find them >> before the ones in /usr/include. But it looks like the fixing didn't >> account for __builtin_infinity on this platform. Maybe a newer gcc >> would get it right. > 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. > > Gcc 3.4.3 has been released November 4, 2004, whereas solaris 10 is from > January 31, 2005. The sun studio used for castoroides running on, I > assume, the same hardware, is quite a bit newer in turn. > > >> I just launched gaur/pademelon builds for you, though I'm quite certain >> they'll both report "unsupported". > Yea, that seems fairly likely. > > >> If we go through with this, my plan would be to retire pademelon >> (vendor's compiler) and see if I can install gcc 4.something to >> replace the 2.95.3 version that gaur is using. > K. > > >> The -ansi option that dromedary is using is certainly losable, too >> (I'd probably replace it with either --std=c99 or --std=gnu99, >> whichever autoconf *doesn't* pick by default, just to be contrary). > Makes sense. > > >> Andrew is going to need to give us a policy decision on whether to >> keep using the existing animal names or take out new ones for these >> rather-significantly-modified configurations. > CCed. > The usual policy is that animal names need to change if the OS or compiler names change, but not if just the versions of those change. There is a script in the suite to update those settings, and the admins can also help if necessary. cheers andrew -- Andrew Dunstan https://www.2ndQuadrant.com PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services
Commits
Same data as JSON:
GET /api/v1/messages/:b64id/commits
the thread's linked commits as JSON, with link sources.
API reference →
-
Remove test for VA_ARGS, implied by C99.
- 8ecdefc261ab 12.0 landed
-
Introduce minimal C99 usage to verify compiler support.
- 143290efd079 12.0 landed
-
Require C99 (and thus MSCV 2013 upwards).
- d9dd406fe281 12.0 landed
-
Require a C99-compliant snprintf(), and remove related workarounds.
- e1d19c902e59 12.0 landed
-
Try to enable C99 in configure, but do not rely on it (yet).
- 86d78ef50e01 12.0 landed
-
Make snprintf.c follow the C99 standard for snprintf's result value.
- c2a2e331da17 9.6.11 landed
- 1811900b933c 10.6 landed
- 36147ec9f1e2 11.0 landed
- a57a6faf6011 9.3.25 landed
- 27c4b0899c0e 9.4.20 landed
- 8e9f229d2bf6 9.5.15 landed
- 805889d7d23f 12.0 landed
-
Clean up assorted misuses of snprintf()'s result value.
- d7ed4eea539d 11.0 landed
- d371efb39c33 9.4.20 landed
- c81062e8e12f 9.5.15 landed
- c182c1e0b895 9.6.11 landed
- 6101bc2f459c 10.6 landed
- 3531365de5e8 9.3.25 landed
- cc4f6b778618 12.0 landed