/* { dg-do compile } */
/* APPLE LOCAL lno */
/* { dg-options "-O1 -fdump-tree-dom3 -ftree-loop-optimize" } */
 
extern void abort (void);

union tree_node;
typedef union tree_node *tree;
struct tree_vec
{
          int length;
            tree a[1];
};
struct tree_type
{
          tree binfo;
};
union tree_node
{
          struct tree_type type;
            struct tree_vec vec;
};

void
record_component_aliases (type)
     tree type;
{
  int i;
  if (4 >= type->type.binfo->vec.length)
    abort ();
  for (; i < ((
                {
                const tree __t = type->type.binfo;
                if (4 >= __t->vec.length)
                abort (); type->type.binfo->vec.a[4];}
              )->vec.length);)
    {
      if (4 >= type->type.binfo->vec.length)
        abort ();
      blah ();
    }
}

/* The call to blah can not be eliminated.  */
/* { dg-final { scan-tree-dump-times "blah \\(\\)" 1 "dom3" } } */
   
/* There should be four IF conditionals.  */
/* { dg-final { scan-tree-dump-times "if " 4 "dom3"} } */
                                                                                
/* There should be two loads of type.binfo.  */
/* { dg-final { scan-tree-dump-times "type\\.binfo" 2 "dom3"} } */
 
/* There should be four loads of vec.length.  */
/* { dg-final { scan-tree-dump-times "vec.length" 4 "dom3"} } */

