1 /* { dg-do compile } */
2 /* { dg-options "-O1 -fdump-tree-dom2" } */
3 
4 extern void abort (void);
5 struct rtx_def;
6 typedef struct rtx_def *rtx;
7 
8 
9 struct rtx_def
10 {
11 
12   int code;
13   unsigned int unchanging:1;
14 
15 };
16 rtx current_sym_addr;
17 
18 int
foo()19 foo ()
20 {
21   if (current_sym_addr->code == 42
22       && (({
23 	       rtx _rtx = current_sym_addr;
24 	       if (((_rtx)->code) != 42)
25 	         abort ();
26 	       _rtx;}
27 	   )->unchanging))
28     return 0;
29 }
30 
31 /* There should be precisely one load of ->code.  If there is
32    more than, then the dominator optimizations failed.  */
33 /* { dg-final { scan-tree-dump-times "->code" 1 "dom2"} } */
34 
35 /* There should be two IF statements.  One for 'current_sym_addr->code == 42'.
36    The other one for '(EXPR)->unchanging'.  */
37 /* { dg-final { scan-tree-dump-times "if " 2 "dom2"} } */
38 
39