Martin Sebor <msebor at gcc dot> changed:

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

--- Comment #3 from Martin Sebor <msebor at gcc dot> ---
Aww rats, I forgot about -Wnull-dereference.

It's really unfortunate that -Wnull-dereference is disabled by default.  Worse,
enabling -Wnull-dereference has no effect in LTO (see below).  Let me resolve
this as invalid and open a new bug for the LTO limitation.

$ (set -x; cat a.c; cc='gcc -O3 -Wall -Wextra -Wnull-dereference -flto'; $cc -c
a.c && $cc -DMAIN -c -o main.o a.c && $cc a.o main.o)
+ cat a.c
#if MAIN

extern int f (int[], int, int);

int main (void)
  int *p = 0;
  int i = f (p, 123, 5);   // missing -Wnull-dereference

  int *q;
  int j = f (q, 123, 5);   // -Wuninitialized (good)

  return i + j;


int f (int a[], int i, int x)
  int tmp = a[i];
  a[i] = x;
  return tmp;

+ cc='gcc -O3 -Wall -Wextra -Wnull-dereference -flto'
+ gcc -O3 -Wall -Wextra -Wnull-dereference -flto -c a.c
+ gcc -O3 -Wall -Wextra -Wnull-dereference -flto -DMAIN -c -o main.o a.c
a.c: In function ‘main’:
a.c:11:11: warning: ‘q’ is used uninitialized in this function
   int j = f (q, 123, 5);   // -Wuninitialized (good)
+ gcc -O3 -Wall -Wextra -Wnull-dereference -flto a.o main.o

Reply via email to