Fix #12210 (Cppcheck hang in SymbolDatabase::createSymbolDatabaseExpr… #2520
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Syntax reference https://help.github.com/en/actions/reference/workflow-syntax-for-github-actions | |
# Environment reference https://help.github.com/en/actions/reference/virtual-environments-for-github-hosted-runners | |
name: selfcheck | |
on: | |
push: | |
branches: | |
- 'main' | |
- 'releases/**' | |
tags: | |
- '2.*' | |
pull_request: | |
permissions: | |
contents: read | |
jobs: | |
build: | |
runs-on: ubuntu-22.04 | |
env: | |
QT_VERSION: 6.6.0 | |
steps: | |
- uses: actions/checkout@v3 | |
- name: Install missing software | |
run: | | |
sudo apt-get update | |
sudo apt-get install libboost-container-dev | |
- name: ccache | |
uses: hendrikmuhs/[email protected] | |
with: | |
key: ${{ github.workflow }}-${{ runner.os }} | |
- name: Install missing software | |
run: | | |
sudo apt-get update | |
sudo apt-get install clang-14 valgrind | |
- name: Install Qt ${{ env.QT_VERSION }} | |
uses: jurplel/install-qt-action@v3 | |
with: | |
version: ${{ env.QT_VERSION }} | |
modules: 'qtcharts' | |
cache: true | |
# TODO: cache this - perform same build as for the other self check | |
- name: Self check (build) | |
run: | | |
export PATH="/usr/lib/ccache:/usr/local/opt/ccache/libexec:$PATH" | |
# valgrind cannot handle DWARF 5 yet so force version 4 | |
# work around performance regression with -inline-deferral | |
make -j$(nproc) -s CXXFLAGS="-O2 -w -DHAVE_BOOST -gdwarf-4 -mllvm -inline-deferral" MATCHCOMPILER=yes | |
env: | |
CC: clang-14 | |
CXX: clang++-14 | |
- name: CMake | |
run: | | |
cmake -S . -B cmake.output -G "Unix Makefiles" -DHAVE_RULES=On -DBUILD_TESTS=On -DBUILD_GUI=ON -DUSE_QT6=On -DWITH_QCHART=ON -DENABLE_CHECK_INTERNAL=On -DCMAKE_GLOBAL_AUTOGEN_TARGET=On | |
- name: Generate dependencies | |
run: | | |
# make sure the precompiled headers exist | |
make -C cmake.output lib/CMakeFiles/cppcheck-core.dir/cmake_pch.hxx.cxx | |
make -C cmake.output test/CMakeFiles/testrunner.dir/cmake_pch.hxx.cxx | |
# make sure auto-generated GUI files exist | |
make -C cmake.output autogen | |
make -C cmake.output gui-build-deps | |
# TODO: find a way to report unmatched suppressions without need to add information checks | |
- name: Self check (unusedFunction) | |
if: false # TODO: fails with preprocessorErrorDirective - see #10667 | |
run: | | |
./cppcheck -q --template=selfcheck --error-exitcode=1 --library=cppcheck-lib --library=qt -D__CPPCHECK__ -D__GNUC__ -DQT_VERSION=0x060000 -DQ_MOC_OUTPUT_REVISION=68 -DQT_CHARTS_LIB --enable=unusedFunction --exception-handling -rp=. --project=cmake.output/compile_commands.json --suppressions-list=.selfcheck_unused_suppressions --inline-suppr | |
env: | |
DISABLE_VALUEFLOW: 1 | |
UNUSEDFUNCTION_ONLY: 1 | |
# the following steps are duplicated from above since setting up the build node in a parallel step takes longer than the actual steps | |
- name: CMake (no test) | |
run: | | |
cmake -S . -B cmake.output.notest -G "Unix Makefiles" -DHAVE_RULES=On -DBUILD_TESTS=Off -DBUILD_GUI=ON -DUSE_QT6=On -DWITH_QCHART=ON -DENABLE_CHECK_INTERNAL=On -DCMAKE_GLOBAL_AUTOGEN_TARGET=On | |
- name: Generate dependencies (no test) | |
run: | | |
# make sure the precompiled headers exist | |
make -C cmake.output.notest lib/CMakeFiles/cppcheck-core.dir/cmake_pch.hxx.cxx | |
# make sure auto-generated GUI files exist | |
make -C cmake.output.notest autogen | |
make -C cmake.output.notest gui-build-deps | |
# TODO: find a way to report unmatched suppressions without need to add information checks | |
- name: Self check (unusedFunction / no test) | |
run: | | |
./cppcheck -q --template=selfcheck --error-exitcode=1 --library=cppcheck-lib --library=qt -D__CPPCHECK__ -D__GNUC__ -DQT_VERSION=0x060000 -DQ_MOC_OUTPUT_REVISION=68 -DQT_CHARTS_LIB --enable=unusedFunction --exception-handling -rp=. --project=cmake.output.notest/compile_commands.json --suppressions-list=.selfcheck_unused_suppressions --inline-suppr | |
env: | |
DISABLE_VALUEFLOW: 1 | |
UNUSEDFUNCTION_ONLY: 1 | |
- name: Fetch corpus | |
run: | | |
wget https://github.com/danmar/cppcheck/archive/refs/tags/2.8.tar.gz | |
tar xvf 2.8.tar.gz | |
- name: CMake (corpus / no test) | |
run: | | |
cmake -S cppcheck-2.8 -B cmake.output.corpus -G "Unix Makefiles" -DHAVE_RULES=On -DBUILD_TESTS=Off -DBUILD_GUI=ON -DUSE_QT6=On -DWITH_QCHART=ON -DENABLE_CHECK_INTERNAL=On -DCMAKE_GLOBAL_AUTOGEN_TARGET=On | |
- name: Generate dependencies (corpus) | |
run: | | |
# make sure the precompiled headers exist | |
make -C cmake.output.notest lib/CMakeFiles/cppcheck-core.dir/cmake_pch.hxx.cxx | |
# make sure auto-generated GUI files exist | |
make -C cmake.output.corpus autogen | |
make -C cmake.output.corpus gui-build-deps | |
# TODO: find a way to report unmatched suppressions without need to add information checks | |
- name: Self check (unusedFunction / corpus / no test / callgrind) | |
run: | | |
# TODO: fix -rp so the suppressions actually work | |
valgrind --tool=callgrind ./cppcheck --template=selfcheck --error-exitcode=0 --library=cppcheck-lib --library=qt -D__GNUC__ -DQT_VERSION=0x060000 -DQ_MOC_OUTPUT_REVISION=68 -DQT_CHARTS_LIB --enable=unusedFunction --exception-handling -rp=. --project=cmake.output.corpus/compile_commands.json --suppressions-list=.selfcheck_unused_suppressions --inline-suppr 2>callgrind.log || (cat callgrind.log && false) | |
cat callgrind.log | |
callgrind_annotate --auto=no > callgrind.annotated.log | |
head -50 callgrind.annotated.log | |
env: | |
DISABLE_VALUEFLOW: 1 | |
- uses: actions/upload-artifact@v3 | |
with: | |
name: Callgrind Output | |
path: ./callgrind.* |