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) ----------------------------------------------------------------------------- */