Compilation errors on Ubuntu 8.10 Intrepid Ibex
Igor Sysoev
is at rambler-co.ru
Tue Nov 11 00:43:54 MSK 2008
On Tue, Nov 11, 2008 at 12:35:40AM +0300, Maxim Dounin wrote:
> Hello!
>
> On Mon, Nov 10, 2008 at 11:34:37PM +0300, Igor Sysoev wrote:
>
> > On Mon, Nov 10, 2008 at 09:38:39AM -0800, Eric Benson wrote:
> >
> > > Compiling either 0.6.32 or 0.7.20 on a new Ubuntu 8.10 installation with gcc 4.3.2 causes errors due to a new compiler warning (when combined with the use of -Werror in CFLAGS). There is now a compiler warning when the return value of write() is ignored. This causes errors in a number of placees in nginx. I have included a log showing the compiler output as well as a patch file showing the changes I made to avoid these errors.
> >
> > Thank you.
> > However, there is more elegant way to suppress this warning without
> > stub variables:
> >
> > (void) write_fd(...)
> >
> > Could you test the attached patch ?
>
> No, warn_unused_result warning can't be avoided by casting to
> void:
>
> $ cat unused.c
> int foo() __attribute__((warn_unused_result));
>
> int
> foo()
> {
> return 1;
> }
>
> int
> main()
> {
> (void) foo();
>
> return 0;
> }
> $ gcc unused.c
> unused.c: In function 'main':
> unused.c:12: warning: ignoring return value of 'foo', declared with attribute warn_unused_result
>
> More details here:
>
> http://gcc.gnu.org/bugzilla/show_bug.cgi?id=25509
>
> However I don't think it's a good idea to use stub variables.
> Probably something like
>
> if (ngx_write_fd(...) == NGX_FILE_ERROR) {
> /* void */
> }
>
> would be better.
>
> Maxim Dounin
>
> p.s. Actually I think that it's glibc's bug. But we probably have
> to live with it, at least for some time.
I believe this is gcc bug because I explictly says that I do not need
the function result using (void) case.
Dummy result checking as well as stub variable are security/reliabilty
profanation. The (void) cast should be compact way to do the same.
--
Igor Sysoev
http://sysoev.ru/en/
More information about the nginx
mailing list