Revert "[libc++][format] P3953R3: Rename std::runtime_format (#189657)"#191912
Conversation
…189657)" This reverts commit 67c893e due to buildbot breakage (llvm#189657 (comment), llvm#189657 (comment)).
|
cc @H-G-Hristov |
|
@llvm/pr-subscribers-libcxx Author: Thurston Dang (thurstond) ChangesThis reverts commit 67c893e due to buildbot breakage Full diff: https://github.com/llvm/llvm-project/pull/191912.diff 10 Files Affected:
diff --git a/libcxx/docs/ReleaseNotes/23.rst b/libcxx/docs/ReleaseNotes/23.rst
index c21b378f7db4b..45ea57af41825 100644
--- a/libcxx/docs/ReleaseNotes/23.rst
+++ b/libcxx/docs/ReleaseNotes/23.rst
@@ -40,7 +40,6 @@ Implemented Papers
- P2440R1: ``ranges::iota``, ``ranges::shift_left`` and ``ranges::shift_right`` (`Github <https://llvm.org/PR105184>`__)
- P3936R1: Safer ``atomic_ref::address`` (`Github <https://llvm.org/PR189594>`__)
-- P3953R3: Rename ``std::runtime_format`` (`Github <https://llvm.org/PR189624>`__)
- P4052R0: Renaming saturation arithmetic functions (`Github <https://llvm.org/PR189589>`__)
Improvements and New Features
diff --git a/libcxx/docs/Status/Cxx2cPapers.csv b/libcxx/docs/Status/Cxx2cPapers.csv
index 7adf5a2122e62..311378025eb2e 100644
--- a/libcxx/docs/Status/Cxx2cPapers.csv
+++ b/libcxx/docs/Status/Cxx2cPapers.csv
@@ -207,7 +207,7 @@
"`P3826R5 <https://wg21.link/P3826R5>`__","Fix Sender Algorithm Customization","2026-03 (Croydon)","","","`#189620 <https://github.com/llvm/llvm-project/issues/189620>`__",""
"`P3980R1 <https://wg21.link/P3980R1>`__","Task's Allocator Use","2026-03 (Croydon)","","","`#189621 <https://github.com/llvm/llvm-project/issues/189621>`__",""
"`P4156R0 <https://wg21.link/P4156R0>`__","Rename meta::has_ellipsis_parameter to meta::is_vararg_function","2026-03 (Croydon)","","","`#189622 <https://github.com/llvm/llvm-project/issues/189622>`__",""
-"`P3953R3 <https://wg21.link/P3953R3>`__","Rename ``std::runtime_format``","2026-03 (Croydon)","|Complete|","23","`#189624 <https://github.com/llvm/llvm-project/issues/189624>`__",""
+"`P3953R3 <https://wg21.link/P3953R3>`__","Rename ``std::runtime_format``","2026-03 (Croydon)","","","`#189624 <https://github.com/llvm/llvm-project/issues/189624>`__",""
"`P4052R0 <https://wg21.link/P4052R0>`__","Renaming saturation arithmetic functions","2026-03 (Croydon)","|Complete|","23","`#189589 <https://github.com/llvm/llvm-project/issues/189589>`__",""
"`P3941R4 <https://wg21.link/P3941R4>`__","Scheduler Affinity","2026-03 (Croydon)","","","`#189627 <https://github.com/llvm/llvm-project/issues/189627>`__",""
"`P3856R8 <https://wg21.link/P3856R8>`__","New reflection metafunction - is_structural_type (US NB comment 49)","2026-03 (Croydon)","","","`#189625 <https://github.com/llvm/llvm-project/issues/189625>`__",""
diff --git a/libcxx/include/__format/format_functions.h b/libcxx/include/__format/format_functions.h
index 7cf259d0e1db7..7b0fcc0ea585a 100644
--- a/libcxx/include/__format/format_functions.h
+++ b/libcxx/include/__format/format_functions.h
@@ -342,7 +342,7 @@ _LIBCPP_HIDE_FROM_ABI constexpr typename _Ctx::iterator __vformat_to(_ParseCtx&&
# if _LIBCPP_STD_VER >= 26
template <class _CharT>
-struct __dynamic_format_string {
+struct __runtime_format_string {
private:
basic_string_view<_CharT> __str_;
@@ -350,15 +350,15 @@ struct __dynamic_format_string {
friend struct basic_format_string;
public:
- _LIBCPP_HIDE_FROM_ABI __dynamic_format_string(basic_string_view<_CharT> __s) noexcept : __str_(__s) {}
+ _LIBCPP_HIDE_FROM_ABI __runtime_format_string(basic_string_view<_CharT> __s) noexcept : __str_(__s) {}
- __dynamic_format_string(const __dynamic_format_string&) = delete;
- __dynamic_format_string& operator=(const __dynamic_format_string&) = delete;
+ __runtime_format_string(const __runtime_format_string&) = delete;
+ __runtime_format_string& operator=(const __runtime_format_string&) = delete;
};
-_LIBCPP_HIDE_FROM_ABI inline __dynamic_format_string<char> dynamic_format(string_view __fmt) noexcept { return __fmt; }
+_LIBCPP_HIDE_FROM_ABI inline __runtime_format_string<char> runtime_format(string_view __fmt) noexcept { return __fmt; }
# if _LIBCPP_HAS_WIDE_CHARACTERS
-_LIBCPP_HIDE_FROM_ABI inline __dynamic_format_string<wchar_t> dynamic_format(wstring_view __fmt) noexcept {
+_LIBCPP_HIDE_FROM_ABI inline __runtime_format_string<wchar_t> runtime_format(wstring_view __fmt) noexcept {
return __fmt;
}
# endif
@@ -375,7 +375,7 @@ struct basic_format_string {
_LIBCPP_HIDE_FROM_ABI constexpr basic_string_view<_CharT> get() const noexcept { return __str_; }
# if _LIBCPP_STD_VER >= 26
- _LIBCPP_HIDE_FROM_ABI basic_format_string(__dynamic_format_string<_CharT> __s) noexcept : __str_(__s.__str_) {}
+ _LIBCPP_HIDE_FROM_ABI basic_format_string(__runtime_format_string<_CharT> __s) noexcept : __str_(__s.__str_) {}
# endif
private:
diff --git a/libcxx/include/format b/libcxx/include/format
index 7ff619fa84208..2246f062040ae 100644
--- a/libcxx/include/format
+++ b/libcxx/include/format
@@ -31,7 +31,7 @@ namespace std {
public:
template<class T> consteval basic_format_string(const T& s);
- basic_format_string(dynamic-format-string<charT> s) noexcept : str(s.str) {} // since C++26
+ basic_format_string(runtime-format-string<charT> s) noexcept : str(s.str) {} // since C++26
constexpr basic_string_view<charT> get() const noexcept { return str; }
};
@@ -42,21 +42,21 @@ namespace std {
using wformat_string = // since C++23, exposition only before C++23
basic_format_string<wchar_t, type_identity_t<Args>...>;
- template<class charT> struct dynamic-format-string { // since C++26, exposition-only
+ template<class charT> struct runtime-format-string { // since C++26, exposition-only
private:
basic_string_view<charT> str; // exposition-only
public:
- dynamic-format-string(basic_string_view<charT> s) noexcept : str(s) {}
+ runtime-format-string(basic_string_view<charT> s) noexcept : str(s) {}
- dynamic-format-string(const dynamic-format-string&) = delete;
- dynamic-format-string& operator=(const dynamic-format-string&) = delete;
+ runtime-format-string(const runtime-format-string&) = delete;
+ runtime-format-string& operator=(const runtime-format-string&) = delete;
};
- dynamic-format-string<char> dynamic_format(string_view fmt) noexcept {
+ runtime-format-string<char> runtime_format(string_view fmt) noexcept {
return fmt;
}
- dynamic-format-string<wchar_t> dynamic_format(wstring_view fmt) noexcept {
+ runtime-format-string<wchar_t> runtime_format(wstring_view fmt) noexcept {
return fmt;
}
diff --git a/libcxx/modules/std/format.inc b/libcxx/modules/std/format.inc
index baa43bc8304dc..fb0f971aeb0e9 100644
--- a/libcxx/modules/std/format.inc
+++ b/libcxx/modules/std/format.inc
@@ -29,7 +29,7 @@ export namespace std {
using std::wformat_string;
#endif
#if _LIBCPP_STD_VER >= 26
- using std::dynamic_format;
+ using std::runtime_format;
#endif // _LIBCPP_STD_VER >= 26
// [format.functions], formatting functions
diff --git a/libcxx/test/std/utilities/format/format.fmt.string/ctor.dynamic-format-string.pass.cpp b/libcxx/test/std/utilities/format/format.fmt.string/ctor.runtime-format-string.pass.cpp
similarity index 70%
rename from libcxx/test/std/utilities/format/format.fmt.string/ctor.dynamic-format-string.pass.cpp
rename to libcxx/test/std/utilities/format/format.fmt.string/ctor.runtime-format-string.pass.cpp
index f839e8fb5d946..fff15a1da4017 100644
--- a/libcxx/test/std/utilities/format/format.fmt.string/ctor.dynamic-format-string.pass.cpp
+++ b/libcxx/test/std/utilities/format/format.fmt.string/ctor.runtime-format-string.pass.cpp
@@ -13,11 +13,11 @@
// template<class charT, class... Args>
// class basic_format_string<charT, type_identity_t<Args>...>
//
-// basic_format_string(dynamic-format-string<charT> s) noexcept : str(s.str) {}
+// basic_format_string(runtime-format-string<charT> s) noexcept : str(s.str) {}
//
// Additional testing is done in
-// - libcxx/test/std/utilities/format/format.functions/format.dynamic_format.pass.cpp
-// - libcxx/test/std/utilities/format/format.functions/format.locale.dynamic_format.pass.cpp
+// - libcxx/test/std/utilities/format/format.functions/format.runtime_format.pass.cpp
+// - libcxx/test/std/utilities/format/format.functions/format.locale.runtime_format.pass.cpp
#include <format>
#include <cassert>
@@ -25,16 +25,16 @@
#include "test_macros.h"
int main(int, char**) {
- static_assert(noexcept(std::format_string<>{std::dynamic_format(std::string_view{})}));
+ static_assert(noexcept(std::format_string<>{std::runtime_format(std::string_view{})}));
{
- std::format_string<> s = std::dynamic_format("}{invalid format string}{");
+ std::format_string<> s = std::runtime_format("}{invalid format string}{");
assert(s.get() == "}{invalid format string}{");
}
#ifndef TEST_HAS_NO_WIDE_CHARACTERS
- static_assert(noexcept(std::wformat_string<>{std::dynamic_format(std::wstring_view{})}));
+ static_assert(noexcept(std::wformat_string<>{std::runtime_format(std::wstring_view{})}));
{
- std::wformat_string<> s = std::dynamic_format(L"}{invalid format string}{");
+ std::wformat_string<> s = std::runtime_format(L"}{invalid format string}{");
assert(s.get() == L"}{invalid format string}{");
}
#endif // TEST_HAS_NO_WIDE_CHARACTERS
diff --git a/libcxx/test/std/utilities/format/format.functions/format.locale.dynamic_format.pass.cpp b/libcxx/test/std/utilities/format/format.functions/format.locale.runtime_format.pass.cpp
similarity index 83%
rename from libcxx/test/std/utilities/format/format.functions/format.locale.dynamic_format.pass.cpp
rename to libcxx/test/std/utilities/format/format.functions/format.locale.runtime_format.pass.cpp
index 780c9d0f3832b..a262d64f4579b 100644
--- a/libcxx/test/std/utilities/format/format.functions/format.locale.dynamic_format.pass.cpp
+++ b/libcxx/test/std/utilities/format/format.functions/format.locale.runtime_format.pass.cpp
@@ -16,15 +16,15 @@
// Tests the behavior of
//
-// dynamic-format-string<char> dynamic_format(string_view fmt) noexcept;
-// dynamic-format-string<wchar_t> dynamic_format(wstring_view fmt) noexcept;
+// runtime-format-string<char> runtime_format(string_view fmt) noexcept;
+// runtime-format-string<wchar_t> runtime_format(wstring_view fmt) noexcept;
//
// and
//
// template<class charT, class... Args>
// struct basic_format_string {
// ...
-// basic_format_string(dynamic-format-string<charT> s) noexcept : str(s.str) {}
+// basic_format_string(runtime-format-string<charT> s) noexcept : str(s.str) {}
// ...
// }
//
@@ -35,9 +35,9 @@
// template<class... Args>
// wstring format(const locale& loc, wformat_string<Args...> fmt, Args&&... args);
//
-// The basics of dynamic_format and basic_format_string's constructor are tested in
-// - libcxx/test/std/utilities/format/format.syn/dynamic_format_string.pass.cpp
-// - libcxx/test/std/utilities/format/format.fmt.string/ctor.dynamic-format-string.pass.cpp
+// The basics of runtime_format and basic_format_string's constructor are tested in
+// - libcxx/test/std/utilities/format/format.syn/runtime_format_string.pass.cpp
+// - libcxx/test/std/utilities/format/format.fmt.string/ctor.runtime-format-string.pass.cpp
#include <format>
#include <cassert>
@@ -52,7 +52,7 @@
auto test = []<class CharT, class... Args>(
std::basic_string_view<CharT> expected, std::basic_string_view<CharT> fmt, Args&&... args) constexpr {
- std::basic_string<CharT> out = std::format(std::locale(), std::dynamic_format(fmt), std::forward<Args>(args)...);
+ std::basic_string<CharT> out = std::format(std::locale(), std::runtime_format(fmt), std::forward<Args>(args)...);
TEST_REQUIRE(out == expected,
TEST_WRITE_CONCATENATED(
"\nFormat string ", fmt, "\nExpected output ", expected, "\nActual output ", out, '\n'));
@@ -71,7 +71,7 @@ auto test_exception =
TEST_WRITE_CONCATENATED(
"\nFormat string ", fmt, "\nExpected exception ", what, "\nActual exception ", e.what(), '\n'));
},
- TEST_IGNORE_NODISCARD std::format(std::locale(), std::dynamic_format(fmt), std::forward<Args>(args)...));
+ TEST_IGNORE_NODISCARD std::format(std::locale(), std::runtime_format(fmt), std::forward<Args>(args)...));
};
int main(int, char**) {
diff --git a/libcxx/test/std/utilities/format/format.functions/format.dynamic_format.pass.cpp b/libcxx/test/std/utilities/format/format.functions/format.runtime_format.pass.cpp
similarity index 81%
rename from libcxx/test/std/utilities/format/format.functions/format.dynamic_format.pass.cpp
rename to libcxx/test/std/utilities/format/format.functions/format.runtime_format.pass.cpp
index 8193eb2a71750..4bec9094382de 100644
--- a/libcxx/test/std/utilities/format/format.functions/format.dynamic_format.pass.cpp
+++ b/libcxx/test/std/utilities/format/format.functions/format.runtime_format.pass.cpp
@@ -15,15 +15,15 @@
// Tests the behavior of
//
-// dynamic-format-string<char> dynamic_format(string_view fmt) noexcept;
-// dynamic-format-string<wchar_t> dynamic_format(wstring_view fmt) noexcept;
+// runtime-format-string<char> runtime_format(string_view fmt) noexcept;
+// runtime-format-string<wchar_t> runtime_format(wstring_view fmt) noexcept;
//
// and
//
// template<class charT, class... Args>
// struct basic_format_string {
// ...
-// basic_format_string(dynamic-format-string<charT> s) noexcept : str(s.str) {}
+// basic_format_string(runtime-format-string<charT> s) noexcept : str(s.str) {}
// ...
// }
//
@@ -34,9 +34,9 @@
// template<class... Args>
// wstring format(wformat_string<Args...> fmt, Args&&... args);
//
-// The basics of dynamic_format and basic_format_string's constructor are tested in
-// - libcxx/test/std/utilities/format/format.syn/dynamic_format_string.pass.cpp
-// - libcxx/test/std/utilities/format/format.fmt.string/ctor.dynamic-format-string.pass.cpp
+// The basics of runtime_format and basic_format_string's constructor are tested in
+// - libcxx/test/std/utilities/format/format.syn/runtime_format_string.pass.cpp
+// - libcxx/test/std/utilities/format/format.fmt.string/ctor.runtime-format-string.pass.cpp
#include <format>
#include <cassert>
@@ -50,7 +50,7 @@
auto test = []<class CharT, class... Args>(
std::basic_string_view<CharT> expected, std::basic_string_view<CharT> fmt, Args&&... args) constexpr {
- std::basic_string<CharT> out = std::format(std::dynamic_format(fmt), std::forward<Args>(args)...);
+ std::basic_string<CharT> out = std::format(std::runtime_format(fmt), std::forward<Args>(args)...);
TEST_REQUIRE(out == expected,
TEST_WRITE_CONCATENATED(
"\nFormat string ", fmt, "\nExpected output ", expected, "\nActual output ", out, '\n'));
@@ -69,7 +69,7 @@ auto test_exception =
TEST_WRITE_CONCATENATED(
"\nFormat string ", fmt, "\nExpected exception ", what, "\nActual exception ", e.what(), '\n'));
},
- TEST_IGNORE_NODISCARD std::format(std::dynamic_format(fmt), std::forward<Args>(args)...));
+ TEST_IGNORE_NODISCARD std::format(std::runtime_format(fmt), std::forward<Args>(args)...));
};
int main(int, char**) {
diff --git a/libcxx/test/std/utilities/format/format.syn/dynamic_format_string.pass.cpp b/libcxx/test/std/utilities/format/format.syn/runtime_format_string.pass.cpp
similarity index 64%
rename from libcxx/test/std/utilities/format/format.syn/dynamic_format_string.pass.cpp
rename to libcxx/test/std/utilities/format/format.syn/runtime_format_string.pass.cpp
index 634a28a082581..c2a221c233ba4 100644
--- a/libcxx/test/std/utilities/format/format.syn/dynamic_format_string.pass.cpp
+++ b/libcxx/test/std/utilities/format/format.syn/runtime_format_string.pass.cpp
@@ -10,23 +10,23 @@
// <format>
-// template<class charT> struct dynamic-format-string { // exposition-only
+// template<class charT> struct runtime-format-string { // exposition-only
// private:
// basic_string_view<charT> str; // exposition-only
//
// public:
-// dynamic-format-string(basic_string_view<charT> s) noexcept : str(s) {}
+// runtime-format-string(basic_string_view<charT> s) noexcept : str(s) {}
//
-// dynamic-format-string(const dynamic-format-string&) = delete;
-// dynamic-format-string& operator=(const dynamic-format-string&) = delete;
+// runtime-format-string(const runtime-format-string&) = delete;
+// runtime-format-string& operator=(const runtime-format-string&) = delete;
// };
//
-// dynamic-format-string<char> dynamic_format(string_view fmt) noexcept;
-// dynamic-format-string<wchar_t> dynamic_format(wstring_view fmt) noexcept;
+// runtime-format-string<char> runtime_format(string_view fmt) noexcept;
+// runtime-format-string<wchar_t> runtime_format(wstring_view fmt) noexcept;
//
// Additional testing is done in
-// - libcxx/test/std/utilities/format/format.functions/format.dynamic_format.pass.cpp
-// - libcxx/test/std/utilities/format/format.functions/format.locale.dynamic_format.pass.cpp
+// - libcxx/test/std/utilities/format/format.functions/format.runtime_format.pass.cpp
+// - libcxx/test/std/utilities/format/format.functions/format.locale.runtime_format.pass.cpp
#include <format>
@@ -50,19 +50,19 @@ static void test_properties() {
}
int main(int, char**) {
- static_assert(noexcept(std::dynamic_format(std::string_view{})));
- auto format_string = std::dynamic_format(std::string_view{});
+ static_assert(noexcept(std::runtime_format(std::string_view{})));
+ auto format_string = std::runtime_format(std::string_view{});
using FormatString = decltype(format_string);
- LIBCPP_ASSERT((std::same_as<FormatString, std::__dynamic_format_string<char>>));
+ LIBCPP_ASSERT((std::same_as<FormatString, std::__runtime_format_string<char>>));
test_properties<FormatString, char>();
#ifndef TEST_HAS_NO_WIDE_CHARACTERS
- static_assert(noexcept(std::dynamic_format(std::wstring_view{})));
- auto wformat_string = std::dynamic_format(std::wstring_view{});
+ static_assert(noexcept(std::runtime_format(std::wstring_view{})));
+ auto wformat_string = std::runtime_format(std::wstring_view{});
using WFormatString = decltype(wformat_string);
- LIBCPP_ASSERT((std::same_as<WFormatString, std::__dynamic_format_string<wchar_t>>));
+ LIBCPP_ASSERT((std::same_as<WFormatString, std::__runtime_format_string<wchar_t>>));
test_properties<WFormatString, wchar_t>();
#endif // TEST_HAS_NO_WIDE_CHARACTERS
diff --git a/libcxx/utils/generate_feature_test_macro_components.py b/libcxx/utils/generate_feature_test_macro_components.py
index 56a1d0c39c9fb..9c81ef4295737 100644
--- a/libcxx/utils/generate_feature_test_macro_components.py
+++ b/libcxx/utils/generate_feature_test_macro_components.py
@@ -572,7 +572,6 @@ def add_version_header(tc):
# "c++23": 202207, Not implemented P2419R2 Clarify handling of encodings in localized formatting of chrono types
# "c++26": 202306, P2637R3 Member Visit (implemented)
# "c++26": 202311, P2918R2 Runtime format strings II (implemented)
- # "c++26": 202603, P3953R3 Rename std::runtime_format (implemented)
},
# Note these three papers are adopted at the June 2023 meeting and have sequential numbering
# 202304 P2510R3 Formatting pointers (Implemented)
|
|
The error message says: This is unlikely related to renaming. Have you confirmed that reverting the changes fixes this error? |
I haven't tried reverting (I'd need to spin up an Arm cloud workstation). I agree I don't see anything wrong with the patch, but for whatever reason it seems the patch tickles the compiler in such a way (perhaps exposing a pre-existing bug elsewhere) that it leads to a test failure. There's three separate buildbots where this patch is the only change, and this renamed test started failing (while the test prior to renaming did not fail): |
I plan to merge this revert; the buildbots will then shortly confirm whether it fixes the error or not. |
|
Well, let's see what's to happen. |
|
So far the revert has landed on one of the failing bots, and turned it back to green: https://lab.llvm.org/buildbot/#/builders/55/builds/26697 The revert has not landed on the other two failing bots yet. edit: it also turned the other two bots back to green: https://lab.llvm.org/buildbot/#/builders/24/builds/19458, https://lab.llvm.org/buildbot/#/builders/94/builds/16884 |
|
Oh, I see. Old and new logs read: So we need to update |
Nice catch! :-) |
|
LLVM Buildbot has detected a new failure on builder Full details are available at: https://lab.llvm.org/buildbot/#/builders/169/builds/21873 Here is the relevant piece of the build log for the reference |
|
Looks like that we need to update Edit: llvm/llvm-zorg#836. CC @vitalybuka. |
I've approved it. Thanks for the quick fix! |
This reverts commit 67c893e due to buildbot breakage
(#189657 (comment), #189657 (comment)).