diff --git a/compiler-rt/test/hwasan/TestCases/Posix/dlerror.cpp b/compiler-rt/test/hwasan/TestCases/Posix/dlerror.cpp new file mode 100644 index 0000000000000..15455ba5af780 --- /dev/null +++ b/compiler-rt/test/hwasan/TestCases/Posix/dlerror.cpp @@ -0,0 +1,30 @@ +// Make sure dlerror is not classified as a leak even if we use dynamic TLS. +// This is currently not implemented, so this test is XFAIL. + +// RUN: %clangxx_hwasan -O0 %s -o %t && HWASAN_OPTIONS=detect_leaks=1 %run %t +// XFAIL: * + +#include +#include +#include +#include +#include +#include +#include + +constexpr auto kKeys = 500; + +int main(int argc, char **argv) { + __hwasan_enable_allocator_tagging(); + // Exhaust static TLS slots to force use of dynamic TLS. + pthread_key_t keys[kKeys]; + for (int i = 0; i < kKeys; ++i) { + assert(pthread_key_create(&keys[i], nullptr) == 0); + } + void *o = dlopen("invalid_file_name.so", 0); + const char *err = dlerror(); + for (int i = 0; i < kKeys; ++i) { + assert(pthread_key_delete(keys[i]) == 0); + } + return 0; +}