svn commit: r367811 - head/lib/msun/tests

Alfredo Dal'Ava Junior alfredo at FreeBSD.org
Wed Nov 18 19:23:31 UTC 2020


Author: alfredo
Date: Wed Nov 18 19:23:30 2020
New Revision: 367811
URL: https://svnweb.freebsd.org/changeset/base/367811

Log:
  msun tests: use standard floating-point exception flags on lrint and fenv tests
  
  Some platforms have additional architecture-specific floating-point flags.
  Msun test cases lrint and test_fegsetenv (fenv) expects only standard flags,
  so make sure to mask them appropriately.
  
  This makes test pass on PowerPC64.
  
  Reviewed by:	jhibbits, ngie
  Sponsored by:	Eldorado Research Institute (eldorado.org.br)
  Differential Revision:	https://reviews.freebsd.org/D27202

Modified:
  head/lib/msun/tests/fenv_test.c
  head/lib/msun/tests/lrint_test.c

Modified: head/lib/msun/tests/fenv_test.c
==============================================================================
--- head/lib/msun/tests/fenv_test.c	Wed Nov 18 19:22:24 2020	(r367810)
+++ head/lib/msun/tests/fenv_test.c	Wed Nov 18 19:23:30 2020	(r367811)
@@ -43,13 +43,7 @@ __FBSDID("$FreeBSD$");
 #include <string.h>
 #include <unistd.h>
 
-/*
- * Implementations are permitted to define additional exception flags
- * not specified in the standard, so it is not necessarily true that
- * FE_ALL_EXCEPT == ALL_STD_EXCEPT.
- */
-#define	ALL_STD_EXCEPT	(FE_DIVBYZERO | FE_INEXACT | FE_INVALID | \
-			 FE_OVERFLOW | FE_UNDERFLOW)
+#include "test-utils.h"
 
 #define	NEXCEPTS	(sizeof(std_excepts) / sizeof(std_excepts[0]))
 
@@ -373,7 +367,13 @@ test_fegsetenv(void)
 		assert(fegetround() == FE_TONEAREST);
 
 		assert(fesetenv(&env2) == 0);
-		assert(fetestexcept(FE_ALL_EXCEPT) == excepts);
+
+		/* 
+		 * Some platforms like powerpc may set extra exception bits. Since
+		 * only standard exceptions are tested, mask against ALL_STD_EXCEPT 
+		 */
+		assert((fetestexcept(FE_ALL_EXCEPT) & ALL_STD_EXCEPT) == excepts);
+
 		assert(fegetround() == FE_DOWNWARD);
 		assert(fesetenv(&env1) == 0);
 		assert(fetestexcept(FE_ALL_EXCEPT) == 0);

Modified: head/lib/msun/tests/lrint_test.c
==============================================================================
--- head/lib/msun/tests/lrint_test.c	Wed Nov 18 19:22:24 2020	(r367810)
+++ head/lib/msun/tests/lrint_test.c	Wed Nov 18 19:23:30 2020	(r367811)
@@ -41,6 +41,8 @@ __FBSDID("$FreeBSD$");
 #include <ieeefp.h>
 #endif
 
+#include "test-utils.h"
+
 /*
  * XXX The volatile here is to avoid gcc's bogus constant folding and work
  *     around the lack of support for the FENV_ACCESS pragma.
@@ -49,7 +51,8 @@ __FBSDID("$FreeBSD$");
 	volatile double _d = x;						\
 	assert(feclearexcept(FE_ALL_EXCEPT) == 0);			\
 	assert((func)(_d) == (result) || fetestexcept(FE_INVALID));	\
-	assert(fetestexcept(FE_ALL_EXCEPT) == (excepts));		\
+	assert((fetestexcept(FE_ALL_EXCEPT) & ALL_STD_EXCEPT) 		\
+			== (excepts));					\
 } while (0)
 
 #define	testall(x, result, excepts)	do {				\


More information about the svn-src-all mailing list