1 /* { dg-do run } */
2 /* { dg-require-effective-target int32plus } */
3
4 struct s { __INT64_TYPE__ e; };
5
6 static void f (struct s *ps)
7 {
8 volatile __INT64_TYPE__ m = 9223372036854775807;
9 const char *str = "11E";
10 int r;
11 __INT64_TYPE__ sum;
12
13 ps->e = 0;
14
15 for (;;)
16 {
17 if (*str++ != '1')
18 break;
19 ps->e ++;
20 }
21
22 r = 1;
23 sum = m;
24
25 if (sum >= 0 && ps->e >= 0)
26 {
27 __UINT64_TYPE__ uc;
28 uc = (__UINT64_TYPE__) sum + (__UINT64_TYPE__) ps->e;
29 if (uc > 9223372036854775807)
30 r = 2;
31 else
32 sum = 17;
33 }
34 else
35 sum = sum + ps->e;
36
37 if (sum != 9223372036854775807)
38 __builtin_abort ();
39 if (r != 2)
40 __builtin_abort ();
41 ps->e = sum;
42 }
43
44 int main (void)
45 {
46 struct s s;
47 f (&s);
48 return 0;
49 }