diff --git a/math/libm-test.inc b/math/libm-test.inc
index 0fe0f69..574654e 100644
--- a/math/libm-test.inc
+++ b/math/libm-test.inc
@@ -9553,10 +9553,7 @@ static const struct test_ff_f_data nextafter_test_data[] =
 static void
 nextafter_test (void)
 {
-
-  START (nextafter, 1);
-  RUN_TEST_LOOP_ff_f (nextafter, nextafter_test_data, );
-  END;
+  ALL_RM_TEST (nextafter, 1, nextafter_test_data, RUN_TEST_LOOP_ff_f, END);
 }
 
 
diff --git a/math/s_nextafter.c b/math/s_nextafter.c
index 7b026f0..28962e5 100644
--- a/math/s_nextafter.c
+++ b/math/s_nextafter.c
@@ -70,10 +70,8 @@ double __nextafter(double x, double y)
 	}
 	hy = hx&0x7ff00000;
 	if(hy>=0x7ff00000) {
-	  x = x+x;	/* overflow  */
-	  if (FLT_EVAL_METHOD != 0 && FLT_EVAL_METHOD != 1)
-	    asm ("" : "+m"(x));
-	  return x;	/* overflow  */
+	  double u = x+x;	/* overflow  */
+	  math_force_eval (u);
 	}
 	if(hy<0x00100000) {
 	    double u = x*x;			/* underflow */
diff --git a/sysdeps/i386/fpu/s_nextafterl.c b/sysdeps/i386/fpu/s_nextafterl.c
index bafe743..66d903f 100644
--- a/sysdeps/i386/fpu/s_nextafterl.c
+++ b/sysdeps/i386/fpu/s_nextafterl.c
@@ -106,7 +106,10 @@ long double __nextafterl(long double x, long double y)
 	    }
 	}
 	esy = esx&0x7fff;
-	if(esy==0x7fff) return x+x;	/* overflow  */
+	if(esy==0x7fff) {
+	    long double u = x + x;	/* overflow  */
+	    math_force_eval (u);
+	}
 	if(esy==0) {
 	    long double u = x*x;		/* underflow */
 	    math_force_eval (u);		/* raise underflow flag */
diff --git a/sysdeps/ieee754/flt-32/s_nextafterf.c b/sysdeps/ieee754/flt-32/s_nextafterf.c
index b0de3d9..22e0b3d 100644
--- a/sysdeps/ieee754/flt-32/s_nextafterf.c
+++ b/sysdeps/ieee754/flt-32/s_nextafterf.c
@@ -57,10 +57,8 @@ float __nextafterf(float x, float y)
 	}
 	hy = hx&0x7f800000;
 	if(hy>=0x7f800000) {
-	  x = x+x;	/* overflow  */
-	  if (FLT_EVAL_METHOD != 0)
-	    asm ("" : "+m"(x));
-	  return x;	/* overflow  */
+	  float u = x+x;	/* overflow  */
+	  math_force_eval (u);
 	}
 	if(hy<0x00800000) {
 	    float u = x*x;			/* underflow */
diff --git a/sysdeps/ieee754/ldbl-128/s_nextafterl.c b/sysdeps/ieee754/ldbl-128/s_nextafterl.c
index e345bc8..d5eaa1c 100644
--- a/sysdeps/ieee754/ldbl-128/s_nextafterl.c
+++ b/sysdeps/ieee754/ldbl-128/s_nextafterl.c
@@ -67,7 +67,10 @@ long double __nextafterl(long double x, long double y)
 	    }
 	}
 	hy = hx&0x7fff000000000000LL;
-	if(hy==0x7fff000000000000LL) return x+x;/* overflow  */
+	if(hy==0x7fff000000000000LL) {
+	    long double u = x + x;		/* overflow  */
+	    math_force_eval (u);
+	}
 	if(hy==0) {
 	    long double u = x*x;		/* underflow */
 	    math_force_eval (u);		/* raise underflow flag */
diff --git a/sysdeps/ieee754/ldbl-128ibm/s_nextafterl.c b/sysdeps/ieee754/ldbl-128ibm/s_nextafterl.c
index c050944..30b1540 100644
--- a/sysdeps/ieee754/ldbl-128ibm/s_nextafterl.c
+++ b/sysdeps/ieee754/ldbl-128ibm/s_nextafterl.c
@@ -66,8 +66,11 @@ long double __nextafterl(long double x, long double y)
 	       long double with a 106 bit mantissa, and nextafterl
 	       is insane with variable precision.  So to make
 	       nextafterl sane we assume 106 bit precision.  */
-	    if((hx==0xffefffffffffffffLL)&&(lx==0xfc8ffffffffffffeLL))
-	      return x+x;	/* overflow, return -inf */
+	    if((hx==0xffefffffffffffffLL)&&(lx==0xfc8ffffffffffffeLL)) {
+	      u = x+x;	/* overflow, return -inf */
+	      math_force_eval (u);
+	      return y;
+	    }
 	    if (hx >= 0x7ff0000000000000LL) {
 	      u = 0x1.fffffffffffff7ffffffffffff8p+1023L;
 	      return u;
@@ -93,8 +96,11 @@ long double __nextafterl(long double x, long double y)
 	    }
 	    return x - u;
 	} else {				/* x < y, x += ulp */
-	    if((hx==0x7fefffffffffffffLL)&&(lx==0x7c8ffffffffffffeLL))
-	      return x+x;	/* overflow, return +inf */
+	    if((hx==0x7fefffffffffffffLL)&&(lx==0x7c8ffffffffffffeLL)) {
+	      u = x+x;	/* overflow, return +inf */
+	      math_force_eval (u);
+	      return y;
+	    }
 	    if ((uint64_t) hx >= 0xfff0000000000000ULL) {
 	      u = -0x1.fffffffffffff7ffffffffffff8p+1023L;
 	      return u;
diff --git a/sysdeps/m68k/m680x0/fpu/s_nextafterl.c b/sysdeps/m68k/m680x0/fpu/s_nextafterl.c
index 03c136b..ad77ca4 100644
--- a/sysdeps/m68k/m680x0/fpu/s_nextafterl.c
+++ b/sysdeps/m68k/m680x0/fpu/s_nextafterl.c
@@ -89,7 +89,10 @@ long double __nextafterl(long double x, long double y)
 	    }
 	}
 	esy = esx&0x7fff;
-	if(esy==0x7fff) return x+x;	/* overflow  */
+	if(esy==0x7fff) {
+	    long double u = x + x;	/* overflow  */
+	    math_force_eval (u);
+	}
 	if(esy==0 && (hx & 0x80000000) == 0) { /* underflow */
 	    y = x*x;
 	    math_force_eval (y);		/* raise underflow flag */
