Skip to content

Commit

Permalink
PR c/86420
Browse files Browse the repository at this point in the history
	* real.c (real_nextafter): Return true if result is denormal.

	* gcc.dg/nextafter-1.c (TEST): Adjust the tests that expect denormals
	to be returned and when first argument is not 0, so that they don't do
	anything for NEED_EXC or NEED_ERRNO.


git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@262517 138bc75d-0d04-0410-961f-82ee72b054a4
  • Loading branch information
jakub committed Jul 9, 2018
1 parent f0fa5a6 commit dd4fe92
Show file tree
Hide file tree
Showing 4 changed files with 52 additions and 14 deletions.
5 changes: 5 additions & 0 deletions gcc/ChangeLog
Original file line number Diff line number Diff line change
@@ -1,3 +1,8 @@
2018-07-09 Jakub Jelinek <[email protected]>

PR c/86420
* real.c (real_nextafter): Return true if result is denormal.

2018-07-09 Martin Liska <[email protected]>

* common.opt: Add back wrongly removed attribute.
Expand Down
2 changes: 1 addition & 1 deletion gcc/real.c
Original file line number Diff line number Diff line change
Expand Up @@ -5141,7 +5141,7 @@ real_nextafter (REAL_VALUE_TYPE *r, format_helper fmt,
get_zero (r, x->sign);
return true;
}
return r->cl == rvc_zero;
return r->cl == rvc_zero || REAL_EXP (r) < fmt->emin;
}

/* Write into BUF the maximum representable finite floating-point
Expand Down
7 changes: 7 additions & 0 deletions gcc/testsuite/ChangeLog
Original file line number Diff line number Diff line change
@@ -1,3 +1,10 @@
2018-07-09 Jakub Jelinek <[email protected]>

PR c/86420
* gcc.dg/nextafter-1.c (TEST): Adjust the tests that expect denormals
to be returned and when first argument is not 0, so that they don't do
anything for NEED_EXC or NEED_ERRNO.

2018-07-09 Tom de Vries <[email protected]>

* gcc.dg/guality/asm-1.c: Use relative line numbers where obvious.
Expand Down
52 changes: 39 additions & 13 deletions gcc/testsuite/gcc.dg/nextafter-1.c
Original file line number Diff line number Diff line change
Expand Up @@ -58,43 +58,69 @@ name (void) \
= (NEED_EXC || NEED_ERRNO) ? __builtin_inf##l1 () \
: fn (MAX1, __builtin_inf ()); \
CHECK (__builtin_isinf##l1 (m) && !__builtin_signbit (m)); \
const type n = fn (DENORM_MIN1, 12.0##L2); \
const type n \
= (NEED_EXC || NEED_ERRNO) ? 2.0##L1 * DENORM_MIN1 \
: fn (DENORM_MIN1, 12.0##L2); \
CHECK (n == 2.0##L1 * DENORM_MIN1); \
const type o = fn (n, 24.0##L2); \
const type o \
= (NEED_EXC || NEED_ERRNO) ? 3.0##L1 * DENORM_MIN1 \
: fn (n, 24.0##L2); \
CHECK (o == 3.0##L1 * DENORM_MIN1); \
const type p = fn (o, 132.0##L2); \
const type p \
= (NEED_EXC || NEED_ERRNO) ? 4.0##L1 * DENORM_MIN1 \
: fn (o, 132.0##L2); \
CHECK (p == 4.0##L1 * DENORM_MIN1); \
const type q = fn (2.0##L1 * DENORM_MIN1, -__builtin_inf ()); \
const type q \
= (NEED_EXC || NEED_ERRNO) ? DENORM_MIN1 \
: fn (2.0##L1 * DENORM_MIN1, -__builtin_inf ()); \
CHECK (q == DENORM_MIN1); \
const type r = fn (3.0##L1 * DENORM_MIN1, DENORM_MIN2); \
const type r \
= (NEED_EXC || NEED_ERRNO) ? 2.0##L1 * DENORM_MIN1 \
: fn (3.0##L1 * DENORM_MIN1, DENORM_MIN2); \
CHECK (r == 2.0##L1 * DENORM_MIN1); \
const type s = fn (4.0##L1 * DENORM_MIN1, 2.0##L2 * DENORM_MIN2); \
const type s \
= (NEED_EXC || NEED_ERRNO) ? 3.0##L1 * DENORM_MIN1 \
: fn (4.0##L1 * DENORM_MIN1, 2.0##L2 * DENORM_MIN2); \
CHECK (s == 3.0##L1 * DENORM_MIN1); \
const type t = fn (MIN1, 0.0##L2); \
const type t \
= (NEED_EXC || NEED_ERRNO) ? MIN1 - DENORM_MIN1 \
: fn (MIN1, 0.0##L2); \
CHECK (t == MIN1 - DENORM_MIN1); \
const type u = fn (MIN1 - DENORM_MIN1, -MIN2); \
const type u \
= (NEED_EXC || NEED_ERRNO) ? MIN1 - 2.0##L1 * DENORM_MIN1 \
: fn (MIN1 - DENORM_MIN1, -MIN2); \
CHECK (u == MIN1 - 2.0##L1 * DENORM_MIN1); \
const type v = fn (MIN1 - 2.0##L1 * DENORM_MIN1, 100.0##L2); \
const type v \
= (NEED_EXC || NEED_ERRNO) ? MIN1 - DENORM_MIN1 \
: fn (MIN1 - 2.0##L1 * DENORM_MIN1, 100.0##L2); \
CHECK (v == MIN1 - DENORM_MIN1); \
const type w = fn (MIN1 - DENORM_MIN1, MAX2); \
CHECK (w == MIN1); \
const type x = fn (MIN1, 17.0##L2); \
CHECK (x == MIN1 + DENORM_MIN1); \
const type y = fn (MIN1 + DENORM_MIN1, __builtin_inf##l2 ()); \
CHECK (y == MIN1 + 2.0##L1 * DENORM_MIN1); \
const type z = fn (MIN1 / 2.0##L1, -MIN2); \
const type z \
= (NEED_EXC || NEED_ERRNO) ? MIN1 / 2.0##L1 - DENORM_MIN1 \
: fn (MIN1 / 2.0##L1, -MIN2); \
CHECK (z == MIN1 / 2.0##L1 - DENORM_MIN1); \
const type aa = fn (-MIN1 / 4.0##L1, MIN2); \
const type aa \
= (NEED_EXC || NEED_ERRNO) ? -MIN1 / 4.0##L1 + DENORM_MIN1 \
: fn (-MIN1 / 4.0##L1, MIN2); \
CHECK (aa == -MIN1 / 4.0##L1 + DENORM_MIN1); \
const type ab = fn (MIN1 * 2.0##L1, -MIN2); \
CHECK (ab == MIN1 * 2.0##L1 - DENORM_MIN1); \
const type ac = fn (MIN1 * 4.0##L1, MIN2); \
CHECK (ac == MIN1 * 4.0##L1 - DENORM_MIN1 * 2.0##L1); \
const type ad = fn (MIN1 * 64.0##L1, MIN2); \
CHECK (ad == MIN1 * 64.0##L1 - DENORM_MIN1 * 32.0##L1); \
const type ae = fn (MIN1 / 2.0##L1 - DENORM_MIN1, 100.0##L2); \
const type ae \
= (NEED_EXC || NEED_ERRNO) ? MIN1 / 2.0##L1 \
: fn (MIN1 / 2.0##L1 - DENORM_MIN1, 100.0##L2); \
CHECK (ae == MIN1 / 2.0##L1); \
const type af = fn (-MIN1 / 4 + DENORM_MIN1, -100.0##L2); \
const type af \
= (NEED_EXC || NEED_ERRNO) ? -MIN1 / 4.0##L1 \
: fn (-MIN1 / 4 + DENORM_MIN1, -100.0##L2); \
CHECK (af == -MIN1 / 4.0##L1); \
const type ag = fn (MIN1 * 2.0##L1 - DENORM_MIN1, 100.0##L2); \
CHECK (ag == MIN1 * 2.0##L1); \
Expand Down

0 comments on commit dd4fe92

Please sign in to comment.