Re: BUG #15080: ecpg on windows doesn't define HAVE_LONG_LONG_INT - Mailing list pgsql-bugs

From Tom Lane
Subject Re: BUG #15080: ecpg on windows doesn't define HAVE_LONG_LONG_INT
Date
Msg-id 22529.1526770160@sss.pgh.pa.us
Whole thread Raw
In response to Re: BUG #15080: ecpg on windows doesn't define HAVE_LONG_LONG_INT  (Andrew Dunstan <andrew@dunslane.net>)
Responses Re: BUG #15080: ecpg on windows doesn't define HAVE_LONG_LONG_INT
List pgsql-bugs
Andrew Dunstan <andrew@dunslane.net> writes:
> On 05/19/2018 12:45 PM, Tom Lane wrote:
>> However ... we've got a ton of other places that use INT64_FORMAT with
>> the native printf, eg in pgbench, and frogmouth is not producing
>> warnings about those usages.  So I'm confused about exactly what is
>> happening there.  Andrew, do you have any insight?

> Very occasionally ;-)

> A little Googling suggested that __USE_MINGW_ANSI_STDIO might help. 
> Here's what happened

>     $ gcc -Wall -o testme testme.c
>     testme.c: In function 'main':
>     testme.c:7:5: warning: unknown conversion type character 'l' in format
>     testme.c:7:5: warning: too many arguments for format

>     $ ./testme
>     sizeof long long = 8
>     val = 734294471 (%lld) 3153770738837321131 (%I64d)

Yeah, this agrees with what we're seeing in the ecpg test failures, both
as to the warning and the wrong run-time answer.  What remains unexplained
is why we don't see the same compile-time warning for uses of
printf("%lld") elsewhere in the build.  

>     $ gcc -Wall -D__USE_MINGW_ANSI_STDIO -o testme testme.c

[ works as expected ]

> So maybe we just need to define this on XP/mingw (shouldn't be necessary 
> on anything later). I don't know what other effects it might have, 
> though. Perhaps there is some other flag or define that has the same 
> effect that we use in compiling pgbench etc that isn't used by ecpg?

Might be worth trying.  As I mentioned in
<13103.1526749980@sss.pgh.pa.us>, it seems like it's time to jettison
any pretense of support for non-C99-compliant spellings of "%lld".
It'd be good to know whether __USE_MINGW_ANSI_STDIO works for that
purpose on ancient MinGW.

> Now recall that this animal is on serious life support. ...
> Not sure how much more effort I should put in here.

I couldn't blame you for just deciding to skip the ecpg tests on
this critter.

            regards, tom lane


pgsql-bugs by date:

Previous
From: Andrew Dunstan
Date:
Subject: Re: BUG #15080: ecpg on windows doesn't define HAVE_LONG_LONG_INT
Next
From: Andrew Dunstan
Date:
Subject: Re: BUG #15080: ecpg on windows doesn't define HAVE_LONG_LONG_INT