[libc-commits] [PATCH] D106683: [libc] Accommodate Fuchsia's death test framework in fenv tests.

Siva Chandra via Phabricator via libc-commits libc-commits at lists.llvm.org
Fri Jul 23 09:59:28 PDT 2021


sivachandra created this revision.
sivachandra added a reviewer: michaelrj.
Herald added subscribers: libc-commits, ecnelises, phosek, tschuett.
Herald added a project: libc-project.
sivachandra requested review of this revision.

Fuchsia's death test framework runs the closure which can die in a
different thread. Hence, the FP exceptions which cause the closure to
die should be enalbed in the closure.


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D106683

Files:
  libc/test/src/fenv/enabled_exceptions_test.cpp
  libc/test/src/fenv/feholdexcept_test.cpp


Index: libc/test/src/fenv/feholdexcept_test.cpp
===================================================================
--- libc/test/src/fenv/feholdexcept_test.cpp
+++ libc/test/src/fenv/feholdexcept_test.cpp
@@ -28,9 +28,19 @@
     // should not crash/invoke the exception handler.
     ASSERT_EQ(__llvm_libc::fputil::raiseExcept(e), 0);
 
-    // When we put back the saved env which has the exception enabled, it
-    // should crash with SIGFPE.
-    __llvm_libc::fputil::setEnv(&env);
-    ASSERT_RAISES_FP_EXCEPT([=] { __llvm_libc::fputil::raiseExcept(e); });
+    ASSERT_RAISES_FP_EXCEPT([=] {
+      // When we put back the saved env which has the exception enabled, it
+      // should crash with SIGFPE. Note that we set the old environment
+      // back in this closure because in some test frameworks like Fuchsia's
+      // zxtest, this translates to a death test in which this closure is
+      // run in a different thread. By setting the old environment inside
+      // the closure sets the environment for that different thread as well.
+      __llvm_libc::fputil::setEnv(&env);
+      __llvm_libc::fputil::raiseExcept(e);
+    });
+
+    // Cleanup
+    __llvm_libc::fputil::disableExcept(FE_ALL_EXCEPT);
+    ASSERT_EQ(__llvm_libc::fputil::clearExcept(FE_ALL_EXCEPT), 0);
   }
 }
Index: libc/test/src/fenv/enabled_exceptions_test.cpp
===================================================================
--- libc/test/src/fenv/enabled_exceptions_test.cpp
+++ libc/test/src/fenv/enabled_exceptions_test.cpp
@@ -49,6 +49,17 @@
       ASSERT_EQ(__llvm_libc::fetestexcept(others), others);
     }
 
-    ASSERT_RAISES_FP_EXCEPT([=] { __llvm_libc::feraiseexcept(e); });
+    ASSERT_RAISES_FP_EXCEPT([=] {
+      // In test frameworks like Fuchsia's zxtest, this translates to
+      // a death test which run in a different thread. So, we enable
+      // the exception again so that the exception gets enabled in
+      // the child thread.
+      __llvm_libc::fputil::enableExcept(e);
+      __llvm_libc::feraiseexcept(e);
+    });
+
+    // Cleanup.
+    __llvm_libc::fputil::disableExcept(FE_ALL_EXCEPT);
+    ASSERT_EQ(__llvm_libc::feclearexcept(FE_ALL_EXCEPT), 0);
   }
 }


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D106683.361266.patch
Type: text/x-patch
Size: 2191 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/libc-commits/attachments/20210723/8ca5963a/attachment-0001.bin>


More information about the libc-commits mailing list