https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84315
Martin Sebor <msebor at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Status|UNCONFIRMED |RESOLVED
Resolution|--- |INVALID
--- Comment #3 from Martin Sebor <msebor at gcc dot gnu.org> ---
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;
}
#else
int f (int a[], int i, int x)
{
int tmp = a[i];
a[i] = x;
return tmp;
}
#endif
+ 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
[-Wuninitialized]
int j = f (q, 123, 5); // -Wuninitialized (good)
^~~~~~~~~~~~~
+ gcc -O3 -Wall -Wextra -Wnull-dereference -flto a.o main.o