From: Jonathan Wakely Date: Fri, 15 Sep 2023 23:09:53 +0000 (+0100) Subject: libstdc++: Add missing tests for std::basic_filebuf::native_handle() X-Git-Tag: basepoints/gcc-15~6078 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=6693bd900419862a7df97caa347f8289e88c2fe7;p=thirdparty%2Fgcc.git libstdc++: Add missing tests for std::basic_filebuf::native_handle() I forgot to 'git add' these files in the commit that added the new member function to basic_filebuf. libstdc++-v3/ChangeLog: * testsuite/27_io/basic_filebuf/native_handle/char/1.cc: New test. * testsuite/27_io/basic_filebuf/native_handle/wchar_t/1.cc: New test. --- diff --git a/libstdc++-v3/testsuite/27_io/basic_filebuf/native_handle/char/1.cc b/libstdc++-v3/testsuite/27_io/basic_filebuf/native_handle/char/1.cc new file mode 100644 index 000000000000..749451a4c816 --- /dev/null +++ b/libstdc++-v3/testsuite/27_io/basic_filebuf/native_handle/char/1.cc @@ -0,0 +1,61 @@ +// { dg-options "-fno-inline" } +// { dg-do run { target c++26 } } +// { dg-additional-files "filebuf_members-1.txt" } + +#include + +#ifndef __cpp_lib_fstream_native_handle +# error "Feature-test macro for fstream_native_handle missing in " +#elif __cpp_lib_fstream_native_handle != 202306L +# error "Feature-test macro for fstream_native_handle has wrong value in " +#endif + +using type = std::basic_filebuf::native_handle_type; + +#include // std::fclose(FILE*) +#if __has_include() +# include // close(int) +#endif +#if __has_include() +# include // CloseHandle(HANDLE) +#endif + +#include + +void +test01() +{ + std::filebuf f; + f.open("filebuf_members-1.txt", std::ios::in); + type handle = f.native_handle(); + + auto native_close = [](HandleT handle) { + if constexpr (std::is_same_v) + std::fclose(handle); // --enable-cstdio=stdio_pure +#if __has_include() + else if constexpr (std::is_same_v) + ::close(handle); // POSIX +#endif +#if __has_include() + else if constexpr (std::is_same_v) + ::CloseHandle(handle); // Windows +#endif + else + VERIFY( false ); + }; + native_close(handle); + + try + { + f.sgetc(); + VERIFY( false ); + } + catch (const std::ios::failure&) + { + } +} + +int main() +{ + test01(); +} diff --git a/libstdc++-v3/testsuite/27_io/basic_filebuf/native_handle/wchar_t/1.cc b/libstdc++-v3/testsuite/27_io/basic_filebuf/native_handle/wchar_t/1.cc new file mode 100644 index 000000000000..7ee5e4e8f538 --- /dev/null +++ b/libstdc++-v3/testsuite/27_io/basic_filebuf/native_handle/wchar_t/1.cc @@ -0,0 +1,55 @@ +// { dg-options "-fno-inline" } +// { dg-do run { target c++26 } } +// { dg-additional-files "filebuf_members-1.txt" } + +#include + +using type = std::basic_filebuf::native_handle_type; + +#include // std::fclose(FILE*) +#if __has_include() +# include // close(int) +#endif +#if __has_include() +# include // CloseHandle(HANDLE) +#endif + +#include + +void +test01() +{ + std::wfilebuf f; + f.open("filebuf_members-1.txt", std::wios::in); + type handle = f.native_handle(); + + auto native_close = [](HandleT handle) { + if constexpr (std::is_same_v) + std::fclose(handle); // --enable-cstdio=stdio_pure +#if __has_include() + else if constexpr (std::is_same_v) + ::close(handle); // POSIX +#endif +#if __has_include() + else if constexpr (std::is_same_v) + ::CloseHandle(handle); // Windows +#endif + else + VERIFY( false ); + }; + native_close(handle); + + try + { + f.sgetc(); + VERIFY( false ); + } + catch (const std::ios::failure&) + { + } +} + +int main() +{ + test01(); +}