diff --git a/libcxx/include/__format/formatter_string.h b/libcxx/include/__format/formatter_string.h --- a/libcxx/include/__format/formatter_string.h +++ b/libcxx/include/__format/formatter_string.h @@ -65,6 +65,12 @@ _LIBCPP_ASSERT(__str, "The basic_format_arg constructor should have " "prevented an invalid pointer."); + __format_spec::__parsed_specifications<_CharT> __specs = _Base::__parser_.__get_parsed_std_specifications(__ctx); +# if _LIBCPP_STD_VER > 20 + if (_Base::__parser_.__type_ == __format_spec::__type::__debug) + return __formatter::__format_escaped_string(basic_string_view<_CharT>{__str}, __ctx.out(), __specs); +# endif + // When using a center or right alignment and the width option the length // of __str must be known to add the padding upfront. This case is handled // by the base class by converting the argument to a basic_string_view. @@ -76,7 +82,6 @@ // now these optimizations aren't implemented. Instead the base class // handles these options. // TODO FMT Implement these improvements. - __format_spec::__parsed_specifications<_CharT> __specs = _Base::__parser_.__get_parsed_std_specifications(__ctx); if (__specs.__has_width() || __specs.__has_precision()) return __formatter::__write_string(basic_string_view<_CharT>{__str}, __ctx.out(), __specs); diff --git a/libcxx/test/std/utilities/format/format.tuple/format.functions.tests.h b/libcxx/test/std/utilities/format/format.tuple/format.functions.tests.h --- a/libcxx/test/std/utilities/format/format.tuple/format.functions.tests.h +++ b/libcxx/test/std/utilities/format/format.tuple/format.functions.tests.h @@ -153,6 +153,8 @@ template void test_pair_int_string(TestFunction check, ExceptionTest check_exception) { test_tuple_or_pair_int_string(check, check_exception, std::make_pair(42, SV("hello"))); + test_tuple_or_pair_int_string(check, check_exception, std::make_pair(42, STR("hello"))); + test_tuple_or_pair_int_string(check, check_exception, std::make_pair(42, CSTR("hello"))); } // @@ -265,6 +267,8 @@ template void test_tuple_int_string(TestFunction check, ExceptionTest check_exception) { test_tuple_or_pair_int_string(check, check_exception, std::make_tuple(42, SV("hello"))); + test_tuple_or_pair_int_string(check, check_exception, std::make_tuple(42, STR("hello"))); + test_tuple_or_pair_int_string(check, check_exception, std::make_tuple(42, CSTR("hello"))); } //