Hi,
here is testcase for that.
I think we need to get rid of most -1 return values to make access path
matching work. Here we work out that stroing to *bptr
is not going to affect a since *bptr is a struct, but alias set
conflicts does not help.
This fails w/o patch sine struct b and int * compares as -1.
/* { dg-lto-do run } */
/* { dg-lto-options { { -O3 -flto -fno-early-inlining } } } */
#include <stdlib.h>
/* We should disambiguate
int *
and
struct a *
despite the fact they get same alias set because struct a is incomplete. */
typedef int (*fnptr) ();
__attribute__ ((used))
int *a,**aptr=&a;
__attribute__ ((used))
struct b {int *a;} *bptr,b;
static void
inline_me_late (int argc)
{
if (argc == -1)
*bptr = b;
}
int
main (int argc)
{
a = 0;
inline_me_late (argc);
if (!__builtin_constant_p (a == 0))
__builtin_abort ();
return 0;
}