[libcxx-commits] [libcxx] [libc++][Android] Disable fdsan in close.pass.cpp (PR #102412)
via libcxx-commits
libcxx-commits at lists.llvm.org
Wed Aug 7 18:57:46 PDT 2024
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-libcxx
Author: Ryan Prichard (rprichard)
<details>
<summary>Changes</summary>
fdsan is Bionic's "File Descriptor Sanitizer". Starting in API 30+, it aborts this close.pass.cpp test, because it closes the FD belonging to std::filebuf's FILE*. Use an fdsan API to suppress the diagnostic.
---
Full diff: https://github.com/llvm/llvm-project/pull/102412.diff
1 Files Affected:
- (modified) libcxx/test/std/input.output/file.streams/fstreams/filebuf.members/close.pass.cpp (+15-5)
``````````diff
diff --git a/libcxx/test/std/input.output/file.streams/fstreams/filebuf.members/close.pass.cpp b/libcxx/test/std/input.output/file.streams/fstreams/filebuf.members/close.pass.cpp
index e0338e6f619b7..fa2b3415b3cd3 100644
--- a/libcxx/test/std/input.output/file.streams/fstreams/filebuf.members/close.pass.cpp
+++ b/libcxx/test/std/input.output/file.streams/fstreams/filebuf.members/close.pass.cpp
@@ -10,11 +10,6 @@
// basic_filebuf<charT,traits>* close();
-// This test closes an fd that belongs to a std::filebuf, and Bionic's fdsan
-// detects this and aborts the process, starting in Android R (API 30).
-// See D137129.
-// XFAIL: LIBCXX-ANDROID-FIXME && !android-device-api={{2[1-9]}}
-
#include <fstream>
#include <cassert>
#if defined(__unix__)
@@ -24,6 +19,14 @@
#include "test_macros.h"
#include "platform_support.h"
+// If we're building for a lower __ANDROID_API__, the Bionic versioner will
+// omit the function declarations from fdsan.h. We might be running on a newer
+// API level, though, so declare the API function here using weak.
+#if defined(__BIONIC__)
+#include <android/fdsan.h>
+enum android_fdsan_error_level android_fdsan_set_error_level(enum android_fdsan_error_level new_level) __attribute__((weak));
+#endif
+
int main(int, char**)
{
std::string temp = get_temp_file_name();
@@ -37,6 +40,13 @@ int main(int, char**)
assert(f.close() == nullptr);
assert(!f.is_open());
}
+#if defined(__BIONIC__)
+ // Starting with Android API 30+, Bionic's fdsan aborts a process that
+ // attempts to close a file descriptor belonging to something else. Disable
+ // fdsan to allow closing the FD belonging to std::filebuf's FILE*.
+ if (android_fdsan_set_error_level != nullptr)
+ android_fdsan_set_error_level(ANDROID_FDSAN_ERROR_LEVEL_DISABLED);
+#endif
#if defined(__unix__)
{
std::filebuf f;
``````````
</details>
https://github.com/llvm/llvm-project/pull/102412
More information about the libcxx-commits
mailing list