
`libcxx std::basic_ios` uses `WEOF` to indicate the `fill` value is uninitialized. On some platforms (e.g AIX and zOS in 64-bit mode) `wchar_t` is 4 bytes `unsigned` and `wint_t` is also 4 bytes which means `WEOF` cannot be distinguished from `WCHAR_MAX` by `std::char_traits<wchar_t>::eq_int_type()`, meaning this valid character value cannot be stored on affected platforms (as the implementation triggers reinitialization to `widen(’ ’)`). This patch introduces a new helper class `_FillHelper` uses a boolean variable to indicate whether the fill character has been initialized, which is used by default in libcxx ABI version 2. The patch does not affect ABI version 1 except for targets AIX in 32- and 64-bit and z/OS in 64-bit (so that the layout of the implementation is compatible with the current IBM system provided libc++) This is a continuation of Phabricator patch [D124555](https://reviews.llvm.org/D124555). This patch uses a modified version of the [approach](https://reviews.llvm.org/D124555#3566746) suggested by @ldionne . --------- Co-authored-by: Louis Dionne <ldionne.2@gmail.com> Co-authored-by: David Tenty <daltenty.dev@gmail.com>
24 lines
983 B
CMake
24 lines
983 B
CMake
# Common
|
|
set(CMAKE_BUILD_TYPE Release CACHE STRING "")
|
|
|
|
set(LIBCXX_ENABLE_ABI_LINKER_SCRIPT OFF CACHE BOOL "")
|
|
set(LIBCXX_ENABLE_SHARED ON CACHE BOOL "")
|
|
set(LIBCXX_ENABLE_STATIC OFF CACHE BOOL "")
|
|
set(LIBCXX_INCLUDE_TESTS OFF CACHE BOOL "")
|
|
set(LIBCXX_INSTALL_HEADERS OFF CACHE BOOL "")
|
|
set(LIBCXX_INCLUDE_BENCHMARKS OFF CACHE BOOL "")
|
|
|
|
set(LIBCXXABI_ENABLE_SHARED OFF CACHE BOOL "")
|
|
set(LIBCXXABI_ENABLE_STATIC OFF CACHE BOOL "")
|
|
set(LIBCXXABI_INCLUDE_TESTS OFF CACHE BOOL "")
|
|
|
|
# Target Specific
|
|
set(LIBCXX_DLL_NAME CRTEQCXS CACHE STRING "")
|
|
set(LIBCXX_SHARED_OUTPUT_NAME "c++_a" CACHE STRING
|
|
"Output name for the shared libc++ runtime library.")
|
|
set(LIBCXX_CXX_ABI system-libcxxabi CACHE STRING "")
|
|
|
|
set(LIBCXX_ADDITIONAL_COMPILE_FLAGS "-fzos-le-char-mode=ascii" CACHE STRING "")
|
|
set(LIBCXX_ADDITIONAL_LIBRARIES "-L../s390x-ibm-zos/lib -Wl,../s390x-ibm-zos/lib/libunwind.x" CACHE STRING "")
|
|
set(LIBCXX_ABI_DEFINES "_LIBCPP_ABI_IOS_ALLOW_ARBITRARY_FILL_VALUE" CACHE STRING "")
|