From d8448e8c819e377a56a2d9039fbcdd145db77fcc Mon Sep 17 00:00:00 2001 From: Alexey Samsonov Date: Mon, 15 Sep 2025 12:56:40 -0700 Subject: [PATCH] [libc] Move ASSERT_ERRNO_* macro to ErrnoCheckingTest.h Move these macro away from Test.h, since the generic Test.h (and associated test framework library) doesn't #include or depend on any errno-handling logic. Conversely, all tests that directly ASSERT various errno values are now migrated to ErrnoCheckingTest framework, which clears it our / validates it after every use case. --- libc/test/UnitTest/ErrnoCheckingTest.h | 15 +++++++++++++++ libc/test/UnitTest/Test.h | 15 --------------- libc/test/src/errno/CMakeLists.txt | 1 + libc/test/src/errno/errno_test.cpp | 1 + 4 files changed, 17 insertions(+), 15 deletions(-) diff --git a/libc/test/UnitTest/ErrnoCheckingTest.h b/libc/test/UnitTest/ErrnoCheckingTest.h index 4b7ff452f409c..5b1bc9441d830 100644 --- a/libc/test/UnitTest/ErrnoCheckingTest.h +++ b/libc/test/UnitTest/ErrnoCheckingTest.h @@ -13,6 +13,21 @@ #include "src/__support/macros/config.h" #include "test/UnitTest/Test.h" +// Define macro to validate the value stored in the errno and restore it +// to zero. + +#define ASSERT_ERRNO_EQ(VAL) \ + do { \ + ASSERT_EQ(VAL, static_cast(libc_errno)); \ + libc_errno = 0; \ + } while (0) +#define ASSERT_ERRNO_SUCCESS() ASSERT_EQ(0, static_cast(libc_errno)) +#define ASSERT_ERRNO_FAILURE() \ + do { \ + ASSERT_NE(0, static_cast(libc_errno)); \ + libc_errno = 0; \ + } while (0) + namespace LIBC_NAMESPACE_DECL { namespace testing { diff --git a/libc/test/UnitTest/Test.h b/libc/test/UnitTest/Test.h index e70fc51869624..6643e3882fd2b 100644 --- a/libc/test/UnitTest/Test.h +++ b/libc/test/UnitTest/Test.h @@ -37,21 +37,6 @@ #include "LibcTest.h" #endif -// These are defined the same way for each framework, in terms of the macros -// they all provide. - -#define ASSERT_ERRNO_EQ(VAL) \ - do { \ - ASSERT_EQ(VAL, static_cast(libc_errno)); \ - libc_errno = 0; \ - } while (0) -#define ASSERT_ERRNO_SUCCESS() ASSERT_EQ(0, static_cast(libc_errno)) -#define ASSERT_ERRNO_FAILURE() \ - do { \ - ASSERT_NE(0, static_cast(libc_errno)); \ - libc_errno = 0; \ - } while (0) - // Some macro utility to append file names with LIBC_TEST macro's value to be // used in stdio tests. #undef STR diff --git a/libc/test/src/errno/CMakeLists.txt b/libc/test/src/errno/CMakeLists.txt index b73962fb4de4d..264574204e6cb 100644 --- a/libc/test/src/errno/CMakeLists.txt +++ b/libc/test/src/errno/CMakeLists.txt @@ -12,4 +12,5 @@ add_libc_unittest( errno_test.cpp DEPENDS libc.src.errno.errno + libc.test.UnitTest.ErrnoCheckingTest ) diff --git a/libc/test/src/errno/errno_test.cpp b/libc/test/src/errno/errno_test.cpp index de82b0077f177..32fb3ec764063 100644 --- a/libc/test/src/errno/errno_test.cpp +++ b/libc/test/src/errno/errno_test.cpp @@ -7,6 +7,7 @@ //===----------------------------------------------------------------------===// #include "src/__support/libc_errno.h" +#include "test/UnitTest/ErrnoCheckingTest.h" #include "test/UnitTest/Test.h" TEST(LlvmLibcErrnoTest, Basic) {