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)28 objects_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