User account creation filtered due to spam.

Bug 36823 - missing uninitialized warning (IPA, inlining)
Summary: missing uninitialized warning (IPA, inlining)
Status: NEW
Alias: None
Product: gcc
Classification: Unclassified
Component: middle-end (show other bugs)
Version: 4.3.1
: P3 normal
Target Milestone: ---
Assignee: Not yet assigned to anyone
URL:
Keywords: diagnostic
Depends on:
Blocks: Wuninitialized
  Show dependency treegraph
 
Reported: 2008-07-14 14:02 UTC by heide-gcc
Modified: 2016-08-06 18:20 UTC (History)
3 users (show)

See Also:
Host:
Target:
Build:
Known to work:
Known to fail:
Last reconfirmed: 2009-02-09 15:35:38


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description heide-gcc 2008-07-14 14:02:27 UTC
Target: i686-pc-linux-gnulibc2
Configured with: ../configure --prefix=/tmp/gcc-4.3.1 --disable-nls --enable-shared --with-sysroot=/usr/i686-pc-linux-gnulibc2/ i686-pc-linux-gnulibc2
gcc version 4.3.1 (GCC)

$ gcc -O -Wall -Wuninitialized -c -o t.o t.c
$ gcc -O -Wall -Wuninitialized -fno-unit-at-a-time -c -o t.o t.c
t.c: In function 'f1':
t.c:14: warning: 'pp' may be used uninitialized in this function
$ cat t.c
struct a
{ struct a *n;
  struct b *b;
};

struct b
{ struct b *n;
};

extern struct a *a;

static int
f1 (struct b *b)
{ struct b *pp;
  struct b *p;
  for (p = b; p; p = p->n) pp = p;
  return (!pp);
}

int
f2 (void)
{ struct a *p;
  for (p = a; p; p = p->n) if (f1 (p->b)) return 0;
  return 1;
}

An older version of gcc (gcc (GCC) 3.3.3) works as expected.
A current version of gcc from Debian Unstable (gcc (Debian 4.3.1-6) 4.3.1)
shows the same failure
Comment 1 Andrew Pinski 2008-08-11 00:37:50 UTC
So what is happening is that we are saying pp is another name for p so it gets optimized as that.
Comment 2 Manuel López-Ibáñez 2009-02-09 15:35:38 UTC
After inlining, pp is initialized to 0.

 # BLOCK 3 freq:9550, starting at line 0
  # PRED: 10 [95.5%]  (true,exec)
  [/home/manuel/pr36823.c : 23] D.1611_4 = [/home/manuel/pr36823.c : 23] pD.1607_2->bD.1592;
  ppD.1620_9 = 0B;
  # SUCC: 4 [100.0%]  (fallthru,exec)

This doesn't seem to be CCP or anything else, but IPA. Something during IPA just assumes that the undefined value is 0.
Comment 3 Manuel López-Ibáñez 2016-08-06 18:20:16 UTC
GCC 6.1 warns, but the location is not clear:

23 : warning: 'pp' may be used uninitialized in this function [-Wmaybe-uninitialized]
for (p = a; p; p = p->n) if (f1 (p->b)) return 0;
^