blob: 9a79bdaeb74cc854c3353e6757858fd87f8aff9a [file] [log] [blame]
/* { dg-lto-do run } */
/* { dg-lto-options { { -O3 -flto } } } */
/* With LTO we consider all pointers to incomplete types to be possibly
aliasing. This makes *bptr to alias with aptr.
However with C++ ODR rule we can turn incomplete pointers to complete
dragging in info from alias-1_1.C. */
#include <string.h>
typedef int (*fnptr) ();
__attribute__ ((used))
struct a *aptr;
__attribute__ ((used))
struct b **bptr = (struct b**)&aptr;
extern void init ();
extern void inline_me_late (int);
int n=1;
int
main (int argc, char **argv)
{
init ();
aptr = 0;
for (int i=0; i<n; i++)
inline_me_late (argc);
if (!__builtin_constant_p (aptr == 0))
__builtin_abort ();
return (size_t)aptr;
}