Skip to content

Commit

Permalink
fix clang-format for recent PRs and new rules (#212)
Browse files Browse the repository at this point in the history
Note that LLVM does not support proper version matching, since the
attempt to use it from cmake apparently failed: https://reviews.llvm.org/D99451.
  • Loading branch information
vtjnash authored Oct 17, 2024
1 parent 8c31246 commit 9618d55
Show file tree
Hide file tree
Showing 5 changed files with 147 additions and 142 deletions.
258 changes: 129 additions & 129 deletions .github/workflows/main.yml
Original file line number Diff line number Diff line change
@@ -1,129 +1,129 @@
name: Build and Test

on:
workflow_dispatch:
pull_request:
push:
branches:
- "master"

permissions:
contents: read

# This allows a subsequently queued workflow run to interrupt previous runs
concurrency:
group: '${{ github.workflow }} @ ${{ github.ref_protected && github.run_id || github.event.pull_request.number || github.ref }}'
cancel-in-progress: true

jobs:
build:
strategy:
matrix:
include:
- os: ubuntu-latest
- os: macos-latest
runs-on: ${{ matrix.os }}
steps:
- name: Checkout
uses: actions/checkout@v3

- name: Setup LLVM (Linux)
if: ${{ runner.os == 'Linux' }}
run: |
wget https://apt.llvm.org/llvm.sh
chmod +x llvm.sh
sudo ./llvm.sh 19 all
sudo update-alternatives --install /usr/bin/clang++ clang++ /usr/bin/clang++-19 160
sudo update-alternatives --install /usr/bin/clang clang /usr/bin/clang-19 160
sudo update-alternatives --install /usr/bin/lli lli /usr/bin/lli-19 160
sudo update-alternatives --install /usr/bin/clang-format clang-format /usr/bin/clang-format-19 160
- name: Setup LLVM and GCC (MacOS)
if: ${{ runner.os == 'macOS' }}
run: |
brew install llvm@19
echo "$(brew --prefix llvm@19)/bin" >> $GITHUB_PATH
echo "CC=$(brew --prefix llvm@19)/bin/clang" >> $GITHUB_ENV
echo "CXX=$(brew --prefix llvm@19)/bin/clang++" >> $GITHUB_ENV
cd /usr/local/bin
ln -s gcc-11 gcc
- name: Update Python
uses: actions/setup-python@v4
with:
python-version: '3.x'

- name: Install PyTest
run: |
python -m pip install --upgrade pip
pip install pytest pytest-xdist
- name: Check formatting
if: ${{ runner.os == 'Linux' }}
run: find . -iname '*.h' -o -iname '*.cpp' | xargs clang-format -Werror --dry-run --style=LLVM --verbose

- name: Build
run: |
mkdir build
cmake -S . -B build -DLLVM_INCLUDE_TESTS=On -DLLVM_DIR=/usr/lib/llvm-19/cmake
cmake --build build
- name: Test
run: |
gcc --version
pytest -n 16
# The llvm-dev package doesn't exist for Windows, so we need to build LLVM ourselves.
build-windows:
runs-on: windows-latest
env:
SCCACHE_GHA_ENABLED: "true"
steps:
- name: Checkout LLVM
id: checkout-llvm
uses: actions/checkout@master
with:
repository: llvm/llvm-project
ref: llvmorg-19.1.1

- name: Checkout
uses: actions/checkout@v3
with:
path: ${{ github.workspace }}/llvm/projects/llvm-cbe

- name: Update Python
uses: actions/setup-python@v4
with:
python-version: '3.x'

- name: Install PyTest
run: |
python -m pip install --upgrade pip
pip install pytest pytest-xdist
- name: Initialize LLVM build cache
uses: mozilla-actions/sccache-action@v0.0.3

- name: Build
shell: pwsh
run: |
$vsWhere = Join-Path ${env:ProgramFiles(x86)} 'Microsoft Visual Studio\Installer\vswhere.exe'
$visualStudioInstallationPath = & $vsWhere -latest -property installationPath
Import-Module (Join-Path $visualStudioInstallationPath 'Common7\Tools\Microsoft.VisualStudio.DevShell.dll')
Enter-VsDevShell -VsInstallPath $visualStudioInstallationPath -DevCmdArguments '-arch=x64 -host_arch=x64'
cd ${{ github.workspace }}
if (!(Test-Path '${{ github.workspace }}\build\')) { mkdir '${{ github.workspace }}\build' }
cmake -S llvm -B build -G Ninja -DLLVM_INCLUDE_TESTS=On -DCMAKE_BUILD_TYPE=Release -DCMAKE_C_COMPILER_LAUNCHER=sccache -DCMAKE_CXX_COMPILER_LAUNCHER=sccache
cmake --build build
- name: Test
shell: pwsh
run: |
$vsWhere = Join-Path ${env:ProgramFiles(x86)} 'Microsoft Visual Studio\Installer\vswhere.exe'
$visualStudioInstallationPath = & $vsWhere -latest -property installationPath
Import-Module (Join-Path $visualStudioInstallationPath 'Common7\Tools\Microsoft.VisualStudio.DevShell.dll')
Enter-VsDevShell -VsInstallPath $visualStudioInstallationPath -DevCmdArguments '-arch=x64 -host_arch=x64'
cd (Join-Path '${{ github.workspace }}' 'llvm\projects\llvm-cbe')
$env:PATH=$env:Path + ";${{ github.workspace }}\build\bin"
$env:LLVMToolDir="${{ github.workspace }}\build\bin"
pytest -n 16
name: Build and Test

on:
workflow_dispatch:
pull_request:
push:
branches:
- "master"

permissions:
contents: read

# This allows a subsequently queued workflow run to interrupt previous runs
concurrency:
group: '${{ github.workflow }} @ ${{ github.ref_protected && github.run_id || github.event.pull_request.number || github.ref }}'
cancel-in-progress: true

jobs:
build:
strategy:
matrix:
include:
- os: ubuntu-latest
- os: macos-latest
runs-on: ${{ matrix.os }}
steps:
- name: Checkout
uses: actions/checkout@v3

- name: Setup LLVM (Linux)
if: ${{ runner.os == 'Linux' }}
run: |
wget https://apt.llvm.org/llvm.sh
chmod +x llvm.sh
sudo ./llvm.sh 19 all
sudo update-alternatives --install /usr/bin/clang++ clang++ /usr/bin/clang++-19 160
sudo update-alternatives --install /usr/bin/clang clang /usr/bin/clang-19 160
sudo update-alternatives --install /usr/bin/lli lli /usr/bin/lli-19 160
sudo update-alternatives --install /usr/bin/clang-format clang-format /usr/bin/clang-format-19 160
- name: Setup LLVM and GCC (MacOS)
if: ${{ runner.os == 'macOS' }}
run: |
brew install llvm@19 gcc@14
echo "$(brew --prefix llvm@19)/bin" >> $GITHUB_PATH
echo "CC=$(brew --prefix llvm@19)/bin/clang" >> $GITHUB_ENV
echo "CXX=$(brew --prefix llvm@19)/bin/clang++" >> $GITHUB_ENV
cd /usr/local/bin
ln -s `which gcc-14` gcc
- name: Update Python
uses: actions/setup-python@v4
with:
python-version: '3.x'

- name: Install PyTest
run: |
python -m pip install --upgrade pip
pip install pytest pytest-xdist
- name: Check formatting
if: ${{ runner.os == 'Linux' }}
run: find . -iname '*.h' -o -iname '*.cpp' | xargs clang-format -Werror --dry-run --style=LLVM --verbose

- name: Build
run: |
mkdir build
cmake -S . -B build -DLLVM_INCLUDE_TESTS=On -DLLVM_DIR=/usr/lib/llvm-19/cmake
cmake --build build
- name: Test
run: |
gcc --version
pytest -n 16
# The llvm-dev package doesn't exist for Windows, so we need to build LLVM ourselves.
build-windows:
runs-on: windows-latest
env:
SCCACHE_GHA_ENABLED: "true"
steps:
- name: Checkout LLVM
id: checkout-llvm
uses: actions/checkout@master
with:
repository: llvm/llvm-project
ref: llvmorg-19.1.1

- name: Checkout
uses: actions/checkout@v3
with:
path: ${{ github.workspace }}/llvm/projects/llvm-cbe

- name: Update Python
uses: actions/setup-python@v4
with:
python-version: '3.x'

- name: Install PyTest
run: |
python -m pip install --upgrade pip
pip install pytest pytest-xdist
- name: Initialize LLVM build cache
uses: mozilla-actions/sccache-action@v0.0.3

- name: Build
shell: pwsh
run: |
$vsWhere = Join-Path ${env:ProgramFiles(x86)} 'Microsoft Visual Studio\Installer\vswhere.exe'
$visualStudioInstallationPath = & $vsWhere -latest -property installationPath
Import-Module (Join-Path $visualStudioInstallationPath 'Common7\Tools\Microsoft.VisualStudio.DevShell.dll')
Enter-VsDevShell -VsInstallPath $visualStudioInstallationPath -DevCmdArguments '-arch=x64 -host_arch=x64'
cd ${{ github.workspace }}
if (!(Test-Path '${{ github.workspace }}\build\')) { mkdir '${{ github.workspace }}\build' }
cmake -S llvm -B build -G Ninja -DLLVM_INCLUDE_TESTS=On -DCMAKE_BUILD_TYPE=Release -DCMAKE_C_COMPILER_LAUNCHER=sccache -DCMAKE_CXX_COMPILER_LAUNCHER=sccache
cmake --build build
- name: Test
shell: pwsh
run: |
$vsWhere = Join-Path ${env:ProgramFiles(x86)} 'Microsoft Visual Studio\Installer\vswhere.exe'
$visualStudioInstallationPath = & $vsWhere -latest -property installationPath
Import-Module (Join-Path $visualStudioInstallationPath 'Common7\Tools\Microsoft.VisualStudio.DevShell.dll')
Enter-VsDevShell -VsInstallPath $visualStudioInstallationPath -DevCmdArguments '-arch=x64 -host_arch=x64'
cd (Join-Path '${{ github.workspace }}' 'llvm\projects\llvm-cbe')
$env:PATH=$env:Path + ";${{ github.workspace }}\build\bin"
$env:LLVMToolDir="${{ github.workspace }}\build\bin"
pytest -n 16
4 changes: 2 additions & 2 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
if (NOT DEFINED LLVM_VERSION_MAJOR)
project(llvm-cbe)
set (USE_SYSTEM_LLVM 1)
cmake_minimum_required(VERSION 3.4.3)
find_package(LLVM 19 REQUIRED CONFIG)
cmake_minimum_required(VERSION 3.20.0)
find_package(LLVM 19.1 REQUIRED CONFIG)
message(STATUS "Found LLVM ${LLVM_PACKAGE_VERSION}")
message(STATUS "Using LLVMConfig.cmake in: ${LLVM_DIR}")
message(STATUS "LLVM_INCLUDE_DIRS: ${LLVM_INCLUDE_DIRS}")
Expand Down
22 changes: 12 additions & 10 deletions lib/Target/CBackend/CBackend.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1251,7 +1251,8 @@ void CWriter::printConstant(Constant *CPV, enum OperandContext Context) {
Out << " >> ";
break;
case Instruction::ICmp:
switch ((dyn_cast<ICmpInst>(CE->getAsInstruction()))->getUnsignedPredicate()) {
switch ((dyn_cast<ICmpInst>(CE->getAsInstruction()))
->getUnsignedPredicate()) {
case ICmpInst::ICMP_EQ:
Out << " == ";
break;
Expand Down Expand Up @@ -1286,8 +1287,8 @@ void CWriter::printConstant(Constant *CPV, enum OperandContext Context) {
case Instruction::FCmp: {
Out << '(';
bool NeedsClosingParens = printConstExprCast(CE);
FCmpInst *CmpInst = dyn_cast<FCmpInst>(CE->getAsInstruction());
const auto Pred = CmpInst -> getPredicate();
FCmpInst *CmpInst = dyn_cast<FCmpInst>(CE->getAsInstruction());
const auto Pred = CmpInst->getPredicate();
if (Pred == FCmpInst::FCMP_FALSE)
Out << "0";
else if (Pred == FCmpInst::FCMP_TRUE)
Expand Down Expand Up @@ -4645,7 +4646,7 @@ void CWriter::printIntrinsicDefinition(FunctionType *funT, unsigned Opcode,
cwriter_assert(cast<StructType>(retT)->getElementType(0) == elemT);
Out << " r.field1 = LLVMMul_sov(8 * sizeof(a), &a, &b, &r.field0);\n";
break;

case Intrinsic::uadd_sat:
// r = (a > XX_MAX - b) ? XX_MAX : a + b
cwriter_assert(retT == elemT);
Expand All @@ -4655,7 +4656,7 @@ void CWriter::printIntrinsicDefinition(FunctionType *funT, unsigned Opcode,
printLimitValue(*elemIntT, false, true, Out);
Out << " : a + b;\n";
break;

case Intrinsic::sadd_sat:
// r = (b > 0 && a > XX_MAX - b) ? XX_MAX : a + b;
// r = (b < 0 && a < XX_MIN - b) ? XX_MIN : r;
Expand All @@ -4671,15 +4672,15 @@ void CWriter::printIntrinsicDefinition(FunctionType *funT, unsigned Opcode,
printLimitValue(*elemIntT, true, false, Out);
Out << " : r;\n";
break;

case Intrinsic::usub_sat:
// r = (a < b) ? XX_MIN : a - b;
cwriter_assert(retT == elemT);
Out << " r = (a < b) ? ";
printLimitValue(*elemIntT, false, false, Out);
Out << " : a - b;\n";
break;

case Intrinsic::ssub_sat:
// r = (b > 0 && a < XX_MIN + b) ? XX_MIN : a - b;
// r = (b < 0 && a > XX_MAX + b) ? XX_MAX : r;
Expand All @@ -4697,7 +4698,8 @@ void CWriter::printIntrinsicDefinition(FunctionType *funT, unsigned Opcode,
break;

case Intrinsic::ushl_sat:
// There's no poison value handler in llvm-cbe yet, so this code don't consider that.
// There's no poison value handler in llvm-cbe yet, so this code don't
// consider that.
// r = (a > (XX_MAX >> b)) ? XX_MAX : a << b;
cwriter_assert(retT == elemT);
Out << " r = (a > (";
Expand All @@ -4708,8 +4710,8 @@ void CWriter::printIntrinsicDefinition(FunctionType *funT, unsigned Opcode,
break;

case Intrinsic::sshl_sat:
// (XX_MAX) = 0111... Therfore, shifting this value by b to the right yields the
// maximum/minimum value that can be shifted without overflow.
// (XX_MAX) = 0111... Therfore, shifting this value by b to the right
// yields the maximum/minimum value that can be shifted without overflow.
// r = (a >= 0 && a > (XX_MAX >> b)) ? XX_MAX : a << b;
// r = (a < 0 && a < ((XX_MAX >> b) | XX_MIN))) ? XX_MIN : r;
cwriter_assert(retT == elemT);
Expand Down
4 changes: 3 additions & 1 deletion test/cpp_tests/test_dtor.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@ class Foo {

int main() {
int y = 0;
{ Foo f(&y); }
{
Foo f(&y);
}
return y;
}
1 change: 1 addition & 0 deletions test/test_cbe.py
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@
'-Wall',
'-Wno-unused-function',
'-Wno-unused-variable',
'-Wno-uninitialized',
'-Werror',
]

Expand Down

0 comments on commit 9618d55

Please sign in to comment.