[Bug lto/41032] New: Wrong code from TBAA because not completing structs during merging
rguenth at gcc dot gnu dot org
gcc-bugzilla@gcc.gnu.org
Tue Aug 11 11:17:00 GMT 2009
We do not complete structs during type merging nor do we consider types which
just differ in completeness as equal.
t1.c:
struct X;
struct Y
{
struct X *p;
int i;
};
void foo (struct Y *p)
{
p->i = 1;
}
t2.c:
/* struct X is complete in this TU, this causes us to not merge Y and
thus assign different alias-sets to them. */
struct X
{
int i;
};
struct Y
{
struct X *p;
int i;
};
extern void abort (void);
extern void foo(struct Y *);
int __attribute__((noinline)) bar(struct Y *p)
{
p->i = 0;
foo (p);
return p->i;
}
int main()
{
struct Y y;
if (bar (&y) != 1)
abort ();
return;
}
just forward-declaring struct X in t2.c or compiling with -fno-strict-aliasing
fixes the issue.
--
Summary: Wrong code from TBAA because not completing structs
during merging
Product: gcc
Version: lto
Status: UNCONFIRMED
Keywords: wrong-code
Severity: normal
Priority: P3
Component: lto
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: rguenth at gcc dot gnu dot org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=41032
More information about the Gcc-bugs
mailing list