1 /* { dg-do compile } */ 2 /* { dg-options "-O2 -fdump-rtl-expand-details" } */ 3 4 5 union tree_node; 6 typedef union tree_node *tree; 7 8 enum tree_code 9 { 10 ARRAY_TYPE, 11 LAST_AND_UNUSED_TREE_CODE 12 }; 13 14 struct tree_common 15 { 16 enum tree_code code:8; 17 }; 18 19 union tree_node 20 { 21 struct tree_common common; 22 }; 23 24 int foo (int); 25 int get_alias_set (tree); 26 27 int objects_must_conflict_p(t1,t2)28objects_must_conflict_p (t1, t2) 29 tree t1, t2; 30 { 31 32 if ((t1->common.code == ARRAY_TYPE) != (t2 33 && t2->common.code == ARRAY_TYPE)) 34 return 11; 35 36 37 return foo (t2 ? get_alias_set (t2) : 0); 38 } 39 40 /* There should be one assignment of variables to the value zero. There 41 used to be two assignments, but improvements in threading allowed the 42 second to be propagated into all its uses and eliminated. */ 43 /* { dg-final { scan-rtl-dump-times "PART.. = 0" 1 "expand"} } */ 44 45