<pre style='margin:0'>
Perry E. Metzger (pmetzger) pushed a commit to branch master
in repository macports-ports.
</pre>
<p><a href="https://github.com/macports/macports-ports/commit/e0303f5bc8e570b2f12740dea8625b228bc1cfa1">https://github.com/macports/macports-ports/commit/e0303f5bc8e570b2f12740dea8625b228bc1cfa1</a></p>
<pre style="white-space: pre; background: #F8F8F8">The following commit(s) were added to refs/heads/master by this push:
<span style='display:block; white-space:pre;color:#404040;'> new e0303f5bc8e libcxx-powerpc: libc++ and libc++abi for PowerPC systems
</span>e0303f5bc8e is described below
<span style='display:block; white-space:pre;color:#808000;'>commit e0303f5bc8e570b2f12740dea8625b228bc1cfa1
</span>Author: barracuda156 <vital.had@gmail.com>
AuthorDate: Sun Nov 19 15:49:16 2023 +0800
<span style='display:block; white-space:pre;color:#404040;'> libcxx-powerpc: libc++ and libc++abi for PowerPC systems
</span>---
lang/libcxx-powerpc/Portfile | 247 +++++++++++
.../files/0001-more-ppc-hacks-on-libcxxabi.patch | 43 ++
...-UNSUPPORT-10.6-and-10.5-for-aligned-allo.patch | 192 +++++++++
...ally-push-macosx-version-so-that-UNSUPPOR.patch | 26 ++
...e-have-a-sysroot-don-t-try-to-use-xcrun-s.patch | 45 ++
.../files/0005-more-ppc-hacks-on-libcxx.patch | 54 +++
...ted-version-of-David-Fang-s-wrapper-for-m.patch | 56 +++
...ad-constexpr-for-GCC-where-the-PPC-port-c.patch | 27 ++
...e-Make-sure-to-find-the-abi-lib-that-we-j.patch | 25 ++
...e-if-a-LIBCXX_SYSROOT-is-given-this-pre-e.patch | 41 ++
.../files/0010-Add-coroutine-header.patch | 480 +++++++++++++++++++++
...011-libcxx-libcxxabi-minor-fix-to-linking.patch | 34 ++
...012-disable-Apple-libc-Availability-tests.patch | 27 ++
...-long-long-math-prototypes-when-using-the.patch | 48 +++
...tomic-using-mutex-lock_guard-for-64b-ops-.patch | 313 ++++++++++++++
lang/libcxx-powerpc/files/CMakeLists.txt | 4 +
16 files changed, 1662 insertions(+)
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/lang/libcxx-powerpc/Portfile b/lang/libcxx-powerpc/Portfile
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 00000000000..96b6e79320c
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/lang/libcxx-powerpc/Portfile
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,247 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# -*- coding: utf-8; mode: tcl; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- vim:fenc=utf-8:filetype=tcl:et:sw=4:ts=4:sts=4
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+PortSystem 1.0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+PortGroup cmake 1.1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+PortGroup muniversal 1.0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# This port is dedicated to PowerPC. This way we can upgrade it without any impact
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# on any other systems. Older Intel has its own implementation in libcxx port,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# which relies on Clang. This port in intended to be used with GCC.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+name libcxx-powerpc
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# Based on: https://github.com/iains/LLVM-7-branch
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# with additional modifications.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# TODO: implement emutls support and optional installation into system prefix.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+version 7.1.1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+revision 0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+categories lang devel
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+maintainers {@barracuda156 gmail.com:vital.had} {@catap korins.ky:kirill} openmaintainer
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+license NCSA
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+description libc++ is an implementation of the C++ standard library, targeting C++11
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+long_description {*}${description}. This is an experimental port for PowerPC systems.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+platforms {darwin < 11}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# For now, let this port be powerpc-only. We wanna make sure it is not installed accidentally elsewhere.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+supported_archs ppc ppc64
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+set upstream_ver 7.1.0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+homepage https://llvm.org
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+master_sites https://releases.llvm.org/${upstream_ver}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+depends_extract port:xz-bootstrap
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+depends_skip_archcheck-append \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ xz-bootstrap
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+use_xz yes
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+extract.suffix .tar.xz
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+set libcxx_distname libcxx-${upstream_ver}.src
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+set libcxxabi_distname libcxxabi-${upstream_ver}.src
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+distfiles ${libcxx_distname}${extract.suffix} \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ${libcxxabi_distname}${extract.suffix}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+checksums libcxx-${upstream_ver}.src${extract.suffix} \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ rmd160 0ccb07c007c7f5998dea02aefa0c1c4a3f4bbb8a \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ sha256 4442b408eaea3c1e4aa2cf21da38aba9f0856b4b522b1c3d555c3251af62b04e \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ size 1638448 \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ libcxxabi-${upstream_ver}.src${extract.suffix} \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ rmd160 b75b738f195328ec6c362dbf5caf383b8528a145 \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ sha256 6241e81f7c62e11cf54f865ae2d5b8e93943e5f007ccbb59f88f2b289bee98fd \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ size 535180
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+depends_build-append port:python27-bootstrap
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+depends_skip_archcheck-append \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ python27-bootstrap
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# Use cmake-bootstrap
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+depends_build-replace path:bin/cmake:cmake port:cmake-bootstrap
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+depends_skip_archcheck-append \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ cmake-bootstrap
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+configure.cmd ${prefix}/libexec/cmake-bootstrap/bin/cmake
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# Build with gcc10-boostrap:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+depends_build-append port:gcc10-bootstrap
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+configure.compiler.add_deps no
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# Until standalone implementation of 8-byte atomics works. See below.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+depends_lib-append port:gcc10-bootstrap
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+set llvmdir ${workpath}/llvm/projects
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+post-extract {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ xinstall -d ${llvmdir}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ copy ${filespath}/CMakeLists.txt ${llvmdir}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ move ${workpath}/libcxx-${upstream_ver}.src ${llvmdir}/libcxx
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ move ${workpath}/libcxxabi-${upstream_ver}.src ${llvmdir}/libcxxabi
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+patch.pre_args -p1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+patch.dir ${llvmdir}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# Patches from: https://github.com/iains/LLVM-7-branch
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# libcxxabi
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+patchfiles 0001-more-ppc-hacks-on-libcxxabi.patch
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# libcxx
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+patchfiles-append 0002-libcxx-test-UNSUPPORT-10.6-and-10.5-for-aligned-allo.patch \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 0003-libcxx-Actually-push-macosx-version-so-that-UNSUPPOR.patch \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 0004-libcxx-If-we-have-a-sysroot-don-t-try-to-use-xcrun-s.patch \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 0005-more-ppc-hacks-on-libcxx.patch \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 0006-libcxx-Updated-version-of-David-Fang-s-wrapper-for-m.patch \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 0007-Fix-up-thread-constexpr-for-GCC-where-the-PPC-port-c.patch \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 0008-libcxx-cmake-Make-sure-to-find-the-abi-lib-that-we-j.patch \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 0009-libcxx-cmake-if-a-LIBCXX_SYSROOT-is-given-this-pre-e.patch
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# https://github.com/iains/llvm-project/commit/0ec37d1e98f07379443c420569f282b12482595f
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+patchfiles-append 0010-Add-coroutine-header.patch
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# Extra patches:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+patchfiles-append 0011-libcxx-libcxxabi-minor-fix-to-linking.patch
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# https://github.com/catap/llvm-project
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+patchfiles-append 0012-disable-Apple-libc-Availability-tests.patch \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 0013-Fix-missing-long-long-math-prototypes-when-using-the.patch
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# The following patch is supposed to implement 8-byte atomics without libatomic;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# unfortunately, it fails to build as is.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# TODO: fix it to avoid a dependency on libatomic.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# patchfiles-append 0014-implement-atomic-using-mutex-lock_guard-for-64b-ops-.patch
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# sterilize MacPorts build environment; we want nothing picked up from MP prefix
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+compiler.cpath
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+compiler.library_path
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+configure.cxx_stdlib
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+configure.cflags
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+configure.cxxflags
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+configure.cppflags
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+configure.optflags
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+configure.ldflags
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+configure.universal_cflags
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+configure.universal_cxxflags
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+configure.universal_cppflags
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+configure.universal_ldflags
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+configure.universal_args
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+configure.ccache no
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+configure.distcc no
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# sterilize PATH
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+configure.env-append PATH=${workpath}/bins:/usr/bin:/bin:/usr/sbin:/sbin
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+build.env-append PATH=${workpath}/bins:/usr/bin:/bin:/usr/sbin:/sbin
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+cmake.build_type Release
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# No ninja to minimize dependencies:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+cmake.generator {Unix Makefiles}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# As long as the port is explicitly for PowerPC and in single version, we can install into the prefix:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+cmake.install_prefix ${prefix}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+cmake.install_rpath
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+configure.pre_args-replace {*}[cmake::system_prefix_path] \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ -DCMAKE_SYSTEM_PREFIX_PATH="${cmake.install_prefix}\;/usr"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+configure.pre_args-replace {*}[cmake::rpath_flags] \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ -DCMAKE_BUILD_WITH_INSTALL_RPATH:BOOL=OFF
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+configure.pre_args-delete {*}[cmake::module_path]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+configure.pre_args-delete {*}[cmake::ccaching]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+configure.pre_args-delete -DCMAKE_INSTALL_NAME_DIR="${cmake.install_prefix}/lib"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+cmake.source_dir ${llvmdir}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+if {${configure.sdkroot} ne ""} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ configure.args-append -DDARWIN_osx_SYSROOT="${configure.sdkroot}" \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ -DDEFAULT_SYSROOT="${configure.sdkroot}"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+} else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # compiler-rt does a broad search for an SDK it likes, but this
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # search fails on older systems that don't have a MacOSX.sdk
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ configure.args-append -DDARWIN_osx_SYSROOT=/
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+configure.args-append -DENABLE_NEW_DELETE_DEFAULT=OFF \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ -DLIBCXX_BENCHMARK_NATIVE_STDLIB="libstdc++" \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ -DLIBCXX_CXX_ABI="libcxxabi" \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ -DLIBCXX_CXX_ABI_INCLUDE_PATHS="${llvmdir}/libcxxabi/include" \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ -DLIBCXX_CXX_ABI_SYSTEM=OFF \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ -DLIBCXX_ENABLE_ABI_LINKER_SCRIPT=OFF \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ -DLIBCXX_ENABLE_FILESYSTEM=ON \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ -DLIBCXX_ENABLE_SHARED=ON \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ -DLIBCXX_GENERATE_COVERAGE=OFF \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ -DLIBCXX_USE_COMPILER_RT=OFF \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ -DLIBCXXABI_DYLIB_PATH="${cmake.build_dir}/lib" \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ -DLIBCXXABI_LIBCXX_INCLUDES="${llvmdir}/libcxx/include" \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ -DLIBCXXABI_LIBCXX_PATH="${cmake.build_dir}/lib" \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ -DLIBCXXABI_USE_LLVM_UNWINDER=OFF \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ -DLLVM_BUILD_DOCS=OFF \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ -DPACKAGE_VERSION="${version}" \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ -DPYTHON_EXECUTABLE=${prefix}/libexec/python27-bootstrap/bin/python2.7
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+compiler.cxx_standard 2011
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# Leopard is the first macOS which supports Rosetta.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# See: https://trac.macports.org/ticket/67284
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+if {${os.major} > 8} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ pre-configure {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ file mkdir ${workpath}/bins
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set gcc [open "${workpath}/bins/gcc" w 0755]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ puts ${gcc} "#!/bin/sh"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ puts ${gcc} "arch -arch $\{BUILD_ARCH:-${build_arch}\} ${prefix}/libexec/gcc10-bootstrap/bin/gcc \"\$@\""
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ close ${gcc}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set gxx [open "${workpath}/bins/g++" w 0755]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ puts ${gxx} "#!/bin/sh"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ puts ${gxx} "arch -arch $\{BUILD_ARCH:-${build_arch}\} ${prefix}/libexec/gcc10-bootstrap/bin/g++ \"\$@\""
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ close ${gxx}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ configure.cc ${workpath}/bins/gcc
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ configure.cxx ${workpath}/bins/g++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+} else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ configure.cc ${prefix}/libexec/gcc10-bootstrap/bin/gcc
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ configure.cxx ${prefix}/libexec/gcc10-bootstrap/bin/g++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# This is needed for linking to work:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+configure.ldflags-append -L/${cmake.build_dir}/lib
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# As of now, it does link to system libs, regardless.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# prevent it from linking against gcc's libstdc++.6.dylib and libgcc_s.1.1.dylib
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# configure.ldflags-append -static-libstdc++ -static-libgcc
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# Universal variant code is borrowed from clang-11-bootstrap port.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+if {[variant_exists universal] && [variant_isset universal]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ foreach arch ${universal_archs_supported} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ lappend merger_configure_env(${arch}) BUILD_ARCH=${arch}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ lappend merger_build_env(${arch}) BUILD_ARCH=${arch}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ lappend merger_configure_args(${arch}) \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ -DDARWIN_osx_BUILTIN_ALL_POSSIBLE_ARCHS=${arch}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ merger_arch_flag yes
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ merger_arch_compiler yes
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ merger_must_run_binaries \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ yes
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+post-destroot {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ system "ditto ${llvmdir}/libcxx/include ${destroot}${cmake.install_prefix}/include/c++/v1"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ system "ditto ${llvmdir}/libcxxabi/include ${destroot}${cmake.install_prefix}/include"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # rpath does not work, we need absolute paths here:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ foreach dylib {libc++.1.dylib libc++abi.1.dylib} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ system "install_name_tool -id ${prefix}/lib/${dylib} ${destroot}${cmake.install_prefix}/lib/${dylib}"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ system "install_name_tool -change @rpath/libc++.1.dylib ${prefix}/lib/libc++.1.dylib ${destroot}${cmake.install_prefix}/lib/${dylib}"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ system "install_name_tool -change @rpath/libc++abi.1.dylib ${prefix}/lib/libc++abi.1.dylib ${destroot}${cmake.install_prefix}/lib/${dylib}"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+notes "
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+The libraries have been installed into ${prefix}/lib. To use libc++ with Macports’s gcc compilers,\
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+those have to be built with +stdlib_flag variant enabled and includes’ path set to ${prefix}/include/c++/v1.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+livecheck.type none
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/lang/libcxx-powerpc/files/0001-more-ppc-hacks-on-libcxxabi.patch b/lang/libcxx-powerpc/files/0001-more-ppc-hacks-on-libcxxabi.patch
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 00000000000..3645cc55deb
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/lang/libcxx-powerpc/files/0001-more-ppc-hacks-on-libcxxabi.patch
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,43 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+From d643ed390afe659d37ffe70ce5ecc53302394384 Mon Sep 17 00:00:00 2001
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+From: Iain Sandoe <iain@sandoe.co.uk>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Date: Mon, 1 Apr 2019 20:57:09 +0100
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Subject: [PATCH] more ppc hacks on libcxxabi
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+---
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ libcxxabi/src/CMakeLists.txt | 14 +++++++++++---
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 1 file changed, 11 insertions(+), 3 deletions(-)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/libcxxabi/src/CMakeLists.txt b/libcxxabi/src/CMakeLists.txt
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 776c5129433..30c9ce44d83 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/libcxxabi/src/CMakeLists.txt
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/libcxxabi/src/CMakeLists.txt
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -89,18 +89,26 @@ add_link_flags_if_supported(-nodefaultlibs)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set(LIBCXXABI_SHARED_LINK_FLAGS)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if ( APPLE )
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- if ( CMAKE_OSX_DEPLOYMENT_TARGET STREQUAL "10.6" )
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ if ( CMAKE_OSX_DEPLOYMENT_TARGET STREQUAL "10.5" )
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ list(APPEND LIBCXXABI_SHARED_LINK_FLAGS
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ "-compatibility_version 1"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ "-current_version 1"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ "-install_name @rpath/libc++abi.1.dylib")
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ list(APPEND LIBCXXABI_LINK_FLAGS
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ "/usr/lib/libgcc_s.10.5.dylib"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ "/usr/lib/libSystem.B.dylib")
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ elseif ( CMAKE_OSX_DEPLOYMENT_TARGET STREQUAL "10.6" )
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ list(APPEND LIBCXXABI_COMPILE_FLAGS "-U__STRICT_ANSI__")
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ list(APPEND LIBCXXABI_SHARED_LINK_FLAGS
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "-compatibility_version 1"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "-current_version 1"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- "-install_name /usr/lib/libc++abi.1.dylib")
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ "-install_name @rpath/libc++abi.1.dylib")
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ list(APPEND LIBCXXABI_LINK_FLAGS
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "/usr/lib/libSystem.B.dylib")
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ else()
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ list(APPEND LIBCXXABI_SHARED_LINK_FLAGS
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "-compatibility_version 1"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- "-install_name /usr/lib/libc++abi.1.dylib")
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ "-install_name @rpath/libc++abi.1.dylib")
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ endif()
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ endif()
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/lang/libcxx-powerpc/files/0002-libcxx-test-UNSUPPORT-10.6-and-10.5-for-aligned-allo.patch b/lang/libcxx-powerpc/files/0002-libcxx-test-UNSUPPORT-10.6-and-10.5-for-aligned-allo.patch
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 00000000000..a6185b62567
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/lang/libcxx-powerpc/files/0002-libcxx-test-UNSUPPORT-10.6-and-10.5-for-aligned-allo.patch
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,192 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+From 6049bd4d117eb24799871d61bc22cafbcf5fb5e5 Mon Sep 17 00:00:00 2001
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+From: Iain Sandoe <iain@sandoe.co.uk>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Date: Tue, 2 Apr 2019 10:58:14 +0100
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Subject: [PATCH] [libcxx, test] UNSUPPORT 10.6 and 10.5 for aligned
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ allocations.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+---
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ libcxx/test/libcxx/memory/aligned_allocation_macro.pass.cpp | 2 ++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ .../new.delete.array/delete_align_val_t_replace.pass.cpp | 2 ++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ .../new.delete/new.delete.array/new_align_val_t.pass.cpp | 2 ++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ .../new.delete.array/new_align_val_t_nothrow.pass.cpp | 2 ++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ .../new.delete.array/new_align_val_t_nothrow_replace.pass.cpp | 2 ++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ .../new.delete.array/new_align_val_t_replace.pass.cpp | 2 ++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ .../sized_delete_array_fsizeddeallocation.sh.cpp | 3 ++-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ .../new.delete.single/delete_align_val_t_replace.pass.cpp | 2 ++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ .../new.delete/new.delete.single/new_align_val_t.pass.cpp | 2 ++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ .../new.delete.single/new_align_val_t_nothrow.pass.cpp | 2 ++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ .../new.delete.single/new_align_val_t_nothrow_replace.pass.cpp | 2 ++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ .../new.delete.single/new_align_val_t_replace.pass.cpp | 2 ++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ .../new.delete.single/sized_delete_fsizeddeallocation.sh.cpp | 2 ++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 13 files changed, 26 insertions(+), 1 deletion(-)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/libcxx/test/libcxx/memory/aligned_allocation_macro.pass.cpp b/libcxx/test/libcxx/memory/aligned_allocation_macro.pass.cpp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index c1a4252aa61..4ae50fc9a78 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/libcxx/test/libcxx/memory/aligned_allocation_macro.pass.cpp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/libcxx/test/libcxx/memory/aligned_allocation_macro.pass.cpp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -16,6 +16,8 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ // XFAIL: macosx10.9
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ // XFAIL: macosx10.8
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ // XFAIL: macosx10.7
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++// XFAIL: macosx10.6
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++// XFAIL: macosx10.5
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #include <new>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/libcxx/test/std/language.support/support.dynamic/new.delete/new.delete.array/delete_align_val_t_replace.pass.cpp b/libcxx/test/std/language.support/support.dynamic/new.delete/new.delete.array/delete_align_val_t_replace.pass.cpp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 52aeea314dd..7b5c8c4dc20 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/libcxx/test/std/language.support/support.dynamic/new.delete/new.delete.array/delete_align_val_t_replace.pass.cpp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/libcxx/test/std/language.support/support.dynamic/new.delete/new.delete.array/delete_align_val_t_replace.pass.cpp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -33,6 +33,8 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ // UNSUPPORTED: macosx10.9
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ // UNSUPPORTED: macosx10.8
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ // UNSUPPORTED: macosx10.7
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++// UNSUPPORTED: macosx10.6
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++// UNSUPPORTED: macosx10.5
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ // On Windows libc++ doesn't provide its own definitions for new/delete
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ // but instead depends on the ones in VCRuntime. However VCRuntime does not
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/libcxx/test/std/language.support/support.dynamic/new.delete/new.delete.array/new_align_val_t.pass.cpp b/libcxx/test/std/language.support/support.dynamic/new.delete/new.delete.array/new_align_val_t.pass.cpp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 1d20b33a0df..b99c7a402e9 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/libcxx/test/std/language.support/support.dynamic/new.delete/new.delete.array/new_align_val_t.pass.cpp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/libcxx/test/std/language.support/support.dynamic/new.delete/new.delete.array/new_align_val_t.pass.cpp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -31,6 +31,8 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ // UNSUPPORTED: macosx10.9
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ // UNSUPPORTED: macosx10.8
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ // UNSUPPORTED: macosx10.7
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++// UNSUPPORTED: macosx10.6
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++// UNSUPPORTED: macosx10.5
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ // On Windows libc++ doesn't provide its own definitions for new/delete
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ // but instead depends on the ones in VCRuntime. However VCRuntime does not
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/libcxx/test/std/language.support/support.dynamic/new.delete/new.delete.array/new_align_val_t_nothrow.pass.cpp b/libcxx/test/std/language.support/support.dynamic/new.delete/new.delete.array/new_align_val_t_nothrow.pass.cpp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 60ebdd8e945..4fb12328ef8 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/libcxx/test/std/language.support/support.dynamic/new.delete/new.delete.array/new_align_val_t_nothrow.pass.cpp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/libcxx/test/std/language.support/support.dynamic/new.delete/new.delete.array/new_align_val_t_nothrow.pass.cpp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -31,6 +31,8 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ // UNSUPPORTED: macosx10.9
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ // UNSUPPORTED: macosx10.8
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ // UNSUPPORTED: macosx10.7
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++// UNSUPPORTED: macosx10.6
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++// UNSUPPORTED: macosx10.5
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ // On Windows libc++ doesn't provide its own definitions for new/delete
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ // but instead depends on the ones in VCRuntime. However VCRuntime does not
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/libcxx/test/std/language.support/support.dynamic/new.delete/new.delete.array/new_align_val_t_nothrow_replace.pass.cpp b/libcxx/test/std/language.support/support.dynamic/new.delete/new.delete.array/new_align_val_t_nothrow_replace.pass.cpp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index b09316487f9..58977e88c0f 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/libcxx/test/std/language.support/support.dynamic/new.delete/new.delete.array/new_align_val_t_nothrow_replace.pass.cpp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/libcxx/test/std/language.support/support.dynamic/new.delete/new.delete.array/new_align_val_t_nothrow_replace.pass.cpp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -28,6 +28,8 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ // UNSUPPORTED: macosx10.9
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ // UNSUPPORTED: macosx10.8
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ // UNSUPPORTED: macosx10.7
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++// UNSUPPORTED: macosx10.6
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++// UNSUPPORTED: macosx10.5
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ // XFAIL: no-aligned-allocation && !gcc
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/libcxx/test/std/language.support/support.dynamic/new.delete/new.delete.array/new_align_val_t_replace.pass.cpp b/libcxx/test/std/language.support/support.dynamic/new.delete/new.delete.array/new_align_val_t_replace.pass.cpp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index d8e08a3a0bd..fd09d17a2b7 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/libcxx/test/std/language.support/support.dynamic/new.delete/new.delete.array/new_align_val_t_replace.pass.cpp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/libcxx/test/std/language.support/support.dynamic/new.delete/new.delete.array/new_align_val_t_replace.pass.cpp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -10,6 +10,8 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ // UNSUPPORTED: c++98, c++03, c++11, c++14
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ // UNSUPPORTED: sanitizer-new-delete
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++// UNSUPPORTED: macosx10.5
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ // NOTE: GCC doesn't provide the -faligned-allocation flag to test for
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ // XFAIL: no-aligned-allocation && !gcc
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/libcxx/test/std/language.support/support.dynamic/new.delete/new.delete.array/sized_delete_array_fsizeddeallocation.sh.cpp b/libcxx/test/std/language.support/support.dynamic/new.delete/new.delete.array/sized_delete_array_fsizeddeallocation.sh.cpp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index f71cf19cc80..db1dde81e0a 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/libcxx/test/std/language.support/support.dynamic/new.delete/new.delete.array/sized_delete_array_fsizeddeallocation.sh.cpp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/libcxx/test/std/language.support/support.dynamic/new.delete/new.delete.array/sized_delete_array_fsizeddeallocation.sh.cpp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -18,7 +18,8 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ // XFAIL: availability_markup=macosx10.9
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ // XFAIL: availability_markup=macosx10.8
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ // XFAIL: availability_markup=macosx10.7
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++// XFAIL: availability_markup=macosx10.6
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++// XFAIL: availability_markup=macosx10.5
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ // NOTE: Only clang-3.7 and GCC 5.1 and greater support -fsized-deallocation.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ // REQUIRES: fsized-deallocation
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/libcxx/test/std/language.support/support.dynamic/new.delete/new.delete.single/delete_align_val_t_replace.pass.cpp b/libcxx/test/std/language.support/support.dynamic/new.delete/new.delete.single/delete_align_val_t_replace.pass.cpp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 5885218c466..45250ae8008 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/libcxx/test/std/language.support/support.dynamic/new.delete/new.delete.single/delete_align_val_t_replace.pass.cpp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/libcxx/test/std/language.support/support.dynamic/new.delete/new.delete.single/delete_align_val_t_replace.pass.cpp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -32,6 +32,8 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ // UNSUPPORTED: macosx10.9
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ // UNSUPPORTED: macosx10.8
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ // UNSUPPORTED: macosx10.7
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++// UNSUPPORTED: macosx10.6
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++// UNSUPPORTED: macosx10.5
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ // On Windows libc++ doesn't provide its own definitions for new/delete
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ // but instead depends on the ones in VCRuntime. However VCRuntime does not
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/libcxx/test/std/language.support/support.dynamic/new.delete/new.delete.single/new_align_val_t.pass.cpp b/libcxx/test/std/language.support/support.dynamic/new.delete/new.delete.single/new_align_val_t.pass.cpp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 52db4c56ced..8203348a61c 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/libcxx/test/std/language.support/support.dynamic/new.delete/new.delete.single/new_align_val_t.pass.cpp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/libcxx/test/std/language.support/support.dynamic/new.delete/new.delete.single/new_align_val_t.pass.cpp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -25,6 +25,8 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ // UNSUPPORTED: macosx10.9
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ // UNSUPPORTED: macosx10.8
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ // UNSUPPORTED: macosx10.7
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++// UNSUPPORTED: macosx10.6
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++// UNSUPPORTED: macosx10.5
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ // asan and msan will not call the new handler.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ // UNSUPPORTED: sanitizer-new-delete
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/libcxx/test/std/language.support/support.dynamic/new.delete/new.delete.single/new_align_val_t_nothrow.pass.cpp b/libcxx/test/std/language.support/support.dynamic/new.delete/new.delete.single/new_align_val_t_nothrow.pass.cpp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index a5e40a0d28c..096873fbc1a 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/libcxx/test/std/language.support/support.dynamic/new.delete/new.delete.single/new_align_val_t_nothrow.pass.cpp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/libcxx/test/std/language.support/support.dynamic/new.delete/new.delete.single/new_align_val_t_nothrow.pass.cpp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -25,6 +25,8 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ // UNSUPPORTED: macosx10.9
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ // UNSUPPORTED: macosx10.8
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ // UNSUPPORTED: macosx10.7
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++// UNSUPPORTED: macosx10.6
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++// UNSUPPORTED: macosx10.5
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ // asan and msan will not call the new handler.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ // UNSUPPORTED: sanitizer-new-delete
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/libcxx/test/std/language.support/support.dynamic/new.delete/new.delete.single/new_align_val_t_nothrow_replace.pass.cpp b/libcxx/test/std/language.support/support.dynamic/new.delete/new.delete.single/new_align_val_t_nothrow_replace.pass.cpp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index de1bd8d8205..944ec95f4d7 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/libcxx/test/std/language.support/support.dynamic/new.delete/new.delete.single/new_align_val_t_nothrow_replace.pass.cpp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/libcxx/test/std/language.support/support.dynamic/new.delete/new.delete.single/new_align_val_t_nothrow_replace.pass.cpp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -28,6 +28,8 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ // UNSUPPORTED: macosx10.9
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ // UNSUPPORTED: macosx10.8
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ // UNSUPPORTED: macosx10.7
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++// UNSUPPORTED: macosx10.6
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++// UNSUPPORTED: macosx10.5
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ // NOTE: gcc doesn't provide -faligned-allocation flag to test for
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ // XFAIL: no-aligned-allocation && !gcc
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/libcxx/test/std/language.support/support.dynamic/new.delete/new.delete.single/new_align_val_t_replace.pass.cpp b/libcxx/test/std/language.support/support.dynamic/new.delete/new.delete.single/new_align_val_t_replace.pass.cpp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 2dd4631e7f6..c0ec16538c9 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/libcxx/test/std/language.support/support.dynamic/new.delete/new.delete.single/new_align_val_t_replace.pass.cpp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/libcxx/test/std/language.support/support.dynamic/new.delete/new.delete.single/new_align_val_t_replace.pass.cpp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -10,6 +10,8 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ // UNSUPPORTED: c++98, c++03, c++11, c++14
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ // UNSUPPORTED: sanitizer-new-delete
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++// UNSUPPORTED: macosx10.5
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ // NOTE: GCC doesn't provide a -faligned-allocation flag
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ // XFAIL: no-aligned-allocation && !gcc
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/libcxx/test/std/language.support/support.dynamic/new.delete/new.delete.single/sized_delete_fsizeddeallocation.sh.cpp b/libcxx/test/std/language.support/support.dynamic/new.delete/new.delete.single/sized_delete_fsizeddeallocation.sh.cpp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index d5b610f7180..4165bd11bec 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/libcxx/test/std/language.support/support.dynamic/new.delete/new.delete.single/sized_delete_fsizeddeallocation.sh.cpp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/libcxx/test/std/language.support/support.dynamic/new.delete/new.delete.single/sized_delete_fsizeddeallocation.sh.cpp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -18,6 +18,8 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ // XFAIL: availability_markup=macosx10.9
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ // XFAIL: availability_markup=macosx10.8
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ // XFAIL: availability_markup=macosx10.7
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++// XFAIL: availability_markup=macosx10.6
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++// XFAIL: availability_markup=macosx10.5
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ // NOTE: Only clang-3.7 and GCC 5.1 and greater support -fsized-deallocation.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ // REQUIRES: fsized-deallocation
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/lang/libcxx-powerpc/files/0003-libcxx-Actually-push-macosx-version-so-that-UNSUPPOR.patch b/lang/libcxx-powerpc/files/0003-libcxx-Actually-push-macosx-version-so-that-UNSUPPOR.patch
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 00000000000..162202fa591
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/lang/libcxx-powerpc/files/0003-libcxx-Actually-push-macosx-version-so-that-UNSUPPOR.patch
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,26 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+From 3a217e143e8740c2b056d6f44bca9b7a79bf0444 Mon Sep 17 00:00:00 2001
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+From: Iain Sandoe <iain@sandoe.co.uk>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Date: Tue, 2 Apr 2019 10:56:29 +0100
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Subject: [PATCH] [libcxx] Actually push macosx version so that
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ UNSUPPORTED works.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+---
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ libcxx/utils/libcxx/test/config.py | 5 +++++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 1 file changed, 5 insertions(+)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/libcxx/utils/libcxx/test/config.py b/libcxx/utils/libcxx/test/config.py
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 186a273a5b5..4224d7213de 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/libcxx/utils/libcxx/test/config.py
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/libcxx/utils/libcxx/test/config.py
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -497,6 +497,11 @@ class Configuration(object):
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ self.cxx.hasCompileFlag(["-x", "objective-c++", "-fobjc-arc"]):
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ self.config.available_features.add("objective-c++")
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ if self.target_info.platform() == "darwin" and \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ self.target_info.is_host_macosx():
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ t, name, vers = self.target_info.get_platform()
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ self.config.available_features.add(name + vers)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ def configure_compile_flags(self):
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ no_default_flags = self.get_lit_bool('no_default_flags', False)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if not no_default_flags:
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/lang/libcxx-powerpc/files/0004-libcxx-If-we-have-a-sysroot-don-t-try-to-use-xcrun-s.patch b/lang/libcxx-powerpc/files/0004-libcxx-If-we-have-a-sysroot-don-t-try-to-use-xcrun-s.patch
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 00000000000..82dc54ba400
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/lang/libcxx-powerpc/files/0004-libcxx-If-we-have-a-sysroot-don-t-try-to-use-xcrun-s.patch
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,45 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+From 6e78bf2d3a3dc4be178419674c5ce8c4e1bd57e0 Mon Sep 17 00:00:00 2001
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+From: Iain Sandoe <iain@sandoe.co.uk>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Date: Tue, 2 Apr 2019 10:55:43 +0100
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Subject: [PATCH] [libcxx] If we have a sysroot, don't try to use xcrun
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ --sdk.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+It doesn't work on earlier Darwin. Default to 10.4 if we fail everywhere.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+---
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ libcxx/utils/libcxx/test/target_info.py | 20 ++++++++++++--------
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 1 file changed, 12 insertions(+), 8 deletions(-)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/libcxx/utils/libcxx/test/target_info.py b/libcxx/utils/libcxx/test/target_info.py
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 7cffcea359f..9f1b9b22951 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/libcxx/utils/libcxx/test/target_info.py
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/libcxx/utils/libcxx/test/target_info.py
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -85,17 +85,21 @@ class DarwinLocalTI(DefaultTargetInfo):
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ def get_sdk_version(self, name):
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ assert self.is_host_macosx()
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- cmd = ['xcrun', '--sdk', name, '--show-sdk-path']
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- try:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- out = subprocess.check_output(cmd).strip()
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- except OSError:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- pass
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ res = 0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ out = self.full_config.get_lit_conf('sysroot')
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if not out:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ cmd = ['xcrun', '--sdk', name, '--show-sdk-path']
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ try:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ out = subprocess.check_output(cmd).strip()
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ except OSError:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ res = -1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ full_config.lit_config.note('out: %r' % out)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ if res == 0 and out:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ return re.sub(r'.*/[^0-9]+([0-9.]+)\.sdk', r'\1', out)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ else:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ self.full_config.lit_config.fatal(
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "cannot infer sdk version with: %r" % cmd)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- return re.sub(r'.*/[^0-9]+([0-9.]+)\.sdk', r'\1', out)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ return '10.4'
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ def get_platform(self):
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ platform = self.full_config.get_lit_conf('platform')
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/lang/libcxx-powerpc/files/0005-more-ppc-hacks-on-libcxx.patch b/lang/libcxx-powerpc/files/0005-more-ppc-hacks-on-libcxx.patch
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 00000000000..9c3f76cccd8
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/lang/libcxx-powerpc/files/0005-more-ppc-hacks-on-libcxx.patch
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,54 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+From 49c3f6ebc66f300886d4cb685cb9f1952b429b4f Mon Sep 17 00:00:00 2001
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+From: Iain Sandoe <iain@sandoe.co.uk>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Date: Mon, 1 Apr 2019 20:56:33 +0100
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Subject: [PATCH] more ppc hacks on libcxx
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+---
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ libcxx/lib/CMakeLists.txt | 13 +++++++++++--
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ libcxx/utils/libcxx/test/target_info.py | 2 +-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 2 files changed, 12 insertions(+), 3 deletions(-)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/libcxx/lib/CMakeLists.txt b/libcxx/lib/CMakeLists.txt
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 347f21ff45e..2f9a00011e9 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/libcxx/lib/CMakeLists.txt
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/libcxx/lib/CMakeLists.txt
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -148,7 +148,16 @@ if (LIBCXX_OSX_REEXPORT_SYSTEM_ABI_LIBRARY)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ endif()
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ endif()
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- if ( CMAKE_OSX_DEPLOYMENT_TARGET STREQUAL "10.6" )
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ if ( CMAKE_OSX_DEPLOYMENT_TARGET STREQUAL "10.5" )
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ add_link_flags(
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ "-compatibility_version 1"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ "-current_version 1"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ "-install_name @rpath/libc++.1.dylib"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ "-Wl,-reexport_library,${LIBCXX_LIBRARY_DIR}/libc++abi.dylib"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ "-Wl,-unexported_symbols_list,${CMAKE_CURRENT_SOURCE_DIR}/libc++unexp.exp"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ "/usr/lib/libgcc_s.10.5.dylib"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ "/usr/lib/libSystem.B.dylib")
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ elseif ( CMAKE_OSX_DEPLOYMENT_TARGET STREQUAL "10.6" )
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ add_definitions(-D__STRICT_ANSI__)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ add_link_flags(
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "-compatibility_version 1"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -158,7 +167,7 @@ if (LIBCXX_OSX_REEXPORT_SYSTEM_ABI_LIBRARY)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "-Wl,-unexported_symbols_list,${CMAKE_CURRENT_SOURCE_DIR}/libc++unexp.exp"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "/usr/lib/libSystem.B.dylib")
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ else()
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- if (DEFINED CMAKE_OSX_SYSROOT AND NOT CMAKE_OSX_SYSROOT STREQUAL "")
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ if (DEFINED CMAKE_OSX_SYSROOT AND NOT CMAKE_OSX_SYSROOT STREQUAL "")
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ list(FIND CMAKE_OSX_ARCHITECTURES "armv7" OSX_HAS_ARMV7)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if (NOT OSX_HAS_ARMV7 EQUAL -1)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set(OSX_RE_EXPORT_LINE
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/libcxx/utils/libcxx/test/target_info.py b/libcxx/utils/libcxx/test/target_info.py
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 179db775229..7cffcea359f 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/libcxx/utils/libcxx/test/target_info.py
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/libcxx/utils/libcxx/test/target_info.py
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -140,7 +140,7 @@ class DarwinLocalTI(DefaultTargetInfo):
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ flags += ["-isysroot", sdk_path]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ def add_cxx_link_flags(self, flags):
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- flags += ['-lSystem']
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ flags += [ '-latomic', '-lgcc_s.10.5', '-lSystem']
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ def configure_env(self, env):
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ library_paths = []
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/lang/libcxx-powerpc/files/0006-libcxx-Updated-version-of-David-Fang-s-wrapper-for-m.patch b/lang/libcxx-powerpc/files/0006-libcxx-Updated-version-of-David-Fang-s-wrapper-for-m.patch
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 00000000000..e97d51e2d6c
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/lang/libcxx-powerpc/files/0006-libcxx-Updated-version-of-David-Fang-s-wrapper-for-m.patch
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,56 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+From d42dc2011076bde10aac414aee100b0db88accb4 Mon Sep 17 00:00:00 2001
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+From: Iain Sandoe <iain@sandoe.co.uk>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Date: Sun, 27 Jul 2014 19:48:56 +0100
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Subject: [PATCH] [libcxx] Updated version of David Fang's wrapper for
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ math.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+We now use the local math.h wrapper so that the change is
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+effective wherever math.h is used.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+---
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ libcxx/include/cmath | 1 -
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ libcxx/include/math.h | 18 ++++++++++++++++++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 2 files changed, 18 insertions(+), 1 deletion(-)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/libcxx/include/cmath b/libcxx/include/cmath
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index ffb1c46c7b6..8ba7bcd3bf5 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/libcxx/include/cmath
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/libcxx/include/cmath
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -301,7 +301,6 @@ long double truncl(long double x);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-#include <__config>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #include <math.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/libcxx/include/math.h b/libcxx/include/math.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 3cc72aa2791..831fff10d37 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/libcxx/include/math.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/libcxx/include/math.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -298,8 +298,26 @@ long double truncl(long double x);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #pragma GCC system_header
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++// The C++11 standard requires C99, but whether or not __STDC_VERSION__
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++// is accordingly set is implementation-defined.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++// on darwin10: C99 is explicltly required to enable long long returning
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++// functions, like llrint and llround.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++// Alternatively, undefine __STRICT_ANSI__ for those symbols.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++// This is just a convenient, isolated workaround.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#if defined(__APPLE__) && (__cplusplus >= 201101L) \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ && !defined(__STDC_VERSION__) && defined(__STRICT_ANSI__)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#define __IMPLICIT_STDC_VERSION_C99__
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#undef __STRICT_ANSI__
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #include_next <math.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#ifdef __IMPLICIT_STDC_VERSION_C99__
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++// Undo the temporary change made above.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#define __STRICT_ANSI__
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++// __IMPLICIT_STDC_VERSION_C99__ remains defined as evidence of what happened
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #ifdef __cplusplus
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ // We support including .h headers inside 'extern "C"' contexts, so switch
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/lang/libcxx-powerpc/files/0007-Fix-up-thread-constexpr-for-GCC-where-the-PPC-port-c.patch b/lang/libcxx-powerpc/files/0007-Fix-up-thread-constexpr-for-GCC-where-the-PPC-port-c.patch
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 00000000000..9ecbd4f92ef
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/lang/libcxx-powerpc/files/0007-Fix-up-thread-constexpr-for-GCC-where-the-PPC-port-c.patch
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,27 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+From 5612bf697682de0dab83b2f357ce4254609fb471 Mon Sep 17 00:00:00 2001
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+From: Iain Sandoe <iain@sandoe.co.uk>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Date: Sat, 11 Apr 2015 19:58:48 +0100
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Subject: [PATCH] Fix up thread constexpr for GCC where the PPC port
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ can't do long long constexpr.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+---
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ libcxx/include/thread | 5 +++++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 1 file changed, 5 insertions(+)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/libcxx/include/thread b/libcxx/include/thread
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 0629d70efda..7c8934184f2 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/libcxx/include/thread
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/libcxx/include/thread
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -435,7 +435,12 @@ sleep_for(const chrono::duration<_Rep, _Period>& __d)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ using namespace chrono;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if (__d > duration<_Rep, _Period>::zero())
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#if defined(_LIBCPP_COMPILER_GCC) && (__powerpc__ || __POWERPC__)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ // GCC's long double const folding is incomplete for IBM128 long doubles.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ _LIBCPP_CONSTEXPR duration<long double> _Max = duration<long double>(ULLONG_MAX/1000000000ULL) ;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#else
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ _LIBCPP_CONSTEXPR duration<long double> _Max = nanoseconds::max();
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ nanoseconds __ns;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if (__d < _Max)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ {
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/lang/libcxx-powerpc/files/0008-libcxx-cmake-Make-sure-to-find-the-abi-lib-that-we-j.patch b/lang/libcxx-powerpc/files/0008-libcxx-cmake-Make-sure-to-find-the-abi-lib-that-we-j.patch
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 00000000000..185e14f8fc0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/lang/libcxx-powerpc/files/0008-libcxx-cmake-Make-sure-to-find-the-abi-lib-that-we-j.patch
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,25 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+From 0dfbccb28999358c5769e3d7349321623ae74dd4 Mon Sep 17 00:00:00 2001
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+From: Iain Sandoe <iain@sandoe.co.uk>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Date: Fri, 16 Nov 2018 00:56:03 +0000
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Subject: [PATCH] [libcxx, cmake] Make sure to find the abi lib that we
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ just built for 10.6 or lower.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+---
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ libcxx/lib/CMakeLists.txt | 4 ++--
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 1 file changed, 2 insertions(+), 2 deletions(-)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/libcxx/lib/CMakeLists.txt b/libcxx/lib/CMakeLists.txt
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index e068edc8a7a..347f21ff45e 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/libcxx/lib/CMakeLists.txt
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/libcxx/lib/CMakeLists.txt
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -153,8 +153,8 @@ if (LIBCXX_OSX_REEXPORT_SYSTEM_ABI_LIBRARY)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ add_link_flags(
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "-compatibility_version 1"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "-current_version 1"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- "-install_name /usr/lib/libc++.1.dylib"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- "-Wl,-reexport_library,/usr/lib/libc++abi.dylib"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ "-install_name @rpath/libc++.1.dylib"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ "-Wl,-reexport_library,${LIBCXX_LIBRARY_DIR}/libc++abi.dylib"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "-Wl,-unexported_symbols_list,${CMAKE_CURRENT_SOURCE_DIR}/libc++unexp.exp"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "/usr/lib/libSystem.B.dylib")
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ else()
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/lang/libcxx-powerpc/files/0009-libcxx-cmake-if-a-LIBCXX_SYSROOT-is-given-this-pre-e.patch b/lang/libcxx-powerpc/files/0009-libcxx-cmake-if-a-LIBCXX_SYSROOT-is-given-this-pre-e.patch
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 00000000000..83414777bec
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/lang/libcxx-powerpc/files/0009-libcxx-cmake-if-a-LIBCXX_SYSROOT-is-given-this-pre-e.patch
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,41 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+From 789f3322720c6b500660f313078153a897571eca Mon Sep 17 00:00:00 2001
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+From: Iain Sandoe <iain@sandoe.co.uk>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Date: Sun, 13 Nov 2016 20:43:38 +0000
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Subject: [PATCH] [libcxx, cmake] if a LIBCXX_SYSROOT is given, this
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ pre-empts the use of xcrun to find the sdk
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+---
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ libcxx/utils/libcxx/test/target_info.py | 18 ++++++++++--------
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 1 file changed, 10 insertions(+), 8 deletions(-)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/libcxx/utils/libcxx/test/target_info.py b/libcxx/utils/libcxx/test/target_info.py
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index de2232ff418..179db775229 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/libcxx/utils/libcxx/test/target_info.py
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/libcxx/utils/libcxx/test/target_info.py
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -122,16 +122,18 @@ class DarwinLocalTI(DefaultTargetInfo):
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ add_common_locales(features, self.full_config.lit_config)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ def add_cxx_compile_flags(self, flags):
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- if self.full_config.use_deployment:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- _, name, _ = self.full_config.config.deployment
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- cmd = ['xcrun', '--sdk', name, '--show-sdk-path']
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ res = 0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ if self.full_config.get_lit_conf('sysroot') != '':
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ # Other logic will add --sysroot= with this value, don't
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ # need to replicate, and don't want to override with whatever
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ # Xcode happens to have.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ out = ''
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ else:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ cmd = ['xcrun', '--show-sdk-path']
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- try:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- out = subprocess.check_output(cmd).strip()
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- res = 0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- except OSError:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- res = -1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ try:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ out = subprocess.check_output(cmd).strip()
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ except OSError:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ res = -1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if res == 0 and out:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ sdk_path = out
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ self.full_config.lit_config.note('using SDKROOT: %r' % sdk_path)
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/lang/libcxx-powerpc/files/0010-Add-coroutine-header.patch b/lang/libcxx-powerpc/files/0010-Add-coroutine-header.patch
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 00000000000..fa78b1e8b87
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/lang/libcxx-powerpc/files/0010-Add-coroutine-header.patch
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,480 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+From 3c659b956accc288f9332049d5313d0406dc48c4 Mon Sep 17 00:00:00 2001
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+From: barracuda156 <vital.had@gmail.com>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Date: Tue, 14 Nov 2023 21:46:08 +0800
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Subject: [PATCH] Add coroutine header
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+From: https://github.com/iains/llvm-project/commit/0ec37d1e98f07379443c420569f282b12482595f
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+---
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ libcxx/include/CMakeLists.txt | 1 +
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ libcxx/include/__config | 5 +-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ libcxx/include/coroutine | 409 ++++++++++++++++++++++++++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ libcxx/include/experimental/coroutine | 7 +
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 4 files changed, 421 insertions(+), 1 deletion(-)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ create mode 100644 libcxx/include/coroutine
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/libcxx/include/CMakeLists.txt b/libcxx/include/CMakeLists.txt
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index d9def18d725..dc3cf73770a 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/libcxx/include/CMakeLists.txt
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/libcxx/include/CMakeLists.txt
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -44,6 +44,7 @@ set(files
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ complex
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ complex.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ condition_variable
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ coroutine
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ csetjmp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ csignal
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ cstdarg
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/libcxx/include/__config b/libcxx/include/__config
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 738d891e303..1bd724722c5 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/libcxx/include/__config
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/libcxx/include/__config
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -1244,7 +1244,10 @@ _LIBCPP_FUNC_VIS extern "C" void __sanitizer_annotate_contiguous_container(
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #define _LIBCPP_HAS_NO_IS_AGGREGATE
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-#if !defined(__cpp_coroutines) || __cpp_coroutines < 201703L
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#if defined(__clang__) && (!defined(__cpp_coroutine) || \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ __cpp_coroutine < 201703L)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#define _LIBCPP_HAS_NO_COROUTINES
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#elif !defined(__cpp_impl_coroutine) || __cpp_impl_coroutine < 201703L
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #define _LIBCPP_HAS_NO_COROUTINES
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/libcxx/include/coroutine b/libcxx/include/coroutine
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+new file mode 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 00000000000..0b3eac1f021
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/libcxx/include/coroutine
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -0,0 +1,409 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++// -*- C++ -*-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++//===----------------------------- coroutine -----------------------------===//
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++//
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++// See https://llvm.org/LICENSE.txt for license information.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++//
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++//===----------------------------------------------------------------------===//
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#ifndef _LIBCPP_COROUTINE
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#define _LIBCPP_COROUTINE
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++/**
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ experimental/coroutine synopsis
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++// C++next
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++namespace std {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++inline namespace __coro20 {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ // 18.11.1 coroutine traits
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++template <typename R, typename... ArgTypes>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++class coroutine_traits;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++// 18.11.2 coroutine handle
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++template <typename Promise = void>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++class coroutine_handle;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++// 18.11.2.7 comparison operators:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++bool operator==(coroutine_handle<> x, coroutine_handle<> y) _NOEXCEPT;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++bool operator!=(coroutine_handle<> x, coroutine_handle<> y) _NOEXCEPT;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++bool operator<(coroutine_handle<> x, coroutine_handle<> y) _NOEXCEPT;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++bool operator<=(coroutine_handle<> x, coroutine_handle<> y) _NOEXCEPT;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++bool operator>=(coroutine_handle<> x, coroutine_handle<> y) _NOEXCEPT;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++bool operator>(coroutine_handle<> x, coroutine_handle<> y) _NOEXCEPT;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++// 18.11.3 trivial awaitables
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++struct suspend_never;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++struct suspend_always;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++// 18.11.2.8 hash support:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++template <class T> struct hash;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++template <class P> struct hash<coroutine_handle<P>>;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++} // namespace __coro20
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++} // namespace std
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#include <__config>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#if defined(_LIBCPP_COMPILER_GCC)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#include <new>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#include <type_traits>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#include <functional>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#include <memory> // for hash<T*>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#include <cstddef>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#include <__debug>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#pragma GCC system_header
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#ifdef _LIBCPP_HAS_NO_COROUTINES
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++# if defined(_LIBCPP_WARNING)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ _LIBCPP_WARNING("<experimental/coroutine> cannot be used with this compiler")
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++# else
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++# warning <experimental/coroutine> cannot be used with this compiler
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++# endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#ifndef _LIBCPP_HAS_NO_COROUTINES
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++_LIBCPP_BEGIN_NAMESPACE_STD
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++inline namespace __coro20 {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++template <class _Tp, class = void>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++struct __coroutine_traits_sfinae {};
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++template <class _Tp>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++struct __coroutine_traits_sfinae<
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ _Tp, typename __void_t<typename _Tp::promise_type>::type>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++{
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ using promise_type = typename _Tp::promise_type;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++};
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++template <typename _Ret, typename... _Args>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++struct coroutine_traits
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ : public __coroutine_traits_sfinae<_Ret>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++{
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++};
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++template <typename _Promise = void>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++class _LIBCPP_TEMPLATE_VIS coroutine_handle;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++template <>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++class _LIBCPP_TEMPLATE_VIS coroutine_handle<void> {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++public:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ _LIBCPP_INLINE_VISIBILITY
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ _LIBCPP_CONSTEXPR coroutine_handle() _NOEXCEPT : __handle_(nullptr) {}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ _LIBCPP_INLINE_VISIBILITY
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ _LIBCPP_CONSTEXPR coroutine_handle(nullptr_t) _NOEXCEPT : __handle_(nullptr) {}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ _LIBCPP_INLINE_VISIBILITY
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ coroutine_handle& operator=(nullptr_t) _NOEXCEPT {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ __handle_ = nullptr;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ return *this;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ _LIBCPP_INLINE_VISIBILITY
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ _LIBCPP_CONSTEXPR void* address() const _NOEXCEPT { return __handle_; }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ _LIBCPP_INLINE_VISIBILITY
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ _LIBCPP_CONSTEXPR explicit operator bool() const _NOEXCEPT { return __handle_; }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ _LIBCPP_INLINE_VISIBILITY
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ void operator()() { resume(); }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ _LIBCPP_INLINE_VISIBILITY
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ void resume() {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ _LIBCPP_ASSERT(__is_suspended(),
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ "resume() can only be called on suspended coroutines");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ _LIBCPP_ASSERT(!done(),
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ "resume() has undefined behavior when the coroutine is done");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ __builtin_coro_resume(__handle_);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ _LIBCPP_INLINE_VISIBILITY
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ void destroy() {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ _LIBCPP_ASSERT(__is_suspended(),
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ "destroy() can only be called on suspended coroutines");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ __builtin_coro_destroy(__handle_);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ _LIBCPP_INLINE_VISIBILITY
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ bool done() const {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ _LIBCPP_ASSERT(__is_suspended(),
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ "done() can only be called on suspended coroutines");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ return __builtin_coro_done(__handle_);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++public:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ _LIBCPP_INLINE_VISIBILITY
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ _LIBCPP_CONSTEXPR
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ static coroutine_handle from_address(void* __addr) _NOEXCEPT {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ coroutine_handle __tmp;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ __tmp.__handle_ = __addr;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ return __tmp;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ // FIXME: Should from_address(nullptr) be allowed?
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ _LIBCPP_INLINE_VISIBILITY
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ _LIBCPP_CONSTEXPR
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ static coroutine_handle from_address(nullptr_t) _NOEXCEPT {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ return coroutine_handle(nullptr);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ template <class _Tp, bool _CallIsValid = false>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ static coroutine_handle from_address(_Tp*) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ static_assert(_CallIsValid,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ "coroutine_handle<void>::from_address cannot be called with "
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ "non-void pointers");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++private:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ bool __is_suspended() const _NOEXCEPT {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ // FIXME actually implement a check for if the coro is suspended.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ return __handle_;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ template <class _PromiseT> friend class coroutine_handle;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ void* __handle_;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++};
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++// 18.11.2.7 comparison operators:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++inline _LIBCPP_INLINE_VISIBILITY
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++bool operator==(coroutine_handle<> __x, coroutine_handle<> __y) _NOEXCEPT {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ return __x.address() == __y.address();
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++inline _LIBCPP_INLINE_VISIBILITY
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++bool operator!=(coroutine_handle<> __x, coroutine_handle<> __y) _NOEXCEPT {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ return !(__x == __y);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++inline _LIBCPP_INLINE_VISIBILITY
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++bool operator<(coroutine_handle<> __x, coroutine_handle<> __y) _NOEXCEPT {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ return less<void*>()(__x.address(), __y.address());
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++inline _LIBCPP_INLINE_VISIBILITY
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++bool operator>(coroutine_handle<> __x, coroutine_handle<> __y) _NOEXCEPT {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ return __y < __x;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++inline _LIBCPP_INLINE_VISIBILITY
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++bool operator<=(coroutine_handle<> __x, coroutine_handle<> __y) _NOEXCEPT {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ return !(__x > __y);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++inline _LIBCPP_INLINE_VISIBILITY
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++bool operator>=(coroutine_handle<> __x, coroutine_handle<> __y) _NOEXCEPT {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ return !(__x < __y);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++template <typename _Promise>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++class _LIBCPP_TEMPLATE_VIS coroutine_handle : public coroutine_handle<> {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ using _Base = coroutine_handle<>;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++public:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#ifndef _LIBCPP_CXX03_LANG
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ // 18.11.2.1 construct/reset
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ using coroutine_handle<>::coroutine_handle;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#else
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ _LIBCPP_INLINE_VISIBILITY coroutine_handle() _NOEXCEPT : _Base() {}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ _LIBCPP_INLINE_VISIBILITY coroutine_handle(nullptr_t) _NOEXCEPT : _Base(nullptr) {}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ _LIBCPP_INLINE_VISIBILITY
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ coroutine_handle& operator=(nullptr_t) _NOEXCEPT {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ _Base::operator=(nullptr);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ return *this;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ _LIBCPP_INLINE_VISIBILITY
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ _Promise& promise() const {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ return *static_cast<_Promise*>(
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ __builtin_coro_promise(this->__handle_, _LIBCPP_ALIGNOF(_Promise), false));
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++public:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ _LIBCPP_INLINE_VISIBILITY
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ _LIBCPP_CONSTEXPR
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ static coroutine_handle from_address(void* __addr) _NOEXCEPT {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ coroutine_handle __tmp;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ __tmp.__handle_ = __addr;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ return __tmp;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ // NOTE: this overload isn't required by the standard but is needed so
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ // the deleted _Promise* overload doesn't make from_address(nullptr)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ // ambiguous.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ // FIXME: should from_address work with nullptr?
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ _LIBCPP_INLINE_VISIBILITY
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ _LIBCPP_CONSTEXPR
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ static coroutine_handle from_address(nullptr_t) _NOEXCEPT {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ return coroutine_handle(nullptr);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ template <class _Tp, bool _CallIsValid = false>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ static coroutine_handle from_address(_Tp*) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ static_assert(_CallIsValid,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ "coroutine_handle<promise_type>::from_address cannot be called with "
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ "non-void pointers");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ template <bool _CallIsValid = false>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ static coroutine_handle from_address(_Promise*) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ static_assert(_CallIsValid,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ "coroutine_handle<promise_type>::from_address cannot be used with "
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ "pointers to the coroutine's promise type; use 'from_promise' instead");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ _LIBCPP_INLINE_VISIBILITY
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ static coroutine_handle from_promise(_Promise& __promise) _NOEXCEPT {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ typedef typename remove_cv<_Promise>::type _RawPromise;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ coroutine_handle __tmp;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ __tmp.__handle_ = __builtin_coro_promise(
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ _VSTD::addressof(const_cast<_RawPromise&>(__promise)),
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ _LIBCPP_ALIGNOF(_Promise), true);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ return __tmp;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++};
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#if __has_builtin(__builtin_coro_noop)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++struct noop_coroutine_promise {};
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++template <>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++class _LIBCPP_TEMPLATE_VIS coroutine_handle<noop_coroutine_promise>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ : public coroutine_handle<> {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ using _Base = coroutine_handle<>;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ using _Promise = noop_coroutine_promise;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++public:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ _LIBCPP_INLINE_VISIBILITY
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ _Promise& promise() const {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ return *static_cast<_Promise*>(
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ __builtin_coro_promise(this->__handle_, _LIBCPP_ALIGNOF(_Promise), false));
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ _LIBCPP_CONSTEXPR explicit operator bool() const _NOEXCEPT { return true; }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ _LIBCPP_CONSTEXPR bool done() const _NOEXCEPT { return false; }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ _LIBCPP_CONSTEXPR_AFTER_CXX17 void operator()() const _NOEXCEPT {}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ _LIBCPP_CONSTEXPR_AFTER_CXX17 void resume() const _NOEXCEPT {}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ _LIBCPP_CONSTEXPR_AFTER_CXX17 void destroy() const _NOEXCEPT {}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++private:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ _LIBCPP_INLINE_VISIBILITY
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ friend coroutine_handle<noop_coroutine_promise> noop_coroutine() _NOEXCEPT;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ _LIBCPP_INLINE_VISIBILITY coroutine_handle() _NOEXCEPT {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ this->__handle_ = __builtin_coro_noop();
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++};
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++using noop_coroutine_handle = coroutine_handle<noop_coroutine_promise>;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++inline _LIBCPP_INLINE_VISIBILITY
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++noop_coroutine_handle noop_coroutine() _NOEXCEPT {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ return noop_coroutine_handle();
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#else
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ /// [coroutine.noop]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ struct noop_coroutine_promise
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ };
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ // 17.12.4.1 Class noop_coroutine_promise
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ /// [coroutine.promise.noop]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ template <>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ struct coroutine_handle<noop_coroutine_promise>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ // _GLIBCXX_RESOLVE_LIB_DEFECTS
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ // 3460. Unimplementable noop_coroutine_handle guarantees
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ // [coroutine.handle.noop.conv], conversion
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ _LIBCPP_CONSTEXPR operator coroutine_handle<>() const _NOEXCEPT
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ { return coroutine_handle<>::from_address(address()); }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ // [coroutine.handle.noop.observers], observers
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ _LIBCPP_CONSTEXPR explicit operator bool() const _NOEXCEPT { return true; }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ _LIBCPP_CONSTEXPR bool done() const _NOEXCEPT { return false; }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ // [coroutine.handle.noop.resumption], resumption
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ void operator()() const _NOEXCEPT {}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ void resume() const noexcept {}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ void destroy() const noexcept {}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ // [coroutine.handle.noop.promise], promise access
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ noop_coroutine_promise& promise() const noexcept
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ { return _S_fr.__p; }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ // [coroutine.handle.noop.address], address
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ _LIBCPP_CONSTEXPR void* address() const noexcept { return _M_fr_ptr; }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ private:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ friend coroutine_handle noop_coroutine() _NOEXCEPT;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ struct __frame
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ static void __dummy_resume_destroy() { }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ void (*__r)() = __dummy_resume_destroy;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ void (*__d)() = __dummy_resume_destroy;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ struct noop_coroutine_promise __p;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ };
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ static __frame _S_fr;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ explicit coroutine_handle() noexcept = default;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ void* _M_fr_ptr = &_S_fr;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ };
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ using noop_coroutine_handle = coroutine_handle<noop_coroutine_promise>;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ inline noop_coroutine_handle::__frame
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ noop_coroutine_handle::_S_fr{};
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ inline noop_coroutine_handle noop_coroutine() _NOEXCEPT
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ return noop_coroutine_handle();
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#endif // __has_builtin(__builtin_coro_noop)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++struct suspend_never {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ _LIBCPP_INLINE_VISIBILITY
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ bool await_ready() const _NOEXCEPT { return true; }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ _LIBCPP_INLINE_VISIBILITY
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ void await_suspend(coroutine_handle<>) const _NOEXCEPT {}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ _LIBCPP_INLINE_VISIBILITY
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ void await_resume() const _NOEXCEPT {}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++};
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++struct suspend_always {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ _LIBCPP_INLINE_VISIBILITY
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ bool await_ready() const _NOEXCEPT { return false; }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ _LIBCPP_INLINE_VISIBILITY
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ void await_suspend(coroutine_handle<>) const _NOEXCEPT {}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ _LIBCPP_INLINE_VISIBILITY
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ void await_resume() const _NOEXCEPT {}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++};
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++} // __coro20
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++template <class _Tp>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++struct hash<_VSTD::__coro20::coroutine_handle<_Tp> > {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ using __arg_type = _VSTD::__coro20::coroutine_handle<_Tp>;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ _LIBCPP_INLINE_VISIBILITY
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ size_t operator()(__arg_type const& __v) const _NOEXCEPT
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ {return hash<void*>()(__v.address());}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++};
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++_LIBCPP_END_NAMESPACE_STD
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#endif // !defined(_LIBCPP_HAS_NO_COROUTINES)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#else // the compiler doesn't support this header.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#error this compiler should use <experimental/coroutine>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#endif /* _LIBCPP_COROUTINE */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/libcxx/include/experimental/coroutine b/libcxx/include/experimental/coroutine
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 1eb224a535a..f43440bd522 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/libcxx/include/experimental/coroutine
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/libcxx/include/experimental/coroutine
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -47,6 +47,11 @@ template <class P> struct hash<coroutine_handle<P>>;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #include <experimental/__config>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#if defined(_LIBCPP_COMPILER_GCC)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++# error GCC should include <coroutine> not <experimental/coroutine>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#else
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #include <new>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #include <type_traits>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #include <functional>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -333,4 +338,6 @@ _LIBCPP_END_NAMESPACE_STD
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #endif // !defined(_LIBCPP_HAS_NO_COROUTINES)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#endif // check for which compiler.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #endif /* _LIBCPP_EXPERIMENTAL_COROUTINE */
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/lang/libcxx-powerpc/files/0011-libcxx-libcxxabi-minor-fix-to-linking.patch b/lang/libcxx-powerpc/files/0011-libcxx-libcxxabi-minor-fix-to-linking.patch
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 00000000000..2a2e27c7e5d
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/lang/libcxx-powerpc/files/0011-libcxx-libcxxabi-minor-fix-to-linking.patch
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,34 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+From 444716d288d5058a9aa810057644f9a19ba90018 Mon Sep 17 00:00:00 2001
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+From: barracuda156 <vital.had@gmail.com>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Date: Tue, 14 Nov 2023 17:38:08 +0800
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Subject: [PATCH] libcxx, libcxxabi: minor fix to linking
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+---
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ libcxx/lib/CMakeLists.txt | 1 +
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ libcxxabi/src/CMakeLists.txt | 1 +
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 2 files changed, 2 insertions(+)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/libcxx/lib/CMakeLists.txt b/libcxx/lib/CMakeLists.txt
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 2f9a00011e9..9805723ca4c 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/libcxx/lib/CMakeLists.txt
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/libcxx/lib/CMakeLists.txt
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -165,6 +165,7 @@ if (LIBCXX_OSX_REEXPORT_SYSTEM_ABI_LIBRARY)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "-install_name @rpath/libc++.1.dylib"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "-Wl,-reexport_library,${LIBCXX_LIBRARY_DIR}/libc++abi.dylib"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "-Wl,-unexported_symbols_list,${CMAKE_CURRENT_SOURCE_DIR}/libc++unexp.exp"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ "/usr/lib/libgcc_s.10.5.dylib"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "/usr/lib/libSystem.B.dylib")
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ else()
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if (DEFINED CMAKE_OSX_SYSROOT AND NOT CMAKE_OSX_SYSROOT STREQUAL "")
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/libcxxabi/src/CMakeLists.txt b/libcxxabi/src/CMakeLists.txt
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 30c9ce44d83..fce0b7e1ba5 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/libcxxabi/src/CMakeLists.txt
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/libcxxabi/src/CMakeLists.txt
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -104,6 +104,7 @@ if ( APPLE )
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "-current_version 1"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "-install_name @rpath/libc++abi.1.dylib")
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ list(APPEND LIBCXXABI_LINK_FLAGS
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ "/usr/lib/libgcc_s.10.5.dylib"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "/usr/lib/libSystem.B.dylib")
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ else()
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ list(APPEND LIBCXXABI_SHARED_LINK_FLAGS
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/lang/libcxx-powerpc/files/0012-disable-Apple-libc-Availability-tests.patch b/lang/libcxx-powerpc/files/0012-disable-Apple-libc-Availability-tests.patch
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 00000000000..956ab359313
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/lang/libcxx-powerpc/files/0012-disable-Apple-libc-Availability-tests.patch
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,27 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+From 2bcfad170970fa3d0b668c0d904f9767e115cdfe Mon Sep 17 00:00:00 2001
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+From: "Kirill A. Korinsky" <kirill@korins.ky>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Date: Wed, 17 Aug 2022 15:27:50 +0200
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Subject: [PATCH] disable Apple libc++ Availability tests
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+if we are using MacPort's installed libc++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+then Apple's availablilty tests for libcxx by OS version
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+are no longer applicable
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+---
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ libcxx/include/__config | 4 ++++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 1 file changed, 4 insertions(+)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/libcxx/include/__config b/libcxx/include/__config
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 575147cead42..24cda6ddc31b 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/libcxx/include/__config
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/libcxx/include/__config
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -10,6 +10,10 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #ifndef _LIBCPP_CONFIG
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #define _LIBCPP_CONFIG
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++// for MacPorts, our installed libcxx does not require Apple system
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++// Availability tests
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#define _LIBCPP_DISABLE_AVAILABILITY
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #if defined(_MSC_VER) && !defined(__clang__)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # define _LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/lang/libcxx-powerpc/files/0013-Fix-missing-long-long-math-prototypes-when-using-the.patch b/lang/libcxx-powerpc/files/0013-Fix-missing-long-long-math-prototypes-when-using-the.patch
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 00000000000..123c9d46ee6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/lang/libcxx-powerpc/files/0013-Fix-missing-long-long-math-prototypes-when-using-the.patch
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,48 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+From fd4de49747f1528eb72b2b73319bcab5d4298c9a Mon Sep 17 00:00:00 2001
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+From: Jeremy Huddleston Sequoia <jeremyhu@apple.com>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Date: Sat, 17 Jan 2015 16:26:20 -0800
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Subject: [PATCH] Fix missing long long math prototypes when using the Snow
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ Leopard SDK
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Signed-off-by: Jeremy Huddleston Sequoia <jeremyhu@apple.com>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+---
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ libcxx/include/math.h | 26 ++++++++++++++++++++++++++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 1 file changed, 26 insertions(+)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/libcxx/include/math.h b/libcxx/include/math.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 1603d5748e2d..d64e6a52ccd3 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/libcxx/include/math.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/libcxx/include/math.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -299,6 +299,32 @@ long double truncl(long double x);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #include_next <math.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#ifdef __APPLE__
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++# if __has_include(<Availability.h>)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++# include <Availability.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++# if __MAC_OS_X_VERSION_MAX_ALLOWED < 1070
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++# define __APPLE_BAD_MATH_H 1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++# else
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++# define __APPLE_BAD_MATH_H 0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++# endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++# else
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++# define __APPLE_BAD_MATH_H 1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++# endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++# if __APPLE_BAD_MATH_H
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++/* These prototypes are incorrectly omitted from <math.h> on Snow Leopard despite being available */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++extern "C" {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ extern long long int llrintl(long double);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ extern long long int llrint(double);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ extern long long int llrintf(float);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ extern long long int llroundl(long double);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ extern long long int llround(double);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ extern long long int llroundf(float);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++# endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#endif // __APPLE__
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #ifdef __cplusplus
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ // We support including .h headers inside 'extern "C"' contexts, so switch
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/lang/libcxx-powerpc/files/0014-implement-atomic-using-mutex-lock_guard-for-64b-ops-.patch b/lang/libcxx-powerpc/files/0014-implement-atomic-using-mutex-lock_guard-for-64b-ops-.patch
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 00000000000..d6a544ecf9f
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/lang/libcxx-powerpc/files/0014-implement-atomic-using-mutex-lock_guard-for-64b-ops-.patch
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,313 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+From 884ca9bc09df5859489abba1741fdb7d16cd4c7a Mon Sep 17 00:00:00 2001
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+From: David Fang <fang@csl.cornell.edu>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Date: Wed, 15 Jan 2014 21:27:34 -0800
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Subject: [PATCH] implement atomic<> using mutex/lock_guard for 64b ops on 32b
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ PPC not pretty, not fast, but passes atomic tests
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+---
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ libcxx/include/__atomic_locked | 240 +++++++++++++++++++++++++++++++++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ libcxx/include/atomic | 46 +++++++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 2 files changed, 286 insertions(+)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ create mode 100644 libcxx/include/__atomic_locked
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/libcxx/include/__atomic_locked b/libcxx/include/__atomic_locked
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+new file mode 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 000000000000..f10dd747e878
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/libcxx/include/__atomic_locked
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -0,0 +1,240 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++// -*- C++ -*-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++//===--------------------------- __atomic_locked --------------------------===//
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++//
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++// The LLVM Compiler Infrastructure
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++//
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++// This file is distributed under the University of Illinois Open Source
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++// License. See LICENSE.TXT for details.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++//
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++//===----------------------------------------------------------------------===//
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#ifndef _LIBCPP_ATOMIC_LOCKED
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#define _LIBCPP_ATOMIC_LOCKED
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#include <__mutex_base> // for mutex and lock_guard
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++/**
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ This provides slow-but-usable lock-based atomic access to
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ structures for which atomic lock-free functions are missing.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ This is motivated by the desire for 64b atomic operations
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ on 32b PowerPC architectures.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++**/
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#pragma GCC system_header
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++_LIBCPP_BEGIN_NAMESPACE_STD
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++template <class _Tp, bool = is_integral<_Tp>::value && !is_same<_Tp, bool>::value>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++struct __atomic_mutex_locked // false
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++{
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ mutable _Atomic(_Tp) __a_;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ mutable mutex __lock_;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ typedef lock_guard<mutex> lock_type;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ _Tp& na(void) const { return reinterpret_cast<_Tp&>(__a_); }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ volatile _Tp& na(void) const volatile { return reinterpret_cast<volatile _Tp&>(__a_); }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ _LIBCPP_INLINE_VISIBILITY
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ bool is_lock_free() const volatile _NOEXCEPT
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ {return false;}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ _LIBCPP_INLINE_VISIBILITY
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ bool is_lock_free() const _NOEXCEPT
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ {return false;}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ _LIBCPP_INLINE_VISIBILITY
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ void store(_Tp __d, memory_order = memory_order_seq_cst) volatile _NOEXCEPT
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ { const lock_type g(const_cast<mutex&>(__lock_)); na() = __d; }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ _LIBCPP_INLINE_VISIBILITY
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ void store(_Tp __d, memory_order = memory_order_seq_cst) _NOEXCEPT
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ { const lock_type g(__lock_); na() = __d; }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ _LIBCPP_INLINE_VISIBILITY
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ _Tp load(memory_order = memory_order_seq_cst) const volatile _NOEXCEPT
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ { const lock_type g(const_cast<mutex&>(__lock_)); return na(); }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ _LIBCPP_INLINE_VISIBILITY
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ _Tp load(memory_order = memory_order_seq_cst) const _NOEXCEPT
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ { const lock_type g(__lock_); return na(); }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ _LIBCPP_INLINE_VISIBILITY
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ operator _Tp() const volatile _NOEXCEPT {return load();}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ _LIBCPP_INLINE_VISIBILITY
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ operator _Tp() const _NOEXCEPT {return load();}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ _LIBCPP_INLINE_VISIBILITY
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ _Tp exchange(_Tp __d, memory_order = memory_order_seq_cst) volatile _NOEXCEPT
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ { const lock_type g(const_cast<mutex&>(__lock_));
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ // or use std::swap
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ const _Tp ret = na(); na() = __d; return ret; }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ _LIBCPP_INLINE_VISIBILITY
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ _Tp exchange(_Tp __d, memory_order = memory_order_seq_cst) _NOEXCEPT
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ { const lock_type g(__lock_);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ // or use std::swap
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ const _Tp ret = na(); na() = __d; return ret; }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ _LIBCPP_INLINE_VISIBILITY
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ bool compare_exchange_weak(_Tp& __e, _Tp __d,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ memory_order __s, memory_order __f) volatile _NOEXCEPT
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ { const lock_type g(const_cast<mutex&>(__lock_));
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ if (na() == __e) { na() = __d; return true; }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ else { __e = na(); return false; }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ _LIBCPP_INLINE_VISIBILITY
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ bool compare_exchange_weak(_Tp& __e, _Tp __d,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ memory_order __s, memory_order __f) _NOEXCEPT
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ { const lock_type g(__lock_);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ if (na() == __e) { na() = __d; return true; }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ else { __e = na(); return false; }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ // for now, _weak inditinguishable from _strong
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ _LIBCPP_INLINE_VISIBILITY
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ bool compare_exchange_strong(_Tp& __e, _Tp __d,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ memory_order __s, memory_order __f) volatile _NOEXCEPT
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ {return compare_exchange_weak(__e, __d, __s, __f);}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ _LIBCPP_INLINE_VISIBILITY
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ bool compare_exchange_strong(_Tp& __e, _Tp __d,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ memory_order __s, memory_order __f) _NOEXCEPT
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ {return compare_exchange_weak(__e, __d, __s, __f);}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ _LIBCPP_INLINE_VISIBILITY
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ bool compare_exchange_weak(_Tp& __e, _Tp __d,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ memory_order __m = memory_order_seq_cst) volatile _NOEXCEPT
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ {return compare_exchange_weak(__e, __d, __m, __m);}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ _LIBCPP_INLINE_VISIBILITY
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ bool compare_exchange_weak(_Tp& __e, _Tp __d,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ memory_order __m = memory_order_seq_cst) _NOEXCEPT
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ {return compare_exchange_weak(__e, __d, __m, __m);}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ _LIBCPP_INLINE_VISIBILITY
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ bool compare_exchange_strong(_Tp& __e, _Tp __d,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ memory_order __m = memory_order_seq_cst) volatile _NOEXCEPT
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ {return compare_exchange_strong(__e, __d, __m, __m);}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ _LIBCPP_INLINE_VISIBILITY
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ bool compare_exchange_strong(_Tp& __e, _Tp __d,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ memory_order __m = memory_order_seq_cst) _NOEXCEPT
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ {return compare_exchange_strong(__e, __d, __m, __m);}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ _LIBCPP_INLINE_VISIBILITY
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#ifndef _LIBCPP_HAS_NO_DEFAULTED_FUNCTIONS
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ __atomic_mutex_locked() _NOEXCEPT = default;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#else
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ __atomic_mutex_locked() _NOEXCEPT : __a_() {}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#endif // _LIBCPP_HAS_NO_DEFAULTED_FUNCTIONS
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ _LIBCPP_INLINE_VISIBILITY
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ _LIBCPP_CONSTEXPR __atomic_mutex_locked(_Tp __d) _NOEXCEPT : __a_(__d) {}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#ifndef _LIBCPP_HAS_NO_DELETED_FUNCTIONS
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ __atomic_mutex_locked(const __atomic_mutex_locked&) = delete;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ __atomic_mutex_locked& operator=(const __atomic_mutex_locked&) = delete;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ __atomic_mutex_locked& operator=(const __atomic_mutex_locked&) volatile = delete;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#else // _LIBCPP_HAS_NO_DELETED_FUNCTIONS
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++private:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ __atomic_mutex_locked(const __atomic_mutex_locked&);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ __atomic_mutex_locked& operator=(const __atomic_mutex_locked&);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ __atomic_mutex_locked& operator=(const __atomic_mutex_locked&) volatile;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#endif // _LIBCPP_HAS_NO_DELETED_FUNCTIONS
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++}; // end struct __atomic_mutex_locked
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++// atomic<Integral>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++template <class _Tp>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++struct __atomic_mutex_locked<_Tp, true>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ : public __atomic_mutex_locked<_Tp, false>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++{
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ typedef __atomic_mutex_locked<_Tp, false> __base;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ typedef typename __base::lock_type lock_type;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ using __base::__lock_;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ using __base::na;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ _LIBCPP_INLINE_VISIBILITY
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ __atomic_mutex_locked() _NOEXCEPT _LIBCPP_DEFAULT
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ _LIBCPP_INLINE_VISIBILITY
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ _LIBCPP_CONSTEXPR __atomic_mutex_locked(_Tp __d) _NOEXCEPT : __base(__d) {}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ _LIBCPP_INLINE_VISIBILITY
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ _Tp fetch_add(_Tp __op, memory_order __m = memory_order_seq_cst) volatile _NOEXCEPT
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ { const lock_type g(const_cast<mutex&>(__lock_));
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ const _Tp ret = na(); na() += __op; return ret;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ _LIBCPP_INLINE_VISIBILITY
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ _Tp fetch_add(_Tp __op, memory_order __m = memory_order_seq_cst) _NOEXCEPT
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ { const lock_type g(__lock_);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ const _Tp ret = na(); na() += __op; return ret;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ _LIBCPP_INLINE_VISIBILITY
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ _Tp fetch_sub(_Tp __op, memory_order __m = memory_order_seq_cst) volatile _NOEXCEPT
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ { const lock_type g(const_cast<mutex&>(__lock_));
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ const _Tp ret = na(); na() -= __op; return ret;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ _LIBCPP_INLINE_VISIBILITY
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ _Tp fetch_sub(_Tp __op, memory_order __m = memory_order_seq_cst) _NOEXCEPT
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ { const lock_type g(__lock_);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ const _Tp ret = na(); na() -= __op; return ret;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ _LIBCPP_INLINE_VISIBILITY
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ _Tp fetch_and(_Tp __op, memory_order __m = memory_order_seq_cst) volatile _NOEXCEPT
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ { const lock_type g(const_cast<mutex&>(__lock_));
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ const _Tp ret = na(); na() &= __op; return ret;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ _LIBCPP_INLINE_VISIBILITY
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ _Tp fetch_and(_Tp __op, memory_order __m = memory_order_seq_cst) _NOEXCEPT
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ { const lock_type g(__lock_);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ const _Tp ret = na(); na() &= __op; return ret;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ _LIBCPP_INLINE_VISIBILITY
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ _Tp fetch_or(_Tp __op, memory_order __m = memory_order_seq_cst) volatile _NOEXCEPT
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ { const lock_type g(const_cast<mutex&>(__lock_));
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ const _Tp ret = na(); na() |= __op; return ret;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ _LIBCPP_INLINE_VISIBILITY
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ _Tp fetch_or(_Tp __op, memory_order __m = memory_order_seq_cst) _NOEXCEPT
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ { const lock_type g(__lock_);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ const _Tp ret = na(); na() |= __op; return ret;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ _LIBCPP_INLINE_VISIBILITY
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ _Tp fetch_xor(_Tp __op, memory_order __m = memory_order_seq_cst) volatile _NOEXCEPT
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ { const lock_type g(const_cast<mutex&>(__lock_));
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ const _Tp ret = na(); na() ^= __op; return ret;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ _LIBCPP_INLINE_VISIBILITY
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ _Tp fetch_xor(_Tp __op, memory_order __m = memory_order_seq_cst) _NOEXCEPT
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ { const lock_type g(__lock_);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ const _Tp ret = na(); na() ^= __op; return ret;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ _LIBCPP_INLINE_VISIBILITY
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ _Tp operator++(int) volatile _NOEXCEPT {return fetch_add(_Tp(1));}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ _LIBCPP_INLINE_VISIBILITY
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ _Tp operator++(int) _NOEXCEPT {return fetch_add(_Tp(1));}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ _LIBCPP_INLINE_VISIBILITY
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ _Tp operator--(int) volatile _NOEXCEPT {return fetch_sub(_Tp(1));}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ _LIBCPP_INLINE_VISIBILITY
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ _Tp operator--(int) _NOEXCEPT {return fetch_sub(_Tp(1));}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ _LIBCPP_INLINE_VISIBILITY
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ _Tp operator++() volatile _NOEXCEPT {return fetch_add(_Tp(1)) + _Tp(1);}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ _LIBCPP_INLINE_VISIBILITY
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ _Tp operator++() _NOEXCEPT {return fetch_add(_Tp(1)) + _Tp(1);}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ _LIBCPP_INLINE_VISIBILITY
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ _Tp operator--() volatile _NOEXCEPT {return fetch_sub(_Tp(1)) - _Tp(1);}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ _LIBCPP_INLINE_VISIBILITY
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ _Tp operator--() _NOEXCEPT {return fetch_sub(_Tp(1)) - _Tp(1);}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ _LIBCPP_INLINE_VISIBILITY
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ _Tp operator+=(_Tp __op) volatile _NOEXCEPT {return fetch_add(__op) + __op;}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ _LIBCPP_INLINE_VISIBILITY
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ _Tp operator+=(_Tp __op) _NOEXCEPT {return fetch_add(__op) + __op;}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ _LIBCPP_INLINE_VISIBILITY
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ _Tp operator-=(_Tp __op) volatile _NOEXCEPT {return fetch_sub(__op) - __op;}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ _LIBCPP_INLINE_VISIBILITY
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ _Tp operator-=(_Tp __op) _NOEXCEPT {return fetch_sub(__op) - __op;}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ _LIBCPP_INLINE_VISIBILITY
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ _Tp operator&=(_Tp __op) volatile _NOEXCEPT {return fetch_and(__op) & __op;}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ _LIBCPP_INLINE_VISIBILITY
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ _Tp operator&=(_Tp __op) _NOEXCEPT {return fetch_and(__op) & __op;}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ _LIBCPP_INLINE_VISIBILITY
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ _Tp operator|=(_Tp __op) volatile _NOEXCEPT {return fetch_or(__op) | __op;}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ _LIBCPP_INLINE_VISIBILITY
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ _Tp operator|=(_Tp __op) _NOEXCEPT {return fetch_or(__op) | __op;}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ _LIBCPP_INLINE_VISIBILITY
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ _Tp operator^=(_Tp __op) volatile _NOEXCEPT {return fetch_xor(__op) ^ __op;}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ _LIBCPP_INLINE_VISIBILITY
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ _Tp operator^=(_Tp __op) _NOEXCEPT {return fetch_xor(__op) ^ __op;}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++};
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++_LIBCPP_END_NAMESPACE_STD
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#endif // _LIBCPP_ATOMIC_LOCKED
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/libcxx/include/atomic b/libcxx/include/atomic
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 9c2898653788..c053b2e6ec11 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/libcxx/include/atomic
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/libcxx/include/atomic
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -2785,4 +2785,50 @@ typedef atomic<__libcpp_unsigned_lock_free> atomic_unsigned_lock_free;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ _LIBCPP_END_NAMESPACE_STD
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#if defined(__ppc__) && !defined(__ppc64__)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++// specialize fallback implementation where 64b atomics are missing
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#include <__atomic_locked>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++_LIBCPP_BEGIN_NAMESPACE_STD
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++template <>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++struct atomic<long long> : public __atomic_mutex_locked<long long>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++{
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ typedef long long _Tp;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ typedef __atomic_mutex_locked<_Tp> __base;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ _LIBCPP_INLINE_VISIBILITY
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ atomic() _NOEXCEPT _LIBCPP_DEFAULT
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ _LIBCPP_INLINE_VISIBILITY
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ _LIBCPP_CONSTEXPR atomic(_Tp __d) _NOEXCEPT : __base(__d) {}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ _LIBCPP_INLINE_VISIBILITY
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ _Tp operator=(_Tp __d) volatile _NOEXCEPT
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ {__base::store(__d); return __d;}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ _LIBCPP_INLINE_VISIBILITY
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ _Tp operator=(_Tp __d) _NOEXCEPT
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ {__base::store(__d); return __d;}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++};
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++template <>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++struct atomic<unsigned long long> :
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ public __atomic_mutex_locked<unsigned long long>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++{
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ typedef unsigned long long _Tp;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ typedef __atomic_mutex_locked<_Tp> __base;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ _LIBCPP_INLINE_VISIBILITY
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ atomic() _NOEXCEPT _LIBCPP_DEFAULT
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ _LIBCPP_INLINE_VISIBILITY
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ _LIBCPP_CONSTEXPR atomic(_Tp __d) _NOEXCEPT : __base(__d) {}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ _LIBCPP_INLINE_VISIBILITY
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ _Tp operator=(_Tp __d) volatile _NOEXCEPT
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ {__base::store(__d); return __d;}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ _LIBCPP_INLINE_VISIBILITY
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ _Tp operator=(_Tp __d) _NOEXCEPT
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ {__base::store(__d); return __d;}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++};
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++_LIBCPP_END_NAMESPACE_STD
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#endif // defined(__ppc__) && !defined(__ppc64__)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #endif // _LIBCPP_ATOMIC
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/lang/libcxx-powerpc/files/CMakeLists.txt b/lang/libcxx-powerpc/files/CMakeLists.txt
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 00000000000..1a7660d4725
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/lang/libcxx-powerpc/files/CMakeLists.txt
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,4 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+cmake_minimum_required(VERSION 3.9.4)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+project(Runtimes C CXX ASM)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+add_subdirectory(libcxxabi)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+add_subdirectory(libcxx)
</span></pre><pre style='margin:0'>
</pre>