/* { dg-do compile } */
/* { dg-options "-O1 -fdump-tree-dom3" } */
  

struct rtx_def;
typedef struct rtx_def *rtx;
struct rtvec_def;
typedef struct rtvec_def *rtvec;
union tree_node;
typedef union tree_node *tree;
typedef struct mem_attrs
{
  long alias;
}
mem_attrs;
union rtunion_def
{
  mem_attrs *rtmem;
};
typedef union rtunion_def rtunion;
struct rtx_def
{
  int code;
  rtunion fld[1];
};
struct tree_decl
{
  rtx rtl;
};
union tree_node
{
  struct tree_decl decl;
};
long
get_alias_set (t)
     tree t;
{
  if (t->decl.rtl != (void *) 0)
    return (((t->decl.rtl->fld[1]).rtmem) ==
            0 ? 0
            : ((((t->decl.
                  rtl ? 0 : (make_decl_rtl (t, ((void *) 0)),
                             t->decl.rtl)))->fld[1]).rtmem)->alias);
}

/* The calls to make_decl_rtl should be eliminated.  */
/* { dg-final { scan-tree-dump-not "make_decl_rtl \\(\\)" "dom3" } } */
    
/* There should be two IF conditionals.  */
/* { dg-final { scan-tree-dump-times "if " 2 "dom3"} } */
                                                                                
/* There should be one load of decl.rtl.  */
/* { dg-final { scan-tree-dump-times "decl\\.rtl" 1 "dom3"} } */
  
/* There should be two loads of rtmem.  */
/* { dg-final { scan-tree-dump-times "rtmem" 2 "dom3"} } */

/* There should be one load of alias.  */
/* { dg-final { scan-tree-dump-times "->alias" 1 "dom3"} } */
