http://gcc.gnu.org/bugzilla/show_bug.cgi?id=44081
--- Comment #12 from Valeriy <nordq at ya dot ru> 2011-01-20 18:23:29 UTC ---
/* attr_nn.c */
#include <stdio.h>
static void attr_nn(int i1, int *i2, int *i3) __attribute__((__nonnull__(2)));
static void attr_nn(int i1, int *i2, int *i3) {
*i2 = i1;
if (i3 == 0 || i3 == (int *) 8) printf("%p if (0 or 8)\n", i3);
else printf("%p else \n", i3);
}
int i2a;
int main(int argc, char *argv[]) {
attr_nn(1, &i2a, (int *) 0);
attr_nn(2, &i2a, (int *) 4);
attr_nn(3, &i2a, (int *) 8);
return 0;
}
/*
-----------------------------------------------------------------------------
Ubuntu GCC-4.4.5 - Error
$ gcc -O0 attr_nn.c && ./a.out
$ gcc -O1 attr_nn.c && ./a.out
$ gcc -O3 attr_nn.c && ./a.out
(nil) if (0 or 8) <- Ok
0x4 else
0x8 if (0 or 8)
$ gcc -O2 attr_nn.c && ./a.out
$ gcc -Os attr_nn.c && ./a.out
(nil) else <- Error
0x4 else
0x8 if (0 or 8)
$ gcc -v
Using built-in specs.
Target: i686-linux-gnu
Configured with: ../src/configure -v --with-pkgversion='Ubuntu/Linaro
4.4.4-14ubuntu5' --with-bugurl=file:///usr/share/doc/gcc-4.4/README.Bugs
--enable-languages=c,c++,fortran,objc,obj-c++ --prefix=/usr
--program-suffix=-4.4 --enable-shared --enable-multiarch
--enable-linker-build-id --with-system-zlib --libexecdir=/usr/lib
--without-included-gettext --enable-threads=posix
--with-gxx-include-dir=/usr/include/c++/4.4 --libdir=/usr/lib --enable-nls
--with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-objc-gc
--enable-targets=all --disable-werror --with-arch-32=i686 --with-tune=generic
--enable-checking=release --build=i686-linux-gnu --host=i686-linux-gnu
--target=i686-linux-gnu
Thread model: posix
gcc version 4.4.5 (Ubuntu/Linaro 4.4.4-14ubuntu5)
-----------------------------------------------------------------------------
Cygwin GCC-4.3.4 - Ok
$ gcc -O0 attr_nn.c && ./a.exe
$ gcc -O1 attr_nn.c && ./a.exe
$ gcc -O2 attr_nn.c && ./a.exe
$ gcc -O3 attr_nn.c && ./a.exe
$ gcc -Os attr_nn.c && ./a.exe
0x0 if (0 or 8) <- Ok
0x4 else
0x8 if (0 or 8)
-----------------------------------------------------------------------------
Cygwin GCC-4.5.0 - Error
$ gcc -O0 attr_nn.c && ./a.exe
$ gcc -O1 attr_nn.c && ./a.exe
$ gcc -O3 attr_nn.c && ./a.exe
0x0 if (0 or 8) <- Ok
0x4 else
0x8 if (0 or 8)
$ gcc -O2 attr_nn.c && ./a.exe
$ gcc -Os attr_nn.c && ./a.exe
0x0 else <- Error
0x4 else
0x8 if (0 or 8)
$ gcc -v
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/lib/gcc/i686-pc-cygwin/4.5.0/lto-wrapper.exe
Target: i686-pc-cygwin
Configured with:
/gnu/gcc/releases/respins/4.5.0-1/gcc4-4.5.0-1/src/gcc-4.5.0/configure
--srcdir=/gnu/gcc/releases/respins/4.5.0-1/gcc4-4.5.0-1/src/gcc-4.5.0
--prefix=/usr --exec-prefix=/usr --bindir=/usr/bin --sbindir=/usr/sbin
--libexecdir=/usr/lib --datadir=/usr/share --localstatedir=/var
--sysconfdir=/etc --datarootdir=/usr/share --docdir=/usr/share/doc/gcc4
--datadir=/usr/share --infodir=/usr/share/info --mandir=/usr/share/man -v
--with-gmp=/usr --with-mpfr=/usr --enable-bootstrap
--enable-version-specific-runtime-libs --libexecdir=/usr/lib --enable-static
--enable-shared --enable-shared-libgcc --disable-__cxa_atexit --with-gnu-ld
--with-gnu-as --with-dwarf2 --disable-sjlj-exceptions
--enable-languages=ada,c,c++,fortran,java,lto,objc,obj-c++ --enable-graphite
--enable-lto --enable-java-awt=gtk --disable-symvers --enable-libjava
--program-suffix=-4 --enable-libgomp --enable-libssp --enable-libada
--enable-threads=posix --with-arch=i686 --with-tune=generic
--enable-libgcj-sublibs CC=gcc-4 CXX=g++-4 CC_FOR_TARGET=gcc-4
CXX_FOR_TARGET=g++-4 GNATMAKE_FOR_TARGET=gnatmake GNATBIND_FOR_TARGET=gnatbind
--with-ecj-jar=/usr/share/java/ecj.jar
Thread model: posix
gcc version 4.5.0 (GCC)
-----------------------------------------------------------------------------
MinGW GCC-4.4.3 (Strawberry Perl) - Error
>gcc -O0 attr_nn.c && a.exe
>gcc -O1 attr_nn.c && a.exe
>gcc -O3 attr_nn.c && a.exe
00000000 if (0 or 8) <- Ok
00000004 else
00000008 if (0 or 8)
>gcc -O2 attr_nn.c && a.exe
>gcc -Os attr_nn.c && a.exe
00000000 else <- Error
00000004 else
00000008 if (0 or 8)
>gcc -v
Using built-in specs.
Target: i686-w64-mingw32
Configured with: ../gcc44-svn/configure --target=i686-w64-mingw32
--host=i686-w64-mingw32 --disable-multilib --disable-nls
--disable-win32-registry --prefix=/mingw32 --with-gmp=/mingw32
-with-mpfr=/mingw32 --enable-languages=c,c++
Thread model: win32
gcc version 4.4.3 (GCC)
-----------------------------------------------------------------------------
MinGW GCC-4.5.0 (20101030) - Error
>gcc -O0 attr_nn.c && a.exe
>gcc -O1 attr_nn.c && a.exe
>gcc -O3 attr_nn.c && a.exe
00000000 if (0 or 8) <- Ok
00000004 else
00000008 if (0 or 8)
>gcc -O2 attr_nn.c && a.exe
>gcc -Os attr_nn.c && a.exe
00000000 else <- Error
00000004 else
00000008 if (0 or 8)
gcc -v
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=g:/mingw/bin/../libexec/gcc/mingw32/4.5.0/lto-wrapper.exe
Target: mingw32
Configured with: ../gcc-4.5.0/configure
--enable-languages=c,c++,ada,fortran,objc,obj-c++ --disable-sjlj-exceptions
--with-dwarf2 --enable-shared --enable-libgomp --disable-win32-registry
--enable-libstdcxx-debug --enable-version-specific-runtime-libs
--disable-werror --build=mingw32 --prefix=/mingw
Thread model: win32
gcc version 4.5.0 (GCC)
-----------------------------------------------------------------------------
*/