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