Skip to content

[libc++] Stop copying headers to the build directory #115380

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Conversation

arichardson
Copy link
Member

This was needed before #115077
since the compiler-rt test build made assumptions about the build
layout of libc++ and libc++abi, but now they link against a local
installation of these libraries so we no longer need this workaround.

@arichardson arichardson requested a review from a team as a code owner November 7, 2024 22:21
@llvmbot llvmbot added the libc++ libc++ C++ Standard Library. Not GNU libstdc++. Not libc++abi. label Nov 7, 2024
@llvmbot
Copy link
Member

llvmbot commented Nov 7, 2024

@llvm/pr-subscribers-lldb

@llvm/pr-subscribers-libcxx

Author: Alexander Richardson (arichardson)

Changes

This was needed before #115077
since the compiler-rt test build made assumptions about the build
layout of libc++ and libc++abi, but now they link against a local
installation of these libraries so we no longer need this workaround.


Full diff: https://github.com/llvm/llvm-project/pull/115380.diff

1 Files Affected:

  • (modified) libcxx/CMakeLists.txt (+4-7)
diff --git a/libcxx/CMakeLists.txt b/libcxx/CMakeLists.txt
index d699135774ee0b..04596fccdfc923 100644
--- a/libcxx/CMakeLists.txt
+++ b/libcxx/CMakeLists.txt
@@ -414,15 +414,16 @@ set(LIBCXX_INSTALL_MODULES_DIR "share/libc++/v1" CACHE STRING
 set(LIBCXX_SHARED_OUTPUT_NAME "c++" CACHE STRING "Output name for the shared libc++ runtime library.")
 set(LIBCXX_STATIC_OUTPUT_NAME "c++" CACHE STRING "Output name for the static libc++ runtime library.")
 
+set(LIBCXX_GENERATED_INCLUDE_DIR "${LIBCXX_BINARY_DIR}/include/c++/v1")
+set(LIBCXX_GENERATED_MODULE_DIR "${LIBCXX_BINARY_DIR}/modules/c++/v1")
+
 if(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR AND NOT APPLE)
   set(LIBCXX_TARGET_SUBDIR ${LLVM_DEFAULT_TARGET_TRIPLE})
   if(LIBCXX_LIBDIR_SUBDIR)
     string(APPEND LIBCXX_TARGET_SUBDIR /${LIBCXX_LIBDIR_SUBDIR})
   endif()
   set(LIBCXX_LIBRARY_DIR ${LLVM_LIBRARY_OUTPUT_INTDIR}/${LIBCXX_TARGET_SUBDIR})
-  set(LIBCXX_GENERATED_INCLUDE_DIR "${LLVM_BINARY_DIR}/include/c++/v1")
-  set(LIBCXX_GENERATED_MODULE_DIR "${LLVM_BINARY_DIR}/modules/c++/v1")
-  set(LIBCXX_GENERATED_INCLUDE_TARGET_DIR "${LLVM_BINARY_DIR}/include/${LIBCXX_TARGET_SUBDIR}/c++/v1")
+  set(LIBCXX_GENERATED_INCLUDE_TARGET_DIR "${LIBCXX_BINARY_DIR}/include/${LIBCXX_TARGET_SUBDIR}/c++/v1")
   set(LIBCXX_INSTALL_LIBRARY_DIR lib${LLVM_LIBDIR_SUFFIX}/${LIBCXX_TARGET_SUBDIR} CACHE STRING
       "Path where built libc++ libraries should be installed.")
   set(LIBCXX_INSTALL_INCLUDE_TARGET_DIR "${CMAKE_INSTALL_INCLUDEDIR}/${LIBCXX_TARGET_SUBDIR}/c++/v1" CACHE STRING
@@ -431,12 +432,8 @@ if(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR AND NOT APPLE)
 else()
   if(LLVM_LIBRARY_OUTPUT_INTDIR)
     set(LIBCXX_LIBRARY_DIR ${LLVM_LIBRARY_OUTPUT_INTDIR})
-    set(LIBCXX_GENERATED_INCLUDE_DIR "${LLVM_BINARY_DIR}/include/c++/v1")
-    set(LIBCXX_GENERATED_MODULE_DIR "${LLVM_BINARY_DIR}/modules/c++/v1")
   else()
     set(LIBCXX_LIBRARY_DIR ${CMAKE_BINARY_DIR}/lib${LIBCXX_LIBDIR_SUFFIX})
-    set(LIBCXX_GENERATED_INCLUDE_DIR "${CMAKE_BINARY_DIR}/include/c++/v1")
-    set(LIBCXX_GENERATED_MODULE_DIR "${CMAKE_BINARY_DIR}/modules/c++/v1")
   endif()
   set(LIBCXX_GENERATED_INCLUDE_TARGET_DIR "${LIBCXX_GENERATED_INCLUDE_DIR}")
   set(LIBCXX_INSTALL_LIBRARY_DIR lib${LIBCXX_LIBDIR_SUFFIX} CACHE STRING

@arichardson arichardson requested a review from ldionne November 7, 2024 22:29
@arichardson arichardson changed the base branch from main to users/arichardson/spr/main.libc-stop-copying-headers-to-the-build-directory November 7, 2024 22:47
@arichardson arichardson requested a review from a team as a code owner November 7, 2024 22:47
Copy link
Member

@ldionne ldionne left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This looks great, this is a really nice cleanup. Thank you!

Let's just wait until we know what to do with the C++03 CMakeLists but I'm OK with merging this once that's settled, if CI is green.

@arichardson
Copy link
Member Author

Thanks for the review - will merge once #115387 has landed and CI is happy.

@arichardson
Copy link
Member Author

It looks like the lldb test suite depends on these files being copied as well, so I've updated it to depend on the runtimes-test-depends target to ensure the libc++ headers have been installed to the fake prefix in the build dir first. Hardcoding these paths is unfortunate but I couldn't see an obviously better solution. This dates back to https://reviews.llvm.org/D133973

Created using spr 1.3.6-beta.1
Created using spr 1.3.6-beta.1

[skip ci]
@ldionne ldionne force-pushed the users/arichardson/spr/libc-stop-copying-headers-to-the-build-directory branch from a232598 to d1d0ff5 Compare January 13, 2025 18:58
@ldionne ldionne added the pending-ci Merging the PR is only pending completion of CI label Jan 13, 2025
@ldionne
Copy link
Member

ldionne commented Jan 14, 2025

A bunch of CI jobs were triggered because of my faulty rebase, but the necessary jobs seems to have passed. What's still pending are some release jobs which normally don't run on PRs, and the documentation job which fails for an unrelated reason (clang-tools-extra). Merging.

@ldionne
Copy link
Member

ldionne commented Jan 14, 2025

LLDB, please ping us if you encounter problems after we merge this patch.

@ldionne ldionne merged commit 428c876 into main Jan 14, 2025
108 of 117 checks passed
@ldionne ldionne deleted the users/arichardson/spr/libc-stop-copying-headers-to-the-build-directory branch January 14, 2025 13:40
@llvm-ci
Copy link
Collaborator

llvm-ci commented Jan 14, 2025

LLVM Buildbot has detected a new failure on builder sanitizer-aarch64-linux running on sanitizer-buildbot8 while building libcxx,libcxxabi,lldb at step 2 "annotate".

Full details are available at: https://lab.llvm.org/buildbot/#/builders/51/builds/9056

Here is the relevant piece of the build log for the reference
Step 2 (annotate) failure: 'python ../sanitizer_buildbot/sanitizers/zorg/buildbot/builders/sanitizers/buildbot_selector.py' (failure)
...
-- Performing Test HAVE_CXX_ATOMICS_WITH_LIB - Failed
-- Configuring incomplete, errors occurred!
CMake Error at cmake/modules/CheckAtomic.cmake:56 (message):
  Host compiler must support std::atomic!
Call Stack (most recent call first):
  cmake/config-ix.cmake:418 (include)
  CMakeLists.txt:973 (include)


[3005/3065] Building CXX object compiler-rt/lib/asan/CMakeFiles/RTAsan_dynamic.aarch64.dir/asan_interceptors.cpp.o
FAILED: compiler-rt/lib/sanitizer_common/symbolizer/RTSanitizerCommonSymbolizerInternal.aarch64.o /home/b/sanitizer-aarch64-linux/build/build_default/runtimes/runtimes-bins/compiler-rt/lib/sanitizer_common/symbolizer/RTSanitizerCommonSymbolizerInternal.aarch64.o 
cd /home/b/sanitizer-aarch64-linux/build/build_default/runtimes/runtimes-bins/compiler-rt/lib/sanitizer_common/symbolizer/RTSanitizerCommonSymbolizerInternal.aarch64 && FLAGS=-march=armv8-a CLANG=/home/b/sanitizer-aarch64-linux/build/build_default/./bin/clang /home/b/sanitizer-aarch64-linux/build/llvm-project/compiler-rt/lib/sanitizer_common/symbolizer/scripts/build_symbolizer.sh /home/b/sanitizer-aarch64-linux/build/build_default/runtimes/runtimes-bins/compiler-rt/lib/sanitizer_common/symbolizer/RTSanitizerCommonSymbolizerInternal.aarch64.o
ninja: build stopped: subcommand failed.
FAILED: runtimes/runtimes-stamps/runtimes-build /home/b/sanitizer-aarch64-linux/build/build_default/runtimes/runtimes-stamps/runtimes-build 
cd /home/b/sanitizer-aarch64-linux/build/build_default/runtimes/runtimes-bins && /usr/bin/cmake --build .
ninja: build stopped: subcommand failed.

How to reproduce locally: https://github.com/google/sanitizers/wiki/SanitizerBotReproduceBuild

@@@STEP_FAILURE@@@
@@@BUILD_STEP test compiler-rt symbolizer@@@
ninja: Entering directory `build_default'
[0/5] Performing build step for 'builtins'
ninja: no work to do.
[1/5] No install step for 'builtins'
[3/5] Completed 'builtins'
[3/5] Performing configure step for 'runtimes'
Not searching for unused variables given on the command line.
loading initial cache file /home/b/sanitizer-aarch64-linux/build/build_default/projects/runtimes/tmp/runtimes-cache-Release.cmake
-- Performing bootstrapping runtimes build.
CMake Deprecation Warning at /home/b/sanitizer-aarch64-linux/build/llvm-project/cmake/Modules/CMakePolicy.cmake:6 (cmake_policy):
  The OLD behavior for policy CMP0116 will be removed from a future version
  of CMake.

  The cmake-policies(7) manual explains that the OLD behaviors of all
  policies are deprecated and that a policy should be set to OLD only under
  specific short-term circumstances.  Projects should be ported to the NEW
  behavior and not rely on setting a policy to OLD.
Call Stack (most recent call first):
  CMakeLists.txt:18 (include)


-- Building with -fPIC
-- LLVM host triple: aarch64-unknown-linux-gnu
-- LLVM default target triple: aarch64-unknown-linux-gnu
-- Using libunwind testing configuration: /home/b/sanitizer-aarch64-linux/build/llvm-project/libunwind/test/configs/llvm-libunwind-shared.cfg.in
-- Failed to locate sphinx-build executable (missing: SPHINX_EXECUTABLE) 
-- Using libc++abi testing configuration: /home/b/sanitizer-aarch64-linux/build/llvm-project/libcxxabi/test/configs/llvm-libc++abi-shared.cfg.in
-- Using libc++ testing configuration: /home/b/sanitizer-aarch64-linux/build/llvm-project/libcxx/test/configs/llvm-libc++-shared.cfg.in
Step 9 (build compiler-rt symbolizer) failure: build compiler-rt symbolizer (failure)
...
-- Looking for __atomic_fetch_add_4 in atomic - found
-- Performing Test HAVE_CXX_ATOMICS_WITH_LIB
-- Performing Test HAVE_CXX_ATOMICS_WITH_LIB - Failed
-- Configuring incomplete, errors occurred!
CMake Error at cmake/modules/CheckAtomic.cmake:56 (message):
  Host compiler must support std::atomic!
Call Stack (most recent call first):
  cmake/config-ix.cmake:418 (include)
  CMakeLists.txt:973 (include)
[3005/3065] Building CXX object compiler-rt/lib/asan/CMakeFiles/RTAsan_dynamic.aarch64.dir/asan_interceptors.cpp.o
FAILED: compiler-rt/lib/sanitizer_common/symbolizer/RTSanitizerCommonSymbolizerInternal.aarch64.o /home/b/sanitizer-aarch64-linux/build/build_default/runtimes/runtimes-bins/compiler-rt/lib/sanitizer_common/symbolizer/RTSanitizerCommonSymbolizerInternal.aarch64.o 
cd /home/b/sanitizer-aarch64-linux/build/build_default/runtimes/runtimes-bins/compiler-rt/lib/sanitizer_common/symbolizer/RTSanitizerCommonSymbolizerInternal.aarch64 && FLAGS=-march=armv8-a CLANG=/home/b/sanitizer-aarch64-linux/build/build_default/./bin/clang /home/b/sanitizer-aarch64-linux/build/llvm-project/compiler-rt/lib/sanitizer_common/symbolizer/scripts/build_symbolizer.sh /home/b/sanitizer-aarch64-linux/build/build_default/runtimes/runtimes-bins/compiler-rt/lib/sanitizer_common/symbolizer/RTSanitizerCommonSymbolizerInternal.aarch64.o
ninja: build stopped: subcommand failed.
FAILED: runtimes/runtimes-stamps/runtimes-build /home/b/sanitizer-aarch64-linux/build/build_default/runtimes/runtimes-stamps/runtimes-build 
cd /home/b/sanitizer-aarch64-linux/build/build_default/runtimes/runtimes-bins && /usr/bin/cmake --build .
ninja: build stopped: subcommand failed.

How to reproduce locally: https://github.com/google/sanitizers/wiki/SanitizerBotReproduceBuild
Step 10 (test compiler-rt symbolizer) failure: test compiler-rt symbolizer (failure)
...
-- Looking for __atomic_fetch_add_4 in atomic - found
-- Performing Test HAVE_CXX_ATOMICS_WITH_LIB
-- Performing Test HAVE_CXX_ATOMICS_WITH_LIB - Failed
CMake Error at cmake/modules/CheckAtomic.cmake:56 (message):
  Host compiler must support std::atomic!
Call Stack (most recent call first):
  cmake/config-ix.cmake:418 (include)
  CMakeLists.txt:973 (include)
-- Configuring incomplete, errors occurred!
[54/225] Generating Rtsan-aarch64-Test
FAILED: compiler-rt/lib/sanitizer_common/symbolizer/RTSanitizerCommonSymbolizerInternal.aarch64.o /home/b/sanitizer-aarch64-linux/build/build_default/runtimes/runtimes-bins/compiler-rt/lib/sanitizer_common/symbolizer/RTSanitizerCommonSymbolizerInternal.aarch64.o 
cd /home/b/sanitizer-aarch64-linux/build/build_default/runtimes/runtimes-bins/compiler-rt/lib/sanitizer_common/symbolizer/RTSanitizerCommonSymbolizerInternal.aarch64 && FLAGS=-march=armv8-a CLANG=/home/b/sanitizer-aarch64-linux/build/build_default/./bin/clang /home/b/sanitizer-aarch64-linux/build/llvm-project/compiler-rt/lib/sanitizer_common/symbolizer/scripts/build_symbolizer.sh /home/b/sanitizer-aarch64-linux/build/build_default/runtimes/runtimes-bins/compiler-rt/lib/sanitizer_common/symbolizer/RTSanitizerCommonSymbolizerInternal.aarch64.o
ninja: build stopped: subcommand failed.
FAILED: runtimes/CMakeFiles/check-compiler-rt /home/b/sanitizer-aarch64-linux/build/build_default/runtimes/CMakeFiles/check-compiler-rt 
cd /home/b/sanitizer-aarch64-linux/build/build_default/runtimes/runtimes-bins && /usr/bin/cmake --build /home/b/sanitizer-aarch64-linux/build/build_default/runtimes/runtimes-bins/ --target check-compiler-rt --config Release
ninja: build stopped: subcommand failed.

How to reproduce locally: https://github.com/google/sanitizers/wiki/SanitizerBotReproduceBuild

@slydiman
Copy link
Contributor

LLDB, please ping us if you encounter problems after we merge this patch.

https://lab.llvm.org/buildbot/#/builders/195/builds/3458

https://lab.llvm.org/buildbot/#/builders/197/builds/627

@Prabhuk
Copy link
Contributor

Prabhuk commented Jan 14, 2025

@kstoimenov
Copy link
Contributor

@arichardson this was reverted due to sanitizer build failures: https://lab.llvm.org/buildbot/#/builders/51/builds/9056

@arichardson
Copy link
Member Author

I realize there are some issues with this and while it's a nice cleanup, I don't have the time right now to deal with the potential fallout (build directory can't be used as a cross-compiler out of the box).

@ldionne
Copy link
Member

ldionne commented Jan 14, 2025

@kstoimenov @vitalybuka Could you folks show us how the sanitizer builds you run are different from the ones we already run in our CI pipeline? It would be important to align both since we often run into issues with your post-commit CI jobs failing but our pre-commit CI not catching it.

@vitalybuka
Copy link
Collaborator

@kstoimenov @vitalybuka Could you folks show us how the sanitizer builds you run are different from the ones we already run in our CI pipeline? It would be important to align both since we often run into issues with your post-commit CI jobs failing but our pre-commit CI not catching it.

We have many of them:

  1. This one is from https://github.com/llvm/llvm-project/blob/main/compiler-rt/lib/sanitizer_common/symbolizer/scripts/build_symbolizer.sh, which is strange build for cmake -DCOMPILER_RT_ENABLE_INTERNAL_SYMBOLIZER=ON
    This build is strange, but I don't remember it breaks libc++ before. I don't think it worse having it on pre-submit.

  2. Then a bunch of https://lab.llvm.org/buildbot/#/builders/sanitizer-{x86_64,aarch64}-linux-bootstrap-{asan,msan,ubsan,hwasan}/

/usr/bin/cmake -DLLVM_APPEND_VC_REV=OFF -GNinja -DCMAKE_BUILD_TYPE=Release -DLLVM_CCACHE_BUILD=ON -DLLVM_USE_LINKER=lld -DLLVM_ENABLE_ASSERTIONS=ON -DCMAKE_C_COMPILER=/home/b/sanitizer-x86_64-linux-bootstrap-ubsan/build/llvm_build0/bin/clang -DCMAKE_CXX_COMPILER=/home/b/sanitizer-x86_64-linux-bootstrap-ubsan/build/llvm_build0/bin/clang++ -DLIBCXXABI_USE_LLVM_UNWINDER=OFF -DCMAKE_INSTALL_PREFIX=/home/b/sanitizer-x86_64-linux-bootstrap-ubsan/build/libcxx_install_ubsan '-DLLVM_ENABLE_RUNTIMES=libcxx;libcxxabi' -DLIBCXX_TEST_PARAMS=long_tests=False -DLIBCXX_INCLUDE_BENCHMARKS=OFF -DLLVM_USE_SANITIZER=Undefined '-DCMAKE_C_FLAGS=-fsanitize=undefined -fno-sanitize-recover=all   -fno-sanitize=vptr' '-DCMAKE_CXX_FLAGS=-fsanitize=undefined -fno-sanitize-recover=all   -fno-sanitize=vptr' /home/b/sanitizer-x86_64-linux-bootstrap-ubsan/build/llvm-project/llvm/../runtimes--

These must be very close to what libc++ have in CI.
Main diff is that we repeat sanitizers in -DCMAKE_CXX_FLAGS.

The most important part of this build is instrumented libc++ used for 2nd stage clang build. But it's very slow. I don't expect we can afford this on pre-commit CI.

  1. For some sanitizers there is nested libcxx build https://github.com/search?q=repo%3Allvm%2Fllvm-project%20add_custom_libcxx&type=code
    correctly configured "check-compiler-rt" should cover them. I suspect you don't have these on pre-commit, maybe it worse having them.

@ldionne
Copy link
Member

ldionne commented Jan 15, 2025

IIUC, the build that encountered issues in this patch (in the comment above) is a flavour of (2), right? That seems surprising to me though since we also use the same flags when configuring libc++: https://github.com/llvm/llvm-project/blob/main/libcxx/CMakeLists.txt#L596

So the difference would be that you folks are building libc++ instrumented via the bootstrapping build instead of the "runtimes" build that we use for the rest of libc++ CI. I also fail to understand why our own bootstrapping build pre-commit CI didn't trip this wire.

@arichardson
Copy link
Member Author

IIUC, the build that encountered issues in this patch (in the comment above) is a flavour of (2), right? That seems surprising to me though since we also use the same flags when configuring libc++: https://github.com/llvm/llvm-project/blob/main/libcxx/CMakeLists.txt#L596

So the difference would be that you folks are building libc++ instrumented via the bootstrapping build instead of the "runtimes" build that we use for the rest of libc++ CI. I also fail to understand why our own bootstrapping build pre-commit CI didn't trip this wire.

I think the problem is that some of the buildbots use the compiler from the stage1 build directory as the compiler for the stage2 build. This happens to pick up the correct libc++ if the headers are in the build directory, but without the symlinks it would need to be installed first to another directory and then use the stage1 install as the compiler for stage 2.

@vitalybuka
Copy link
Collaborator

IIUC, the build that encountered issues in this patch (in the comment above) is a flavour of (2), right? That seems surprising to me though since we also use the same flags when configuring libc++: https://github.com/llvm/llvm-project/blob/main/libcxx/CMakeLists.txt#L596

So the difference would be that you folks are building libc++ instrumented via the bootstrapping build instead of the "runtimes" build that we use for the rest of libc++ CI.
I also fail to understand why our own bootstrapping build pre-commit CI didn't trip this wire.

it's no.1
The difference Is that https://github.com/llvm/llvm-project/blob/main/compiler-rt/lib/sanitizer_common/symbolizer/scripts/build_symbolizer.sh builds build libc++ into IR full LTO, with minimal features as possible to be able to build LLVM symbolizer.

@arichardson
Copy link
Member Author

https://github.com/llvm/llvm-project/blob/main/compiler-rt/lib/sanitizer_common/symbolizer/scripts/build_symbolizer.sh

It looks like https://github.com/llvm/llvm-project/blob/main/compiler-rt/lib/sanitizer_common/symbolizer/scripts/build_symbolizer.sh tries to run ninja cxx cxxabi and then use the build dir of that build for the build of LLVM. I think runnning ninja install-cxx install-cxxabi and using the install dir as the destination might fix it?

@vitalybuka
Copy link
Collaborator

https://github.com/llvm/llvm-project/blob/main/compiler-rt/lib/sanitizer_common/symbolizer/scripts/build_symbolizer.sh

It looks like https://github.com/llvm/llvm-project/blob/main/compiler-rt/lib/sanitizer_common/symbolizer/scripts/build_symbolizer.sh tries to run ninja cxx cxxabi and then use the build dir of that build for the build of LLVM. I think runnning ninja install-cxx install-cxxabi and using the install dir as the destination might fix it?

Very likely. I can take a look, unless you are already there.

@arichardson
Copy link
Member Author

https://github.com/llvm/llvm-project/blob/main/compiler-rt/lib/sanitizer_common/symbolizer/scripts/build_symbolizer.sh

It looks like https://github.com/llvm/llvm-project/blob/main/compiler-rt/lib/sanitizer_common/symbolizer/scripts/build_symbolizer.sh tries to run ninja cxx cxxabi and then use the build dir of that build for the build of LLVM. I think runnning ninja install-cxx install-cxxabi and using the install dir as the destination might fix it?

Very likely. I can take a look, unless you are already there.

#123104 should hopefully fix it.

@arichardson
Copy link
Member Author

Sanitizer build has been fixed but I know this will also break the Fuchsia build bots if we reland it (see #115379 (comment)) - not sure if there is any plan to update those builders to use installed toolchains for the multi-stage build.

@slydiman
Copy link
Contributor

Sanitizer build has been fixed but I know this will also break the Fuchsia build bots if we reland it (see #115379 (comment)) - not sure if there is any plan to update those builders to use installed toolchains for the multi-stage build.

Have you seen LLDB failures? #115380 (comment)
These buildbots build Linux Aarch64 code on Linux x86 and Windows x86 hosts.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
libc++ libc++ C++ Standard Library. Not GNU libstdc++. Not libc++abi. lldb pending-ci Merging the PR is only pending completion of CI
Projects
None yet
Development

Successfully merging this pull request may close these issues.

9 participants