/* PR 15262.
   The alias analyzer only considers relations between pointers and
   symbols.  If two pointers P and Q point to the same symbol S, then
   their respective memory tags will either be the same or they will
   have S in their alias set.

   However, if there are no common symbols between P and Q, TBAA will
   currently miss their alias relationship altogether.  */
struct A
{
  int t;
  int i;
};

int foo () { return 3; }

main ()
{
  struct A loc, *locp;
  float f, g, *p;
  int T355, *T356;

  /* Avoid the partial hack in TBAA that would consider memory tags if
     the program had no addressable symbols.  */
  f = 3;
  g = 2;
  p = foo () ? &g : &f;
  if (*p > 0.0)
    g = 1;

  /* Store into *locp and cache its current value.  */
  locp = malloc (sizeof (*locp));
  locp->i = 10;
  T355 = locp->i;

  /* Take the address of one of locp's fields and write to it.  */
  T356 = &locp->i;
  *T356 = 1;

  /* Read the recently stored value.  If TBAA fails, this will appear
     as a redundant load that will be replaced with '10'.  */
  T355 = locp->i;
  if (T355 != 1)
    abort ();

  return 0;
}
