/* PR target/58578 */ /* { dg-do run } */ /* { dg-options "-O1" } */ #include typedef struct { long _prec; int _flag; long _exp; } __my_st_t; typedef __my_st_t *__my_st_ptr; int _test_fn (__my_st_ptr y, const __my_st_ptr xt) { int inexact; if (xt->_exp != -2147483647L) { (y->_flag = xt->_flag); } do { __my_st_ptr _y = y; long _err1 = -2 * xt->_exp; long _err2 = 2; if (0 < _err1) { unsigned long _err = (unsigned long) _err1 + _err2; if (__builtin_expect(!!(_err > _y->_prec + 1), 0)) return 2; return 3; } } while (0); return 0; } int main () { __my_st_t x, y; long pz; int inex; x._prec = 914; y._exp = 18; if (_test_fn (&x, &y)) { abort(); } return 0; }