public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug c/49863] New: -Wunused-result not behaving correctly
@ 2011-07-27 10:07 antomicx at gmail dot com
  2011-07-27 10:20 ` [Bug c/49863] " rguenth at gcc dot gnu.org
                   ` (3 more replies)
  0 siblings, 4 replies; 5+ messages in thread
From: antomicx at gmail dot com @ 2011-07-27 10:07 UTC (permalink / raw)
  To: gcc-bugs

http://gcc.gnu.org/bugzilla/show_bug.cgi?id=49863

           Summary: -Wunused-result not behaving correctly
           Product: gcc
           Version: 4.5.2
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c
        AssignedTo: unassigned@gcc.gnu.org
        ReportedBy: antomicx@gmail.com


With a snippet as simple as the following

# cat main.c

#include <stdlib.h>

int main() {
  system("ls");

  return 0;
}

I'm getting these, different, compilation results:

1) # gcc main.c
Output: empty

2) # gcc -Wunused-result main.c
Output: empty

3) # gcc -W -Wall -Wextra main.c
Output: empty

4) # gcc -W -Wall -Wextra -Wunused-result main.c
Output: empty

5) # gcc -O0 -W -Wall -Wextra -Wunused-result main.c 
Output: empty

6) # gcc -O1 main.c # same thing with -O2 -O3
Output: 
main.c: In function ‘main’:
main.c:4:9: warning: ignoring return value of ‘system’, declared with attribute
warn_unused_result

Why is putting -Ox with x > 0 the only way to get the correct compilation
warning when invoking the 'system' call without parsing its result?

# gcc -v

Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/lto-wrapper
Target: x86_64-linux-gnu
Configured with: ../src/configure -v --with-pkgversion='Ubuntu/Linaro
4.5.2-8ubuntu4' --with-bugurl=file:///usr/share/doc/gcc-4.5/README.Bugs
--enable-languages=c,c++,fortran,objc,obj-c++ --prefix=/usr
--program-suffix=-4.5 --enable-shared --enable-multiarch
--with-multiarch-defaults=x86_64-linux-gnu --enable-linker-build-id
--with-system-zlib --libexecdir=/usr/lib/x86_64-linux-gnu
--without-included-gettext --enable-threads=posix
--with-gxx-include-dir=/usr/include/c++/4.5 --libdir=/usr/lib/x86_64-linux-gnu
--enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug
--enable-libstdcxx-time=yes --enable-plugin --enable-gold --enable-ld=default
--with-plugin-ld=ld.gold --enable-objc-gc --disable-werror --with-arch-32=i686
--with-tune=generic --enable-checking=release --build=x86_64-linux-gnu
--host=x86_64-linux-gnu --target=x86_64-linux-gnu
Thread model: posix
gcc version 4.5.2 (Ubuntu/Linaro 4.5.2-8ubuntu4)


^ permalink raw reply	[flat|nested] 5+ messages in thread

* [Bug c/49863] -Wunused-result not behaving correctly
  2011-07-27 10:07 [Bug c/49863] New: -Wunused-result not behaving correctly antomicx at gmail dot com
@ 2011-07-27 10:20 ` rguenth at gcc dot gnu.org
  2011-07-27 10:30 ` antomicx at gmail dot com
                   ` (2 subsequent siblings)
  3 siblings, 0 replies; 5+ messages in thread
From: rguenth at gcc dot gnu.org @ 2011-07-27 10:20 UTC (permalink / raw)
  To: gcc-bugs

http://gcc.gnu.org/bugzilla/show_bug.cgi?id=49863

Richard Guenther <rguenth at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|UNCONFIRMED                 |RESOLVED
         Resolution|                            |INVALID

--- Comment #1 from Richard Guenther <rguenth at gcc dot gnu.org> 2011-07-27 10:19:33 UTC ---
Because glibc annotates system with the attribute only if you use
-D_FORTIFY_SOURCE=1 or higher, and then only if optimization is enabled:

/usr/include/features.h:

#if defined _FORTIFY_SOURCE && _FORTIFY_SOURCE > 0 \
    && __GNUC_PREREQ (4, 1) && defined __OPTIMIZE__ && __OPTIMIZE__ > 0
# if _FORTIFY_SOURCE > 1
#  define __USE_FORTIFY_LEVEL 2
# else
#  define __USE_FORTIFY_LEVEL 1
# endif
#else
# define __USE_FORTIFY_LEVEL 0
#endif

/usr/include/sys/cdefs.h:

/* If fortification mode, we warn about unused results of certain
   function calls which can lead to problems.  */
#if __GNUC_PREREQ (3,4)
# define __attribute_warn_unused_result__ \
   __attribute__ ((__warn_unused_result__))
# if __USE_FORTIFY_LEVEL > 0
#  define __wur __attribute_warn_unused_result__
# endif
#else
# define __attribute_warn_unused_result__ /* empty */
#endif
#ifndef __wur
# define __wur /* Ignore */
#endif

...


^ permalink raw reply	[flat|nested] 5+ messages in thread

* [Bug c/49863] -Wunused-result not behaving correctly
  2011-07-27 10:07 [Bug c/49863] New: -Wunused-result not behaving correctly antomicx at gmail dot com
  2011-07-27 10:20 ` [Bug c/49863] " rguenth at gcc dot gnu.org
@ 2011-07-27 10:30 ` antomicx at gmail dot com
  2012-05-23 17:21 ` jim.king at simplivity dot com
  2012-05-23 17:27 ` pinskia at gcc dot gnu.org
  3 siblings, 0 replies; 5+ messages in thread
From: antomicx at gmail dot com @ 2011-07-27 10:30 UTC (permalink / raw)
  To: gcc-bugs

http://gcc.gnu.org/bugzilla/show_bug.cgi?id=49863

--- Comment #2 from antomicx at gmail dot com 2011-07-27 10:29:46 UTC ---
(In reply to comment #1)
> Because glibc annotates system with the attribute only if you use
> -D_FORTIFY_SOURCE=1 or higher, and then only if optimization is enabled:

I got it. Just out of curiosity, is this feature documented somewhere (apart
from source code, obviously ;-) )?

Thanks!


^ permalink raw reply	[flat|nested] 5+ messages in thread

* [Bug c/49863] -Wunused-result not behaving correctly
  2011-07-27 10:07 [Bug c/49863] New: -Wunused-result not behaving correctly antomicx at gmail dot com
  2011-07-27 10:20 ` [Bug c/49863] " rguenth at gcc dot gnu.org
  2011-07-27 10:30 ` antomicx at gmail dot com
@ 2012-05-23 17:21 ` jim.king at simplivity dot com
  2012-05-23 17:27 ` pinskia at gcc dot gnu.org
  3 siblings, 0 replies; 5+ messages in thread
From: jim.king at simplivity dot com @ 2012-05-23 17:21 UTC (permalink / raw)
  To: gcc-bugs

http://gcc.gnu.org/bugzilla/show_bug.cgi?id=49863

James E. King, III <jim.king at simplivity dot com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |jim.king at simplivity dot
                   |                            |com

--- Comment #3 from James E. King, III <jim.king at simplivity dot com> 2012-05-23 17:15:46 UTC ---
I would like to recommend that this issue be re-opened.  By leaving this issue
alone, debug and optimized builds behave differently.  I would like to have the
same warnings enabled for both debug and optimized builds, and currently the
only way to do that is to disable the unused result code checking for the
release build.  This seems counter-productive.  If I declare
-D_FORTIFY_SOURCE=2 on the command line, the headers should not override me
just because it is not an optimized build.  Is there some other unforeseen
reason for this rule, such as that the compiler actually cannot check for this
warning unless doing optimizations?


^ permalink raw reply	[flat|nested] 5+ messages in thread

* [Bug c/49863] -Wunused-result not behaving correctly
  2011-07-27 10:07 [Bug c/49863] New: -Wunused-result not behaving correctly antomicx at gmail dot com
                   ` (2 preceding siblings ...)
  2012-05-23 17:21 ` jim.king at simplivity dot com
@ 2012-05-23 17:27 ` pinskia at gcc dot gnu.org
  3 siblings, 0 replies; 5+ messages in thread
From: pinskia at gcc dot gnu.org @ 2012-05-23 17:27 UTC (permalink / raw)
  To: gcc-bugs

http://gcc.gnu.org/bugzilla/show_bug.cgi?id=49863

--- Comment #4 from Andrew Pinski <pinskia at gcc dot gnu.org> 2012-05-23 17:20:52 UTC ---
(In reply to comment #3)
> If I declare
> -D_FORTIFY_SOURCE=2 on the command line, the headers should not override me
> just because it is not an optimized build.  Is there some other unforeseen
> reason for this rule, such as that the compiler actually cannot check for this
> warning unless doing optimizations?

You should report the bug in glibc instead since GCC does not have control over
these headers.


^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2012-05-23 17:21 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2011-07-27 10:07 [Bug c/49863] New: -Wunused-result not behaving correctly antomicx at gmail dot com
2011-07-27 10:20 ` [Bug c/49863] " rguenth at gcc dot gnu.org
2011-07-27 10:30 ` antomicx at gmail dot com
2012-05-23 17:21 ` jim.king at simplivity dot com
2012-05-23 17:27 ` pinskia at gcc dot gnu.org

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).