1 /* { dg-do run } */
2 /* { dg-require-effective-target int32plus } */
3 
4 struct s { __INT64_TYPE__ e; };
5 
f(struct s * ps)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 
main(void)44 int main (void)
45 {
46   struct s s;
47   f (&s);
48   return 0;
49 }
50