1/* Check that GDB can correctly update a value, living in a register, 2 in the target. This pretty much relies on the compiler taking heed 3 of requests for values to be stored in registers. */ 4 5/* NOTE: carlton/2002-12-05: These functions were all static, but for 6 whatever reason that caused GCC 3.1 to optimize away some of the 7 function calls within main even when no optimization flags were 8 passed. */ 9 10typedef signed char charest; 11 12charest 13add_charest (register charest u, register charest v) 14{ 15 return u + v; 16} 17 18short 19add_short (register short u, register short v) 20{ 21 return u + v; 22} 23 24int 25add_int (register int u, register int v) 26{ 27 return u + v; 28} 29 30long 31add_long (register long u, register long v) 32{ 33 return u + v; 34} 35 36typedef long long longest; 37 38longest 39add_longest (register longest u, register longest v) 40{ 41 return u + v; 42} 43 44float 45add_float (register float u, register float v) 46{ 47 return u + v; 48} 49 50double 51add_double (register double u, register double v) 52{ 53 return u + v; 54} 55 56typedef long double doublest; 57 58doublest 59add_doublest (register doublest u, register doublest v) 60{ 61 return u + v; 62} 63 64/* */ 65 66charest 67wack_charest (register charest u, register charest v) 68{ 69 register charest l = u, r = v; 70 l = add_charest (l, r); 71 return l + r; 72} 73 74short 75wack_short (register short u, register short v) 76{ 77 register short l = u, r = v; 78 l = add_short (l, r); 79 return l + r; 80} 81 82int 83wack_int (register int u, register int v) 84{ 85 register int l = u, r = v; 86 l = add_int (l, r); 87 return l + r; 88} 89 90long 91wack_long (register long u, register long v) 92{ 93 register long l = u, r = v; 94 l = add_long (l, r); 95 return l + r; 96} 97 98long 99wack_longest (register longest u, register longest v) 100{ 101 register longest l = u, r = v; 102 l = add_longest (l, r); 103 return l + r; 104} 105 106float 107wack_float (register float u, register float v) 108{ 109 register float l = u, r = v; 110 l = add_float (l, r); 111 return l + r; 112} 113 114double 115wack_double (register double u, register double v) 116{ 117 register double l = u, r = v; 118 l = add_double (l, r); 119 return l + r; 120} 121 122doublest 123wack_doublest (register doublest u, register doublest v) 124{ 125 register doublest l = u, r = v; 126 l = add_doublest (l, r); 127 return l + r; 128} 129 130/* */ 131 132struct s_1 { short s[1]; } z_1, s_1; 133struct s_2 { short s[2]; } z_2, s_2; 134struct s_3 { short s[3]; } z_3, s_3; 135struct s_4 { short s[4]; } z_4, s_4; 136 137struct s_1 138add_struct_1 (struct s_1 s) 139{ 140 int i; 141 for (i = 0; i < sizeof (s) / sizeof (s.s[0]); i++) 142 { 143 s.s[i] = s.s[i] + s.s[i]; 144 } 145 return s; 146} 147 148struct s_2 149add_struct_2 (struct s_2 s) 150{ 151 int i; 152 for (i = 0; i < sizeof (s) / sizeof (s.s[0]); i++) 153 { 154 s.s[i] = s.s[i] + s.s[i]; 155 } 156 return s; 157} 158 159struct s_3 160add_struct_3 (struct s_3 s) 161{ 162 int i; 163 for (i = 0; i < sizeof (s) / sizeof (s.s[0]); i++) 164 { 165 s.s[i] = s.s[i] + s.s[i]; 166 } 167 return s; 168} 169 170struct s_4 171add_struct_4 (struct s_4 s) 172{ 173 int i; 174 for (i = 0; i < sizeof (s) / sizeof (s.s[0]); i++) 175 { 176 s.s[i] = s.s[i] + s.s[i]; 177 } 178 return s; 179} 180 181struct s_1 182wack_struct_1 (void) 183{ 184 int i; register struct s_1 u = z_1; 185 for (i = 0; i < sizeof (s_1) / sizeof (s_1.s[0]); i++) { s_1.s[i] = i + 1; } 186 u = add_struct_1 (u); 187 return u; 188} 189 190struct s_2 191wack_struct_2 (void) 192{ 193 int i; register struct s_2 u = z_2; 194 for (i = 0; i < sizeof (s_2) / sizeof (s_2.s[0]); i++) { s_2.s[i] = i + 1; } 195 u = add_struct_2 (u); 196 return u; 197} 198 199struct s_3 200wack_struct_3 (void) 201{ 202 int i; register struct s_3 u = z_3; 203 for (i = 0; i < sizeof (s_3) / sizeof (s_3.s[0]); i++) { s_3.s[i] = i + 1; } 204 u = add_struct_3 (u); 205 return u; 206} 207 208struct s_4 209wack_struct_4 (void) 210{ 211 int i; register struct s_4 u = z_4; 212 for (i = 0; i < sizeof (s_4) / sizeof (s_4.s[0]); i++) { s_4.s[i] = i + 1; } 213 u = add_struct_4 (u); 214 return u; 215} 216 217/* */ 218 219struct f_1 {unsigned i:1;unsigned j:1;unsigned k:1; } f_1 = {1,1,1}, F_1; 220struct f_2 {unsigned i:2;unsigned j:2;unsigned k:2; } f_2 = {1,1,1}, F_2; 221struct f_3 {unsigned i:3;unsigned j:3;unsigned k:3; } f_3 = {1,1,1}, F_3; 222struct f_4 {unsigned i:4;unsigned j:4;unsigned k:4; } f_4 = {1,1,1}, F_4; 223 224struct f_1 225wack_field_1 (void) 226{ 227 register struct f_1 u = f_1; 228 return u; 229} 230 231struct f_2 232wack_field_2 (void) 233{ 234 register struct f_2 u = f_2; 235 return u; 236} 237 238struct f_3 239wack_field_3 (void) 240{ 241 register struct f_3 u = f_3; 242 return u; 243} 244 245struct f_4 246wack_field_4 (void) 247{ 248 register struct f_4 u = f_4; 249 return u; 250} 251 252/* */ 253 254int 255main () 256{ 257 /* These calls are for current frame test. */ 258 wack_charest (-1, -2); 259 wack_short (-1, -2); 260 wack_int (-1, -2); 261 wack_long (-1, -2); 262 wack_longest (-1, -2); 263 wack_float (-1, -2); 264 wack_double (-1, -2); 265 wack_doublest (-1, -2); 266 267 /* These calls are for up frame. */ 268 wack_charest (-1, -2); 269 wack_short (-1, -2); 270 wack_int (-1, -2); 271 wack_long (-1, -2); 272 wack_longest (-1, -2); 273 wack_float (-1, -2); 274 wack_double (-1, -2); 275 wack_doublest (-1, -2); 276 277 /* These calls are for current frame test. */ 278 wack_struct_1 (); 279 wack_struct_2 (); 280 wack_struct_3 (); 281 wack_struct_4 (); 282 283 /* These calls are for up frame. */ 284 wack_struct_1 (); 285 wack_struct_2 (); 286 wack_struct_3 (); 287 wack_struct_4 (); 288 289 wack_field_1 (); 290 wack_field_2 (); 291 wack_field_3 (); 292 wack_field_4 (); 293 294 return 0; 295} 296