1 /* { dg-do compile } */ 2 /* { dg-options "-O1 -fno-tree-fre -fdump-tree-dom2" } */ 3 4 extern void abort (void); 5 union tree_node; 6 typedef union tree_node *tree; 7 enum tree_code 8 { 9 LAST_AND_UNUSED_TREE_CODE 10 }; 11 extern const char tree_code_type[]; 12 struct tree_common 13 { 14 enum tree_code code:8; 15 }; 16 struct tree_type 17 { 18 struct tree_common common; 19 double alias_set; 20 }; 21 union tree_node 22 { 23 struct tree_common common; 24 struct tree_type type; 25 }; 26 long foo(t,set)27foo (t, set) 28 tree t; 29 double set; 30 { 31 if (tree_code_type[t->common.code] != 't') 32 abort (); 33 34 t->type.alias_set = set; 35 36 if (t->common.code == 42) 37 return 1; 38 else 39 return 0; 40 } 41 /* There should be precisely one load of common.code. If there is 42 more than one, then the dominator optimizations failed. */ 43 /* { dg-final { scan-tree-dump-times "common.code" 1 "dom2" } } */ 44