[libcxx-commits] [libcxx] 47afa10 - [libc++][z/OS] Disable portion of formatter.char.funsigned-char.pass.cpp for no unicode (#94044)

via libcxx-commits libcxx-commits at lists.llvm.org
Wed Jun 12 06:28:42 PDT 2024


Author: Zibi Sarbinowski
Date: 2024-06-12T09:28:39-04:00
New Revision: 47afa10bbaa89351afa9bcc53dd959e6181ebf3d

URL: https://github.com/llvm/llvm-project/commit/47afa10bbaa89351afa9bcc53dd959e6181ebf3d
DIFF: https://github.com/llvm/llvm-project/commit/47afa10bbaa89351afa9bcc53dd959e6181ebf3d.diff

LOG: [libc++][z/OS] Disable portion of formatter.char.funsigned-char.pass.cpp for no unicode (#94044)

This PR carves out small portion of the test in subject to avoid the
following failure when unicode is not available.

```
# | Assertion failure: result == expected .../formatter.char.funsigned-char.pass.cpp 56
# |
# | Format string   ?}
# | Expected output '\x{80}'
# | Actual output   '�'
```

This was traced down to different definition of
`__code_point_view::__consume()` under macro_LIBCXX_HAS_NO_UNICODE which
is called inside `__formatter::__escape()`. The `__consume()` returns
`__ok` and code assumes that escaped sequence was already written but it
is not., thus the failure. Here is the snippen code we fall into:

```
    typename __unicode::__consume_result __result = __view.__consume();
    if (__result.__status == __unicode::__consume_result::__ok) {
      __escape = __formatter::__is_escaped_sequence_written(__str, __result.__code_point, __escape, __mark);
```

Added: 
    

Modified: 
    libcxx/test/std/utilities/format/format.formatter/format.formatter.spec/formatter.char.funsigned-char.pass.cpp

Removed: 
    


################################################################################
diff  --git a/libcxx/test/std/utilities/format/format.formatter/format.formatter.spec/formatter.char.funsigned-char.pass.cpp b/libcxx/test/std/utilities/format/format.formatter/format.formatter.spec/formatter.char.funsigned-char.pass.cpp
index 9c31ecad85eac..a7577c1bd9341 100644
--- a/libcxx/test/std/utilities/format/format.formatter/format.formatter.spec/formatter.char.funsigned-char.pass.cpp
+++ b/libcxx/test/std/utilities/format/format.formatter/format.formatter.spec/formatter.char.funsigned-char.pass.cpp
@@ -71,16 +71,18 @@ void test() {
 #if TEST_STD_VER > 20
   test(STR(R"('\u{0}')"), STR("?}"), '\x00');
   test(STR("'a'"), STR("?}"), 'a');
+#  ifndef TEST_HAS_NO_UNICODE
   if constexpr (std::same_as<CharT, char>) {
     test(STR(R"('\x{80}')"), STR("?}"), '\x80');
     test(STR(R"('\x{ff}')"), STR("?}"), '\xff');
   }
-#  ifndef TEST_HAS_NO_WIDE_CHARACTERS
+#    ifndef TEST_HAS_NO_WIDE_CHARACTERS
   else {
     test(STR(R"('\u{80}')"), STR("?}"), '\x80');
     test(STR("'\u00ff'"), STR("?}"), '\xff');
   }
-#  endif // TEST_HAS_NO_WIDE_CHARACTERS
+#    endif // TEST_HAS_NO_WIDE_CHARACTERS
+#  endif   // TEST_HAS_NO_UNICODE
 #endif   // TEST_STD_VER > 20
 
   test(STR("10000000"), STR("b}"), char(128));


        


More information about the libcxx-commits mailing list