2013-10-21 Richard Biener <rguenther@suse.de>
[official-gcc.git] / gcc / testsuite / gcc.dg / torture / pr53120.c
blob8a70290e0d0e944f3cbf85702fba36af825682e9
1 /* { dg-do compile } */
2 /* { dg-options "-fno-tree-sra" } */
3 typedef struct {
4 unsigned int en : 1;
5 unsigned int bit_order : 1;
6 unsigned int scl_io : 1;
7 unsigned int scl_inv : 1;
8 unsigned int sda0_io : 1;
9 unsigned int sda0_idle : 1;
10 unsigned int sda1_io : 1;
11 unsigned int sda1_idle : 1;
12 unsigned int sda2_io : 1;
13 unsigned int sda2_idle : 1;
14 unsigned int sda3_io : 1;
15 unsigned int sda3_idle : 1;
16 unsigned int sda_sel : 2;
17 unsigned int sen_idle : 1;
18 unsigned int sen_inv : 1;
19 unsigned int sen_sel : 2;
20 unsigned int dummy1 : 14;
21 } reg_gio_rw_i2c1_cfg;
23 typedef struct {
24 unsigned int data0 : 8;
25 unsigned int data1 : 8;
26 unsigned int data2 : 8;
27 unsigned int data3 : 8;
28 } reg_gio_rw_i2c1_data;
30 typedef struct {
31 unsigned int trf_bits : 6;
32 unsigned int switch_dir : 6;
33 unsigned int extra_start : 3;
34 unsigned int early_end : 1;
35 unsigned int start_stop : 1;
36 unsigned int ack_dir0 : 1;
37 unsigned int ack_dir1 : 1;
38 unsigned int ack_dir2 : 1;
39 unsigned int ack_dir3 : 1;
40 unsigned int ack_dir4 : 1;
41 unsigned int ack_dir5 : 1;
42 unsigned int ack_bit : 1;
43 unsigned int start_bit : 1;
44 unsigned int freq : 2;
45 unsigned int dummy1 : 5;
46 } reg_gio_rw_i2c1_ctrl;
48 extern reg_gio_rw_i2c1_cfg reg_gio;
49 extern reg_gio_rw_i2c1_data reg_data;
50 extern int reg_start;
51 extern reg_gio_rw_i2c1_ctrl reg_ctrl;
53 extern void foobar(void);
54 extern void foo(int);
55 extern void frob(unsigned int);
56 extern void bar(int);
57 extern void baz(void);
59 unsigned int f(int *devspec, unsigned int addr)
61 reg_gio_rw_i2c1_ctrl ctrl = {0};
62 reg_gio_rw_i2c1_data data = {0};
64 foobar();
66 static int first = 1;
68 if (first) {
69 reg_gio_rw_i2c1_cfg cfg = {0};
70 first = 0;
72 foo(1);
73 cfg.sda0_idle = 1;
74 cfg.sda0_io = 0;
75 cfg.scl_inv = 0;
76 cfg.scl_io = 0;
77 cfg.bit_order = 1;
78 cfg.sda_sel = 0;
79 cfg.sen_sel = 0;
80 cfg.en = 1;
81 reg_gio = cfg;
84 ctrl.freq = 1;
85 ctrl.start_bit = 0;
86 ctrl.ack_bit = 1;
87 ctrl.ack_dir0 = 0;
88 ctrl.ack_dir1 = 0;
89 ctrl.ack_dir2 = 0;
90 ctrl.ack_dir3 = 1;
91 ctrl.ack_dir4 = 0;
92 ctrl.ack_dir5 = 0;
93 ctrl.start_stop = 1;
94 ctrl.early_end = 0;
95 ctrl.extra_start = 2;
96 ctrl.switch_dir = 8*3;
97 ctrl.trf_bits = 8*4;
98 reg_ctrl = ctrl;
99 frob(0xac);
100 data.data0 = devspec[1] & 192;
101 data.data1 = addr;
102 data.data2 = devspec[1] | 0x01;
103 reg_data = data;
104 reg_start = 1;
105 bar(100);
106 data = reg_data;
107 baz();
109 return data.data3;