[libcxx-commits] [libcxx] [NFC][libc++][exceptions] Adds tests for LWG3112. (PR #100881)
Mark de Wever via libcxx-commits
libcxx-commits at lists.llvm.org
Sat Jul 27 10:35:46 PDT 2024
https://github.com/mordante created https://github.com/llvm/llvm-project/pull/100881
The tests kept being based on std::string instead of std::string_view to allow testing with older C++ dialects.
Adds tests for:
- LWG3112 system_error and filesystem_error constructors taking a string may not be able to meet their postconditions
>From eb7eaa6d5a218ae8c4b71ecc157c66af686604d1 Mon Sep 17 00:00:00 2001
From: Mark de Wever <koraq at xs4all.nl>
Date: Sat, 27 Jul 2024 18:11:23 +0200
Subject: [PATCH] [NFC][libc++][exceptions] Adds tests for LWG3112.
The tests kept being based on std::string instead of std::string_view to allow
testing with older C++ dialects.
Adds tests for:
- LWG3112 system_error and filesystem_error constructors taking a string may not be able to meet their postconditions
---
libcxx/docs/Status/Cxx20Issues.csv | 2 +-
.../syserr.syserr.members/ctor_error_code_string.pass.cpp | 3 ++-
.../ctor_int_error_category_string.pass.cpp | 3 ++-
.../filesystem_error.members.pass.cpp | 6 +++---
4 files changed, 8 insertions(+), 6 deletions(-)
diff --git a/libcxx/docs/Status/Cxx20Issues.csv b/libcxx/docs/Status/Cxx20Issues.csv
index 97ecf5e8e05a0..5d5b02ce5ad7e 100644
--- a/libcxx/docs/Status/Cxx20Issues.csv
+++ b/libcxx/docs/Status/Cxx20Issues.csv
@@ -134,7 +134,7 @@
"`3077 <https://wg21.link/LWG3077>`__","``(push|emplace)_back``\ should invalidate the ``end``\ iterator","Kona","|Nothing To Do|",""
"`3087 <https://wg21.link/LWG3087>`__","One final ``&x``\ in |sect|\ [list.ops]","Kona","|Nothing To Do|",""
"`3101 <https://wg21.link/LWG3101>`__","``span``\ 's ``Container``\ constructors need another constraint","Kona","|Complete|",""
-"`3112 <https://wg21.link/LWG3112>`__","``system_error``\ and ``filesystem_error``\ constructors taking a ``string``\ may not be able to meet their postconditions","Kona","",""
+"`3112 <https://wg21.link/LWG3112>`__","``system_error``\ and ``filesystem_error``\ constructors taking a ``string``\ may not be able to meet their postconditions","Kona","|Nothing To Do|",""
"`3119 <https://wg21.link/LWG3119>`__","Program-definedness of closure types","Kona","|Nothing To Do|",""
"`3133 <https://wg21.link/LWG3133>`__","Modernizing numeric type requirements","Kona","",""
"`3144 <https://wg21.link/LWG3144>`__","``span``\ does not have a ``const_pointer``\ typedef","Kona","|Complete|",""
diff --git a/libcxx/test/std/diagnostics/syserr/syserr.syserr/syserr.syserr.members/ctor_error_code_string.pass.cpp b/libcxx/test/std/diagnostics/syserr/syserr.syserr/syserr.syserr.members/ctor_error_code_string.pass.cpp
index a464084e55c50..d9640b0e1dcac 100644
--- a/libcxx/test/std/diagnostics/syserr/syserr.syserr/syserr.syserr.members/ctor_error_code_string.pass.cpp
+++ b/libcxx/test/std/diagnostics/syserr/syserr.syserr/syserr.syserr.members/ctor_error_code_string.pass.cpp
@@ -21,11 +21,12 @@
#include "test_macros.h"
int main(int, char**) {
- std::string what_arg("test message");
+ std::string what_arg("test message\0With embedded NUL");
std::system_error se(make_error_code(std::errc::not_a_directory), what_arg);
assert(se.code() == std::make_error_code(std::errc::not_a_directory));
std::string what_message(se.what());
assert(what_message.find(what_arg) != std::string::npos);
+ assert(what_message.find(what_arg.c_str()) != std::string::npos);
assert(what_message.find("Not a directory") != std::string::npos);
return 0;
diff --git a/libcxx/test/std/diagnostics/syserr/syserr.syserr/syserr.syserr.members/ctor_int_error_category_string.pass.cpp b/libcxx/test/std/diagnostics/syserr/syserr.syserr/syserr.syserr.members/ctor_int_error_category_string.pass.cpp
index 2626fb8cc1f22..f7babf49e5e14 100644
--- a/libcxx/test/std/diagnostics/syserr/syserr.syserr/syserr.syserr.members/ctor_int_error_category_string.pass.cpp
+++ b/libcxx/test/std/diagnostics/syserr/syserr.syserr/syserr.syserr.members/ctor_int_error_category_string.pass.cpp
@@ -21,12 +21,13 @@
#include "test_macros.h"
int main(int, char**) {
- std::string what_arg("test message");
+ std::string what_arg("test message\0With embedded NUL");
std::system_error se(static_cast<int>(std::errc::not_a_directory),
std::generic_category(), what_arg);
assert(se.code() == std::make_error_code(std::errc::not_a_directory));
std::string what_message(se.what());
assert(what_message.find(what_arg) != std::string::npos);
+ assert(what_message.find(what_arg.c_str()) != std::string::npos);
assert(what_message.find("Not a directory") != std::string::npos);
return 0;
diff --git a/libcxx/test/std/input.output/filesystems/class.filesystem_error/filesystem_error.members.pass.cpp b/libcxx/test/std/input.output/filesystems/class.filesystem_error/filesystem_error.members.pass.cpp
index fd77810cfa50b..89818072746a5 100644
--- a/libcxx/test/std/input.output/filesystems/class.filesystem_error/filesystem_error.members.pass.cpp
+++ b/libcxx/test/std/input.output/filesystems/class.filesystem_error/filesystem_error.members.pass.cpp
@@ -33,13 +33,13 @@ namespace fs = std::filesystem;
void test_constructors() {
using namespace fs;
- // The string returned by "filesystem_error::what() must contain runtime_error::what()
- const std::string what_arg = "Hello World";
+ // The string returned by "filesystem_error::what() must contain runtime_error::what().c_str()
+ const std::string what_arg = "Hello World\0with embedded NUL";
const std::string what_contains = std::runtime_error(what_arg).what();
assert(what_contains.find(what_arg) != std::string::npos);
auto CheckWhat = [what_contains](filesystem_error const& e) {
std::string s = e.what();
- assert(s.find(what_contains) != std::string::npos);
+ assert(s.find(what_contains.c_str()) != std::string::npos);
};
std::error_code ec = std::make_error_code(std::errc::file_exists);
More information about the libcxx-commits
mailing list