Thread: Re: [COMMITTERS] pgsql: Silence compiler warning about ignored return value.

Re: [COMMITTERS] pgsql: Silence compiler warning about ignored return value.

From
Heikki Linnakangas
Date:
Magnus Hagander wrote:
> Log Message:
> -----------
> Silence compiler warning about ignored return value. Our comment already
> clearly stated that we are aware that we're ignoring it.

I think the usual way is to call the function like:
 (void) function_with_return_value()

--   Heikki Linnakangas  EnterpriseDB   http://www.enterprisedb.com


Re: [COMMITTERS] pgsql: Silence compiler warning about ignored return value.

From
Magnus Hagander
Date:
Heikki Linnakangas wrote:
> Magnus Hagander wrote:
>> Log Message:
>> -----------
>> Silence compiler warning about ignored return value. Our comment already
>> clearly stated that we are aware that we're ignoring it.
> 
> I think the usual way is to call the function like:
> 
>  (void) function_with_return_value()

I tried that first, of course. gcc is too smart about that - it still
throws the warning in this case.

//Magnus



Magnus Hagander <magnus@hagander.net> writes:
> Heikki Linnakangas wrote:
>> I think the usual way is to call the function like:
>> (void) function_with_return_value()

> I tried that first, of course. gcc is too smart about that - it still
> throws the warning in this case.

I think you must have a broken version of gcc.  I don't like this
patch either.  The (void) is the standard way and should work;
futhermore, if you're getting a warning here, why aren't you getting
a whole lot of others?  It's not like we are careful to use (void)
everywhere.
        regards, tom lane


Re: Re: [COMMITTERS] pgsql: Silence compiler warning about ignored return value.

From
Peter Eisentraut
Date:
Magnus Hagander wrote:
> Heikki Linnakangas wrote:
>> Magnus Hagander wrote:
>>> Log Message:
>>> -----------
>>> Silence compiler warning about ignored return value. Our comment already
>>> clearly stated that we are aware that we're ignoring it.
>> I think the usual way is to call the function like:
>>
>>  (void) function_with_return_value()
> 
> I tried that first, of course. gcc is too smart about that - it still
> throws the warning in this case.

Well, the warning is explicitly put in there for this specific function 
because you are supposed to process the return value.  I'm sure a more 
smarter compiler would even warn "variable is assigned a value that is 
never used". ;-)  (Note that gcc in general doesn't work about unused 
return values, only for those functions that glibc explicitly marks as 
candidates.)

It looks like you are building in fortify mode?  I tried that a while 
ago and got a few more warnings.  Are we trying to be fortify clean, and 
if so, what is our approach?

Also, considering my recent complaint about various brittleness in the 
regression test driver, more well hidden ignorings of errors are not 
exactly my favorite solution.


Re: Re: [COMMITTERS] pgsql: Silence compiler warning about ignored return value.

From
Magnus Hagander
Date:
Tom Lane wrote:
> Magnus Hagander <magnus@hagander.net> writes:
>> Heikki Linnakangas wrote:
>>> I think the usual way is to call the function like:
>>> (void) function_with_return_value()
> 
>> I tried that first, of course. gcc is too smart about that - it still
>> throws the warning in this case.
> 
> I think you must have a broken version of gcc.  I don't like this
> patch either.  The (void) is the standard way and should work;
> futhermore, if you're getting a warning here, why aren't you getting
> a whole lot of others?  It's not like we are careful to use (void)
> everywhere.

It's:
gcc (Ubuntu 4.3.2-1ubuntu11) 4.3.2

Error was:
pg_regress.c:282: warning: ignoring return value of ‘system’, declared
with attribute warn_unused_result

It's because system() is flagged with __attribute(warn_unused_result)__.
That's why we're not seeing it for other functions. There's a paragraph
about the difference in the GCC docs.

If that's in the new versions of gcc, I expect it to show up on other
platforms as well as time passes.

//Magnus



Re: Re: [COMMITTERS] pgsql: Silence compiler warning about ignored return value.

From
Magnus Hagander
Date:
Peter Eisentraut wrote:
> Magnus Hagander wrote:
>> Heikki Linnakangas wrote:
>>> Magnus Hagander wrote:
>>>> Log Message:
>>>> -----------
>>>> Silence compiler warning about ignored return value. Our comment
>>>> already
>>>> clearly stated that we are aware that we're ignoring it.
>>> I think the usual way is to call the function like:
>>>
>>>  (void) function_with_return_value()
>>
>> I tried that first, of course. gcc is too smart about that - it still
>> throws the warning in this case.
> 
> Well, the warning is explicitly put in there for this specific function
> because you are supposed to process the return value.  I'm sure a more
> smarter compiler would even warn "variable is assigned a value that is
> never used". ;-)  (Note that gcc in general doesn't work about unused
> return values, only for those functions that glibc explicitly marks as
> candidates.)
> 
> It looks like you are building in fortify mode?  I tried that a while
> ago and got a few more warnings.  Are we trying to be fortify clean, and
> if so, what is our approach?

I'm building in whatever is the default on Ubuntu 8.10. It may be that
they have switched to fortify mode. How do I check that?


> Also, considering my recent complaint about various brittleness in the
> regression test driver, more well hidden ignorings of errors are not
> exactly my favorite solution.

Right, the other thing to do would be to check the error value :-) I
just assumed that since the comment explicitly said we wanted to ignore
it, we'd want to get rid of the warning. If the comment hadn't been
there, I'd have looked at a different way to do it.

//Magnus


Re: Re: [COMMITTERS] pgsql: Silence compiler warning about ignored return value.

From
Grzegorz Jaskiewicz
Date:
On 2008-11-20, at 15:29, Peter Eisentraut wrote:
>
> Well, the warning is explicitly put in there for this specific  
> function because you are supposed to process the return value.  I'm  
> sure a more smarter compiler would even warn "variable is assigned a  
> value that is never used". ;-)  (Note that gcc in general doesn't  
> work about unused return values, only for those functions that glibc  
> explicitly marks as candidates.)

afaik you need to use -Wall and -O3 to get that type of warning with 4.3



Peter Eisentraut <peter_e@gmx.net> writes:
> It looks like you are building in fortify mode?  I tried that a while 
> ago and got a few more warnings.  Are we trying to be fortify clean, and 
> if so, what is our approach?

We're definitely *not* fortify-clean, although maybe trying to become so
would be a good idea.  From memory, what I have seen in past builds on
Red Hat systems is a lot of warnings about ignoring the return value
from fwrite() and related functions.  Which might not be an unreasonable
thing to try to get rid of, though I think many of the cases are in
places where there's no useful recovery action to be taken anyway.
(Whatcha gonna do if you fail to write the postmaster log ... try to
log a complaint message?)

In any case I agree that anything we try to do about this should be a
system-wide effort not a one-line hack.

> Also, considering my recent complaint about various brittleness in the 
> regression test driver, more well hidden ignorings of errors are not 
> exactly my favorite solution.

+1
        regards, tom lane


Re: Re: [COMMITTERS] pgsql: Silence compiler warning about ignored return value.

From
Magnus Hagander
Date:
Tom Lane wrote:
> Peter Eisentraut <peter_e@gmx.net> writes:
>> It looks like you are building in fortify mode?  I tried that a while 
>> ago and got a few more warnings.  Are we trying to be fortify clean, and 
>> if so, what is our approach?
> 
> We're definitely *not* fortify-clean, although maybe trying to become so
> would be a good idea.  From memory, what I have seen in past builds on
> Red Hat systems is a lot of warnings about ignoring the return value
> from fwrite() and related functions.  Which might not be an unreasonable
> thing to try to get rid of, though I think many of the cases are in
> places where there's no useful recovery action to be taken anyway.
> (Whatcha gonna do if you fail to write the postmaster log ... try to
> log a complaint message?)
> 
> In any case I agree that anything we try to do about this should be a
> system-wide effort not a one-line hack.
> 
>> Also, considering my recent complaint about various brittleness in the 
>> regression test driver, more well hidden ignorings of errors are not 
>> exactly my favorite solution.
> 
> +1

So. Should I revert it?

//Magnus



Magnus Hagander <magnus@hagander.net> writes:
> Tom Lane wrote:
>> We're definitely *not* fortify-clean, although maybe trying to become so
>> would be a good idea.  From memory, what I have seen in past builds on
>> Red Hat systems is a lot of warnings about ignoring the return value
>> from fwrite() and related functions.

> So. Should I revert it?

I dunno.  Was that the only such warning you got on your build?  That
would be a bit odd given that I see many more ...
        regards, tom lane


Re: Re: [COMMITTERS] pgsql: Silence compiler warning about ignored return value.

From
Magnus Hagander
Date:
Tom Lane wrote:
> Magnus Hagander <magnus@hagander.net> writes:
>> Tom Lane wrote:
>>> We're definitely *not* fortify-clean, although maybe trying to become so
>>> would be a good idea.  From memory, what I have seen in past builds on
>>> Red Hat systems is a lot of warnings about ignoring the return value
>>> from fwrite() and related functions.
> 
>> So. Should I revert it?
> 
> I dunno.  Was that the only such warning you got on your build?  That
> would be a bit odd given that I see many more ...

Yeah, it happens in more places. I wasn't doing a make clean first, so
that was the only one of the files that were built *that time* that gave
the warning. I see it in more places now.

I think I'll go figure out how to turn fortify off :-)

//Magnus


Re: Re: [COMMITTERS] pgsql: Silence compiler warning about ignored return value.

From
Magnus Hagander
Date:
Magnus Hagander wrote:
> Tom Lane wrote:
>> Magnus Hagander <magnus@hagander.net> writes:
>>> Tom Lane wrote:
>>>> We're definitely *not* fortify-clean, although maybe trying to become so
>>>> would be a good idea.  From memory, what I have seen in past builds on
>>>> Red Hat systems is a lot of warnings about ignoring the return value
>>>> from fwrite() and related functions.
>>> So. Should I revert it?
>> I dunno.  Was that the only such warning you got on your build?  That
>> would be a bit odd given that I see many more ...
> 
> Yeah, it happens in more places. I wasn't doing a make clean first, so
> that was the only one of the files that were built *that time* that gave
> the warning. I see it in more places now.
> 
> I think I'll go figure out how to turn fortify off :-)

Actually, better not. That's what caught that string format bug after all...

//Magnus



Re: Re: [COMMITTERS] pgsql: Silence compiler warning about ignored return value.

From
Peter Eisentraut
Date:
Tom Lane wrote:
> (Whatcha gonna do if you fail to write the postmaster log ... try to
> log a complaint message?)

Well, good question, but I'm not convinced that doing nothing is always 
the best answer.  Something along the lines of SIGSTOP'ing oneself or 
calling abort() might be appropriate in some cases.



Peter Eisentraut <peter_e@gmx.net> writes:
> Tom Lane wrote:
>> (Whatcha gonna do if you fail to write the postmaster log ... try to
>> log a complaint message?)

> Well, good question, but I'm not convinced that doing nothing is always 
> the best answer.

I didn't say it was --- merely opined that we need a consistent plan
about how to handle corner cases like that if we want to try to wipe out
all the warnings of this class.
        regards, tom lane


Re: Re: [COMMITTERS] pgsql: Silence compiler warning about ignored return value.

From
Alvaro Herrera
Date:
Tom Lane wrote:
> Peter Eisentraut <peter_e@gmx.net> writes:
> > Tom Lane wrote:
> >> (Whatcha gonna do if you fail to write the postmaster log ... try to
> >> log a complaint message?)
> 
> > Well, good question, but I'm not convinced that doing nothing is always 
> > the best answer.
> 
> I didn't say it was --- merely opined that we need a consistent plan
> about how to handle corner cases like that if we want to try to wipe out
> all the warnings of this class.

Maybe syslog?

-- 
Alvaro Herrera                                http://www.CommandPrompt.com/
PostgreSQL Replication, Consulting, Custom Development, 24x7 support


Alvaro Herrera <alvherre@commandprompt.com> writes:
> Tom Lane wrote:
>> I didn't say it was --- merely opined that we need a consistent plan
>> about how to handle corner cases like that if we want to try to wipe out
>> all the warnings of this class.

> Maybe syslog?

Doesn't exist on Windows ...
        regards, tom lane


Re: Re: [COMMITTERS] pgsql: Silence compiler warning about ignored return value.

From
"Robert Haas"
Date:
>> Maybe syslog?
>
> Doesn't exist on Windows ...

There is an event log though which is fairly comparable.  Of course
that still leaves you with the problem of what to do when the syslog
or event log write fails.

...Robert


Re: Re: [COMMITTERS] pgsql: Silence compiler warning about ignored return value.

From
Alvaro Herrera
Date:
Robert Haas escribió:
> >> Maybe syslog?
> >
> > Doesn't exist on Windows ...
> 
> There is an event log though which is fairly comparable.  Of course
> that still leaves you with the problem of what to do when the syslog
> or event log write fails.

Well, syslog does not have a return code, which probably means that it
can't fail (and if it does, there's no way for you to know).

-- 
Alvaro Herrera                                http://www.CommandPrompt.com/
The PostgreSQL Company - Command Prompt, Inc.


Re: Re: [COMMITTERS] pgsql: Silence compiler warning about ignored return value.

From
Peter Eisentraut
Date:
Magnus Hagander wrote:
> Heikki Linnakangas wrote:
>> Magnus Hagander wrote:
>>> Log Message:
>>> -----------
>>> Silence compiler warning about ignored return value. Our comment already
>>> clearly stated that we are aware that we're ignoring it.
>> I think the usual way is to call the function like:
>>
>>  (void) function_with_return_value()
> 
> I tried that first, of course. gcc is too smart about that - it still
> throws the warning in this case.

I have equipped this part with a proper error message now.  At the time 
I was thinking this is a "can't happen" error, but it has in fact 
already helped clarifying some other regression test run failures for me:

./pg_regress --inputdir=. --dlpath=. --multibyte=SQL_ASCII 
--load-language=plpgsql  --temp-install=./tmp_check 
--top-builddir=../../.. --temp-port=565432 --schedule=./parallel_schedule
============== removing existing temp installation    ==============
============== creating temporary installation        ==============
============== initializing database system           ==============
============== starting postmaster                    ==============
running on port 65432 with pid 44940
============== creating database "regression"         ==============
ERROR:  database "regression" already exists
command failed: 

"/Users/peter/devel/postgresql/cvs/pg84/pgsql/src/test/regress/./tmp_check/install//Users/peter/devel/postgresql/cvs/pg84/pg-install/bin/psql"

-X -c "CREATE DATABASE \"regression\" TEMPLATE=template0 
ENCODING='SQL_ASCII'" "postgres"
pg_ctl: server does not shut down

pg_regress: could not stop postmaster: exit code was 256   <<< NEW
make: *** [check] Error 2