[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