Fix #13155 (Tokenizer::simplifyTypedef does not set info correctly for typedef in function) #11668
Workflow file for this run
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/**' | |
- '2.*' | |
tags: | |
- '2.*' | |
pull_request: | |
permissions: | |
contents: read | |
jobs: | |
build: | |
runs-on: ubuntu-22.04 | |
env: | |
QT_VERSION: 6.8.0 | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
persist-credentials: false | |
- 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 | |
sudo apt-get install libboost-container-dev | |
sudo apt-get install valgrind | |
sudo apt-get install -y libcups2-dev # required for Qt6PrintSupport in CMake since Qt 6.7.3 | |
- name: Install Qt ${{ env.QT_VERSION }} | |
uses: jurplel/install-qt-action@v4 | |
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 | |
# unusedFunction - start | |
- 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 auto-generated GUI files exist | |
make -C cmake.output autogen | |
# 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 the auto-generated GUI dependencies exist | |
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 -DQT_MOC_HAS_STRINGDATA --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 | |
# unusedFunction - end | |
# the following steps are duplicated from above since setting up the build node in a parallel step takes longer than the actual steps | |
# unusedFunction notest - start | |
- 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 auto-generated GUI files exist | |
make -C cmake.output.notest autogen | |
# make sure the precompiled headers exist | |
make -C cmake.output.notest lib/CMakeFiles/cppcheck-core.dir/cmake_pch.hxx.cxx | |
# make sure the auto-generated GUI dependencies exist | |
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 -DQT_MOC_HAS_STRINGDATA --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 | |
# unusedFunction notest - end | |
# unusedFunction notest nogui - start | |
- name: CMake (no test / no gui) | |
run: | | |
cmake -S . -B cmake.output.notest_nogui -G "Unix Makefiles" -DHAVE_RULES=On -DBUILD_TESTS=Off -DENABLE_CHECK_INTERNAL=On | |
- name: Generate dependencies (no test / no gui) | |
run: | | |
# make sure the precompiled headers exist | |
make -C cmake.output.notest_nogui lib/CMakeFiles/cppcheck-core.dir/cmake_pch.hxx.cxx | |
# TODO: find a way to report unmatched suppressions without need to add information checks | |
- name: Self check (unusedFunction / no test / no gui) | |
run: | | |
./cppcheck -q --template=selfcheck --error-exitcode=1 --library=cppcheck-lib -D__CPPCHECK__ -D__GNUC__ --enable=unusedFunction --exception-handling -rp=. --project=cmake.output.notest_nogui/compile_commands.json --suppressions-list=.selfcheck_unused_suppressions --inline-suppr | |
env: | |
DISABLE_VALUEFLOW: 1 | |
UNUSEDFUNCTION_ONLY: 1 | |
# unusedFunction notest nogui - end | |
# unusedFunction notest nocli - start | |
- name: CMake (no test / no cli) | |
run: | | |
cmake -S . -B cmake.output.notest_nocli -G "Unix Makefiles" -DHAVE_RULES=On -DBUILD_TESTS=Off -DBUILD_CLI=Off -DBUILD_GUI=ON -DUSE_QT6=On -DWITH_QCHART=ON -DENABLE_CHECK_INTERNAL=On -DCMAKE_GLOBAL_AUTOGEN_TARGET=On | |
- name: Generate dependencies (no test / no cli) | |
run: | | |
# make sure auto-generated GUI files exist | |
make -C cmake.output.notest_nocli autogen | |
# make sure the precompiled headers exist | |
make -C cmake.output.notest_nocli lib/CMakeFiles/cppcheck-core.dir/cmake_pch.hxx.cxx | |
# make sure the auto-generated GUI dependencies exist | |
make -C cmake.output.notest_nocli gui-build-deps | |
# TODO: find a way to report unmatched suppressions without need to add information checks | |
- name: Self check (unusedFunction / no test / no cli) | |
if: false # TODO: the findings are currently too intrusive | |
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 -DQT_MOC_HAS_STRINGDATA --enable=unusedFunction --exception-handling -rp=. --project=cmake.output.notest_nocli/compile_commands.json --suppressions-list=.selfcheck_unused_suppressions --inline-suppr | |
env: | |
DISABLE_VALUEFLOW: 1 | |
UNUSEDFUNCTION_ONLY: 1 | |
# unusedFunction notest nocli - end | |
- 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 auto-generated GUI files exist | |
make -C cmake.output.corpus autogen | |
# make sure the precompiled headers exist | |
make -C cmake.output.corpus lib/CMakeFiles/lib_objs.dir/cmake_pch.hxx.cxx | |
# make sure the auto-generated GUI dependencies exist | |
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 -DQT_MOC_HAS_STRINGDATA --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@v4 | |
with: | |
name: Callgrind Output | |
path: ./callgrind.* |