[Bug lto/84316] New: -Wnull-dereference doesn't work with LTO

msebor at gcc dot gnu.org gcc-bugzilla@gcc.gnu.org
Fri Feb 9 18:19:00 GMT 2018


https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84316

            Bug ID: 84316
           Summary: -Wnull-dereference doesn't work with LTO
           Product: gcc
           Version: 8.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: lto
          Assignee: unassigned at gcc dot gnu.org
          Reporter: msebor at gcc dot gnu.org
                CC: marxin at gcc dot gnu.org
  Target Milestone: ---

As I mentioned in pr84315, while testing my fix for pr84212 I noticed that the
-Wnull-dereference warning has no effect in LTO.

Unlike some other middle-end warning options that are specified in
c-family/c.opt and that explicitly enable LTO, -Wnull-dereference is only
mentioned in common.opt with no mention of what languages it applies to
(presumably because it's meant to apply to all languages).  That makes me
wonder  if any other options in common.opt suffer from this problem.

$ (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


More information about the Gcc-bugs mailing list