diff --git a/clang/lib/Analysis/FlowSensitive/DataflowAnalysisContext.cpp b/clang/lib/Analysis/FlowSensitive/DataflowAnalysisContext.cpp --- a/clang/lib/Analysis/FlowSensitive/DataflowAnalysisContext.cpp +++ b/clang/lib/Analysis/FlowSensitive/DataflowAnalysisContext.cpp @@ -114,7 +114,7 @@ return ForkToken; } -Atom +Atom DataflowAnalysisContext::joinFlowConditions(Atom FirstToken, Atom SecondToken) { Atom Token = arena().makeFlowConditionToken(); diff --git a/libcxx/utils/ci/buildkite-pipeline-clang.yml b/clang/utils/ci/buildkite-pipeline.yml rename from libcxx/utils/ci/buildkite-pipeline-clang.yml rename to clang/utils/ci/buildkite-pipeline.yml --- a/libcxx/utils/ci/buildkite-pipeline-clang.yml +++ b/clang/utils/ci/buildkite-pipeline.yml @@ -19,7 +19,7 @@ steps: - label: "Format" commands: - - "! grep -rnI '[[:blank:]]$' clang/lib clang/include clang/docs || false" + - "clang/utils/ci/run-buildbot check-format" agents: queue: "libcxx-builders" @@ -34,15 +34,7 @@ - label: "Building clang" commands: - - "mkdir install" - # We use Release here to avoid including debug information. Otherwise, the clang binary is very large, which - # is problematic because we need to upload the artifacts for other jobs to use. This may seem like nothing, - # but with the number of jobs we run daily, this can result in thousands of GB of network I/O. - - "cmake -S llvm -B build -G Ninja -DCMAKE_CXX_COMPILER_LAUNCHER=\"ccache\" -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=install -DLLVM_ENABLE_PROJECTS=\"clang;compiler-rt\"" - - "ninja -C build install-clang install-clang-resource-headers" - - "ccache -s" - - "tar -cJvf install.tar.xz install/" - - "buildkite-agent artifact upload --debug install.tar.xz" + - "clang/utils/ci/run-buildbot build-clang" env: CC: "clang-${LLVM_HEAD_VERSION}" CXX: "clang++-${LLVM_HEAD_VERSION}" @@ -59,12 +51,7 @@ - label: "C++03" commands: - - "buildkite-agent artifact download install.tar.xz ." - - "tar -xvf install.tar.xz" - - "export CC=$(pwd)/install/bin/clang" - - "export CXX=$(pwd)/install/bin/clang++" - - "chmod +x install/bin/clang install/bin/clang++" - - "libcxx/utils/ci/run-buildbot generic-cxx03" + - "clang/utils/ci/run-buildbot generic-cxx03" artifact_paths: - "**/test-results.xml" - "**/crash_diagnostics/*" @@ -82,12 +69,7 @@ - label: "C++26" commands: - - "buildkite-agent artifact download install.tar.xz ." - - "tar -xvf install.tar.xz" - - "export CC=$(pwd)/install/bin/clang" - - "export CXX=$(pwd)/install/bin/clang++" - - "chmod +x install/bin/clang install/bin/clang++" - - "libcxx/utils/ci/run-buildbot generic-cxx26" + - "clang/utils/ci/run-buildbot generic-cxx26" artifact_paths: - "**/test-results.xml" - "**/crash_diagnostics/*" @@ -105,12 +87,7 @@ - label: "Modules" commands: - - "buildkite-agent artifact download install.tar.xz ." - - "tar -xvf install.tar.xz" - - "export CC=$(pwd)/install/bin/clang" - - "export CXX=$(pwd)/install/bin/clang++" - - "chmod +x install/bin/clang install/bin/clang++" - - "libcxx/utils/ci/run-buildbot generic-modules" + - "clang/utils/ci/run-buildbot generic-modules" artifact_paths: - "**/test-results.xml" - "**/crash_diagnostics/*" diff --git a/clang/utils/ci/run-buildbot b/clang/utils/ci/run-buildbot new file mode 100755 --- /dev/null +++ b/clang/utils/ci/run-buildbot @@ -0,0 +1,128 @@ +#!/usr/bin/env bash +#===----------------------------------------------------------------------===## +# +# Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +# See https://llvm.org/LICENSE.txt for license information. +# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +# +#===----------------------------------------------------------------------===## + +set -ex +set -o pipefail +unset LANG +unset LC_ALL +unset LC_COLLATE + +PROGNAME="$(basename "${0}")" + +function usage() { +cat < + +[-h|--help] Display this help and exit. + +--llvm-root Path to the root of the LLVM monorepo. By default, we try + to figure it out based on the current working directory. + +--build-dir The directory to use for building the library. By default, + this is '/build/'. +EOF +} + +if [[ $# == 0 ]]; then + usage + exit 0 +fi + +while [[ $# -gt 0 ]]; do + case ${1} in + -h|--help) + usage + exit 0 + ;; + --llvm-root) + MONOREPO_ROOT="${2}" + shift; shift + ;; + --build-dir) + BUILD_DIR="${2}" + shift; shift + ;; + *) + BUILDER="${1}" + shift + ;; + esac +done + +MONOREPO_ROOT="${MONOREPO_ROOT:="$(git rev-parse --show-toplevel)"}" +BUILD_DIR="${BUILD_DIR:=${MONOREPO_ROOT}/build/${BUILDER}}" +INSTALL_DIR="${BUILD_DIR}/install" + +# Print the version of a few tools to aid diagnostics in some cases +cmake --version +ninja --version + +case "${BUILDER}" in +check-format) + ! grep -rnI '[[:blank:]]$' clang/lib clang/include clang/docs +;; +build-clang) + mkdir install + # We use Release here to avoid including debug information. Otherwise, the + # clang binary is very large, which is problematic because we need to upload + # the artifacts for other jobs to use. This may seem like nothing, but with + # the number of jobs we run daily, this can result in thousands of GB of + # network I/O. + cmake \ + -S llvm \ + -B build \ + -G Ninja \ + -DCMAKE_CXX_COMPILER_LAUNCHER="ccache" \ + -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_INSTALL_PREFIX=install \ + -DLLVM_ENABLE_PROJECTS="clang;compiler-rt" \ + + ninja -C build install-clang install-clang-resource-headers + ccache -s + tar -cJvf install.tar.xz install/ + buildkite-agent artifact upload --debug install.tar.xz +;; +generic-cxx03) + buildkite-agent artifact download install.tar.xz . + tar -xvf install.tar.xz + export CC=$(pwd)/install/bin/clang + export CXX=$(pwd)/install/bin/clang++ + chmod +x install/bin/clang install/bin/clang++ + libcxx/utils/ci/run-buildbot generic-cxx03 +;; +generic-cxx26) + buildkite-agent artifact download install.tar.xz . + tar -xvf install.tar.xz + export CC=$(pwd)/install/bin/clang + export CXX=$(pwd)/install/bin/clang++ + chmod +x install/bin/clang install/bin/clang++ + libcxx/utils/ci/run-buildbot generic-cxx26 +;; +generic-modules) + buildkite-agent artifact download install.tar.xz . + tar -xvf install.tar.xz + export CC=$(pwd)/install/bin/clang + export CXX=$(pwd)/install/bin/clang++ + chmod +x install/bin/clang install/bin/clang++ + libcxx/utils/ci/run-buildbot generic-modules +;; +################################################################# +# Insert vendor-specific internal configurations below. +# +# This allows vendors to extend this file with their own internal +# configurations without running into merge conflicts with upstream. +################################################################# + +################################################################# +*) + echo "${BUILDER} is not a known configuration" + exit 1 +;; +esac diff --git a/libcxx/utils/ci/generate-buildkite-pipeline b/libcxx/utils/ci/generate-buildkite-pipeline --- a/libcxx/utils/ci/generate-buildkite-pipeline +++ b/libcxx/utils/ci/generate-buildkite-pipeline @@ -11,16 +11,4 @@ # This script generates the appropriate libc++ CI pipeline based on which project(s) were changed. # -if git diff --name-only HEAD~1 | grep -q -E "^libcxx/|^libcxxabi/|^libunwind/|^runtimes/|^cmake/"; then - LIBCXX_CHANGED=true -fi - -if git diff --name-only HEAD~1 | grep -q -E "^clang/"; then - CLANG_CHANGED=true -fi - -if [[ "${CLANG_CHANGED}" == "true" && "${LIBCXX_CHANGED}" != "true" ]]; then - cat libcxx/utils/ci/buildkite-pipeline-clang.yml -else - cat libcxx/utils/ci/buildkite-pipeline.yml -fi +cat clang/utils/ci/buildkite-pipeline.yml