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