1/* { dg-do compile } */ 2/* { dg-options "-O1 -fdump-tree-dom2 -fdump-tree-optimized" } */ 3 4extern void abort (void); 5union tree_node; 6typedef union tree_node *tree; 7extern const char tree_code_type[]; 8struct tree_common 9{ 10 int code; 11}; 12struct tree_decl 13{ 14 long pointer_alias_set; 15}; 16union tree_node 17{ 18 struct tree_common common; 19 struct tree_decl decl; 20}; 21long 22blah (decl, set) 23 tree decl; 24 long set; 25{ 26 decl->decl.pointer_alias_set = oof(); 27 if (tree_code_type[decl->common.code] != 'd') 28 abort (); 29 record_alias_subset (decl->decl.pointer_alias_set); 30 if (set != -1) 31 set = 0; 32 return set; 33} 34 35/* There should be precisely one reference to pointer_alias_set. If there is 36 more than one, then the dominator optimizations failed. */ 37/* { dg-final { scan-tree-dump-times "pointer_alias_set" 1 "dom2"} } */ 38/* { dg-final { cleanup-tree-dump "dom2" } } */ 39 40/* The assignment set = -1 in the ELSE clause of the last IF 41 statement should be removed by the final cleanup phase. */ 42/* { dg-final { scan-tree-dump-times "set = -1" 0 "optimized"} } */ 43/* { dg-final { cleanup-tree-dump "optimized" } } */ 44