This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug tree-optimization/81809] New: missing -Wuninitialized due to alias analysis limitation
- From: "msebor at gcc dot gnu.org" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: Thu, 10 Aug 2017 19:45:57 +0000
- Subject: [Bug tree-optimization/81809] New: missing -Wuninitialized due to alias analysis limitation
- Auto-submitted: auto-generated
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=81809
Bug ID: 81809
Summary: missing -Wuninitialized due to alias analysis
limitation
Product: gcc
Version: 8.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: tree-optimization
Assignee: unassigned at gcc dot gnu.org
Reporter: msebor at gcc dot gnu.org
Target Milestone: ---
This almost certainly a side-effect of the limitations of the flow-insensitive
alias analysis pointed out in bug 23384 but I wanted to make a record of the
impact the limitation has beyond optimization.
Both functions below read the uninitialized variable b. The uninitialized read
is diagnosed in g() but not in h() because the address of the variable is
considered to have escaped even though it doesn't happen until after it has
been read.
$ cat a.c && gcc -O2 -S -Wall -Wextra -Wpedantic a.c
void f (const void*);
int g (void)
{
int a, b;
f (&a);
int i = b; // -Wuninitialized (good)
return i;
}
int h (void)
{
int a, b;
f (&a);
int i = b; // missing -Wuninitialized (bug)
f (&b); // &b escapes here
return i;
}
a.c: In function ‘g’:
a.c:8:7: warning: ‘b’ is used uninitialized in this function [-Wuninitialized]
int i = b; // -Wuninitialized (good)
^