| /* { dg-do compile } */ |
| /* { dg-options "-O2 -fdump-rtl-expand-details" } */ |
| |
| |
| union tree_node; |
| typedef union tree_node *tree; |
| |
| enum tree_code |
| { |
| ARRAY_TYPE, |
| LAST_AND_UNUSED_TREE_CODE |
| }; |
| |
| struct tree_common |
| { |
| enum tree_code code:8; |
| }; |
| |
| union tree_node |
| { |
| struct tree_common common; |
| }; |
| |
| int foo (int); |
| int get_alias_set (tree); |
| |
| int |
| objects_must_conflict_p (t1, t2) |
| tree t1, t2; |
| { |
| |
| if ((t1->common.code == ARRAY_TYPE) != (t2 |
| && t2->common.code == ARRAY_TYPE)) |
| return 11; |
| |
| |
| return foo (t2 ? get_alias_set (t2) : 0); |
| } |
| |
| /* There should be one assignment of variables to the value zero. There |
| used to be two assignments, but improvements in threading allowed the |
| second to be propagated into all its uses and eliminated. */ |
| /* { dg-final { scan-rtl-dump-times "PART.. = 0" 1 "expand"} } */ |
| |