blob: 9e57a9ca725060c59b75d756567cbb0fc5688796 [file] [log] [blame]
/* { dg-do run } */
/* { dg-require-effective-target int32plus } */
struct s { __INT64_TYPE__ e; };
static void f (struct s *ps)
{
volatile __INT64_TYPE__ m = 9223372036854775807;
const char *str = "11E";
int r;
__INT64_TYPE__ sum;
ps->e = 0;
for (;;)
{
if (*str++ != '1')
break;
ps->e ++;
}
r = 1;
sum = m;
if (sum >= 0 && ps->e >= 0)
{
__UINT64_TYPE__ uc;
uc = (__UINT64_TYPE__) sum + (__UINT64_TYPE__) ps->e;
if (uc > 9223372036854775807)
r = 2;
else
sum = 17;
}
else
sum = sum + ps->e;
if (sum != 9223372036854775807)
__builtin_abort ();
if (r != 2)
__builtin_abort ();
ps->e = sum;
}
int main (void)
{
struct s s;
f (&s);
return 0;
}