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

Valeriy <nordq at ya dot ru> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |nordq at ya dot ru

--- Comment #11 from Valeriy <nordq at ya dot ru> 2010-12-26 22:57:48 UTC ---
/*
nonnull_2.c

gcc -O0 nonnull_2.c
gcc -O1 nonnull_2.c
gcc -O3 nonnull_2.c

00000000  if (0 or 8)  <- Ok
00000004  else
00000008  if (0 or 8)

gcc -O2 nonnull_2.c
gcc -Os nonnull_2.c

00000000  else         <- Error
00000004  else
00000008  if (0 or 8)
*/

#include <stdio.h>

static void attribute_nonnull_2(int i1, int *i2, int *i3)
__attribute__((__nonnull__(2)));
static void attribute_nonnull_2(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[]) {
    attribute_nonnull_2(1, &i2a, (int *) 0);
    attribute_nonnull_2(2, &i2a, (int *) 4);
    attribute_nonnull_2(3, &i2a, (int *) 8);
    return 0;
}

Reply via email to