Skip to content

Commit

Permalink
updated CI to Clang 18 (#5305)
Browse files Browse the repository at this point in the history
  • Loading branch information
firewave committed Jan 30, 2024
1 parent 06c8363 commit d6bca49
Show file tree
Hide file tree
Showing 15 changed files with 42 additions and 35 deletions.
3 changes: 2 additions & 1 deletion .clang-tidy
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,6 @@ Checks: >
-misc-use-anonymous-namespace,
-modernize-avoid-c-arrays,
-modernize-deprecated-ios-base-aliases,
-modernize-use-nullptr,
-misc-include-cleaner,
-misc-unused-using-decls,
-modernize-loop-convert,
Expand All @@ -52,12 +51,14 @@ Checks: >
-modernize-use-nodiscard,
-modernize-use-trailing-return-type,
-performance-avoid-endl,
-performance-enum-size,
-performance-inefficient-string-concatenation,
-performance-no-automatic-move,
-performance-noexcept-swap,
-portability-simd-intrinsics,
-portability-std-allocator-const,
-readability-avoid-const-params-in-decls,
-readability-avoid-nested-conditional-operator,
-readability-braces-around-statements,
-readability-container-data-pointer,
-readability-function-cognitive-complexity,
Expand Down
6 changes: 3 additions & 3 deletions .github/workflows/asan.yml
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ jobs:
sudo apt-get purge --auto-remove llvm python3-lldb-14 llvm-14
wget https://apt.llvm.org/llvm.sh
chmod +x llvm.sh
sudo ./llvm.sh 17
sudo ./llvm.sh 18
- name: Install Qt ${{ env.QT_VERSION }}
if: false
Expand All @@ -70,8 +70,8 @@ jobs:
run: |
cmake -S . -B cmake.output -DCMAKE_BUILD_TYPE=RelWithDebInfo -DHAVE_RULES=On -DBUILD_TESTS=On -DBUILD_GUI=Off -DWITH_QCHART=Off -DUSE_MATCHCOMPILER=Verify -DANALYZE_ADDRESS=On -DENABLE_CHECK_INTERNAL=On -DUSE_BOOST=On -DCPPCHK_GLIBCXX_DEBUG=Off -DCMAKE_DISABLE_PRECOMPILE_HEADERS=On -DCMAKE_GLOBAL_AUTOGEN_TARGET=Off -DDISABLE_DMAKE=On -DCMAKE_C_COMPILER_LAUNCHER=ccache -DCMAKE_CXX_COMPILER_LAUNCHER=ccache
env:
CC: clang-17
CXX: clang++-17
CC: clang-18
CXX: clang++-18

- name: Build cppcheck
run: |
Expand Down
10 changes: 5 additions & 5 deletions .github/workflows/clang-tidy.yml
Original file line number Diff line number Diff line change
Expand Up @@ -37,8 +37,8 @@ jobs:
sudo apt-get purge --auto-remove llvm python3-lldb-14 llvm-14
wget https://apt.llvm.org/llvm.sh
chmod +x llvm.sh
sudo ./llvm.sh 17
sudo apt-get install -y clang-tidy-17
sudo ./llvm.sh 18
sudo apt-get install -y clang-tidy-18
- name: Install Qt ${{ env.QT_VERSION }}
uses: jurplel/install-qt-action@v3
Expand All @@ -49,14 +49,14 @@ jobs:

- name: Verify clang-tidy configuration
run: |
clang-tidy-17 --verify-config
clang-tidy-18 --verify-config
- name: Prepare 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 -DCPPCHK_GLIBCXX_DEBUG=Off
env:
CC: clang-17
CXX: clang++-17
CC: clang-18
CXX: clang++-18

- name: Prepare CMake dependencies
run: |
Expand Down
10 changes: 5 additions & 5 deletions .github/workflows/iwyu.yml
Original file line number Diff line number Diff line change
Expand Up @@ -128,8 +128,8 @@ jobs:
sudo apt-get purge --auto-remove llvm python3-lldb-14 llvm-14
wget https://apt.llvm.org/llvm.sh
chmod +x llvm.sh
sudo ./llvm.sh 17
sudo apt-get install -y clang-tools-17
sudo ./llvm.sh 18
sudo apt-get install -y clang-tools-18
- name: Install Qt ${{ env.QT_VERSION }}
uses: jurplel/install-qt-action@v3
Expand All @@ -142,8 +142,8 @@ jobs:
run: |
cmake -S . -B cmake.output -G "Unix Makefiles" -DCMAKE_BUILD_TYPE=Release -DHAVE_RULES=On -DBUILD_TESTS=On -DBUILD_GUI=On -DBUILD_TESTS=On -DBUILD_GUI=On -DWITH_QCHART=On -DENABLE_CHECK_INTERNAL=On -DCMAKE_GLOBAL_AUTOGEN_TARGET=On -DCMAKE_DISABLE_PRECOMPILE_HEADERS=On -DCPPCHK_GLIBCXX_DEBUG=Off -DUSE_MATCHCOMPILER=Off -DEXTERNALS_AS_SYSTEM=On
env:
CC: clang-17
CXX: clang++-17
CC: clang-18
CXX: clang++-18

- name: Prepare CMake dependencies
run: |
Expand All @@ -160,7 +160,7 @@ jobs:
- name: clang-include-cleaner
run: |
# TODO: run multi-threaded
find $PWD/cli $PWD/lib $PWD/test -maxdepth 1 -name "*.cpp" | xargs -t -n 1 clang-include-cleaner-17 --print=changes --extra-arg=-w -p cmake.output > clang-include-cleaner.log 2>&1
find $PWD/cli $PWD/lib $PWD/test -maxdepth 1 -name "*.cpp" | xargs -t -n 1 clang-include-cleaner-18 --print=changes --extra-arg=-w -p cmake.output > clang-include-cleaner.log 2>&1
- uses: actions/upload-artifact@v3
with:
Expand Down
6 changes: 3 additions & 3 deletions .github/workflows/tsan.yml
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ jobs:
sudo apt-get purge --auto-remove llvm python3-lldb-14 llvm-14
wget https://apt.llvm.org/llvm.sh
chmod +x llvm.sh
sudo ./llvm.sh 17
sudo ./llvm.sh 18
- name: Install Qt ${{ env.QT_VERSION }}
if: false
Expand All @@ -69,8 +69,8 @@ jobs:
run: |
cmake -S . -B cmake.output -DCMAKE_BUILD_TYPE=RelWithDebInfo -DHAVE_RULES=On -DBUILD_TESTS=On -DBUILD_GUI=Off -DWITH_QCHART=Off -DUSE_MATCHCOMPILER=Verify -DANALYZE_THREAD=On -DUSE_THREADS=On -DENABLE_CHECK_INTERNAL=On -DUSE_BOOST=On -DCPPCHK_GLIBCXX_DEBUG=Off -DCMAKE_DISABLE_PRECOMPILE_HEADERS=On -DCMAKE_GLOBAL_AUTOGEN_TARGET=Off -DDISABLE_DMAKE=On -DCMAKE_C_COMPILER_LAUNCHER=ccache -DCMAKE_CXX_COMPILER_LAUNCHER=ccache
env:
CC: clang-17
CXX: clang++-17
CC: clang-18
CXX: clang++-18

- name: Build cppcheck
run: |
Expand Down
6 changes: 3 additions & 3 deletions .github/workflows/ubsan.yml
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ jobs:
sudo apt-get purge --auto-remove llvm python3-lldb-14 llvm-14
wget https://apt.llvm.org/llvm.sh
chmod +x llvm.sh
sudo ./llvm.sh 17
sudo ./llvm.sh 18
- name: Install Qt ${{ env.QT_VERSION }}
uses: jurplel/install-qt-action@v3
Expand All @@ -69,8 +69,8 @@ jobs:
run: |
cmake -S . -B cmake.output -DCMAKE_BUILD_TYPE=RelWithDebInfo -DHAVE_RULES=On -DBUILD_TESTS=On -DBUILD_GUI=ON -DWITH_QCHART=ON -DUSE_MATCHCOMPILER=Verify -DANALYZE_UNDEFINED=On -DENABLE_CHECK_INTERNAL=On -DUSE_BOOST=On -DCPPCHK_GLIBCXX_DEBUG=Off -DCMAKE_DISABLE_PRECOMPILE_HEADERS=On -DCMAKE_GLOBAL_AUTOGEN_TARGET=On -DDISABLE_DMAKE=On -DCMAKE_C_COMPILER_LAUNCHER=ccache -DCMAKE_CXX_COMPILER_LAUNCHER=ccache
env:
CC: clang-17
CXX: clang++-17
CC: clang-18
CXX: clang++-18

- name: Build cppcheck
run: |
Expand Down
6 changes: 2 additions & 4 deletions clang-tidy.md
Original file line number Diff line number Diff line change
Expand Up @@ -129,6 +129,8 @@ We run this separately via `clang-include-cleaner` in the `iwyu.yml` workflow as
`performance-noexcept-swap`<br/>
`bugprone-switch-missing-default-case`<br/>
`bugprone-empty-catch`<br/>
`performance-enum-size`<br/>
`readability-avoid-nested-conditional-operator`</br>

To be evaluated (need to remove exclusion).

Expand Down Expand Up @@ -185,10 +187,6 @@ It does not seem to produce any warnings for us (needs to be investigated) and i

This is the most expensive check for several files and it is providing much in terms of code quality. Reported upstream as https://github.com/llvm/llvm-project/issues/72300.

`modernize-use-nullptr`

This is already covered by the `-Wzero-as-null-pointer-constant` compiler warning so there is no need for an additional check.

### Disabled for GUI only

`readability-convert-member-functions-to-static`<br/>
Expand Down
1 change: 1 addition & 0 deletions cli/stacktrace.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -85,6 +85,7 @@ void print_stacktrace(FILE* output, bool demangling, int maxdepth, bool lowMem)
(int)(firstBracketAddress-symbolString), symbolString);
}
}
// NOLINTNEXTLINE(bugprone-multi-level-implicit-pointer-conversion) - code matches the documented usage
free(symbolStringList);
} else {
fputs("Callstack could not be obtained\n", output);
Expand Down
2 changes: 1 addition & 1 deletion cmake/clang_tidy.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ if (NOT CMAKE_DISABLE_PRECOMPILE_HEADERS)
message(STATUS "Cannot use non-Clang compiler with clang-tidy when precompiled headers are enabled - skipping 'run-clang-tidy' target generation")
endif()
else()
set(RUN_CLANG_TIDY_NAMES run-clang-tidy run-clang-tidy-17 run-clang-tidy-16 run-clang-tidy-15 run-clang-tidy-14 run-clang-tidy-13 run-clang-tidy-12 run-clang-tidy-11 run-clang-tidy-10 run-clang-tidy-9 run-clang-tidy-8)
set(RUN_CLANG_TIDY_NAMES run-clang-tidy run-clang-tidy-18 run-clang-tidy-17 run-clang-tidy-16 run-clang-tidy-15 run-clang-tidy-14 run-clang-tidy-13 run-clang-tidy-12 run-clang-tidy-11 run-clang-tidy-10 run-clang-tidy-9 run-clang-tidy-8)
endif()

if (RUN_CLANG_TIDY_NAMES)
Expand Down
10 changes: 8 additions & 2 deletions cmake/compilerDefinitions.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -10,11 +10,17 @@ if (MSVC)
add_definitions(-D_WIN64)
endif()

# TODO: this should probably apply to the compiler and not the platform
# TODO: this should probably apply to the compiler and not the platform - I think it is only "broken" with MinGW
# TODO: AppleClang only has libc++
# TODO: what about clang-cl and native Win32 clang?
if (CPPCHK_GLIBCXX_DEBUG AND UNIX AND CMAKE_BUILD_TYPE STREQUAL "Debug")
if (CMAKE_CXX_COMPILER_ID MATCHES "Clang")
if (USE_LIBCXX)
add_definitions(-D_LIBCPP_ENABLE_ASSERTIONS=1)
if (CMAKE_CXX_COMPILER_VERSION VERSION_EQUAL 18 OR CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 18)
add_definitions(-D_LIBCPP_HARDENING_MODE=_LIBCPP_HARDENING_MODE_DEBUG)
else()
add_definitions(-D_LIBCPP_ENABLE_ASSERTIONS=1)
endif()
# TODO: also add _LIBCPP_ENABLE_THREAD_SAFETY_ANNOTATIONS?
endif()
else()
Expand Down
1 change: 1 addition & 0 deletions cmake/compileroptions.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -107,6 +107,7 @@ elseif (CMAKE_CXX_COMPILER_ID MATCHES "Clang")
add_compile_options_safe(-Wno-date-time)
add_compile_options(-Wno-disabled-macro-expansion)
add_compile_options_safe(-Wno-bitwise-instead-of-logical)
add_compile_options_safe(-Wno-switch-default)

# these cannot be fixed properly without adopting later C++ standards
add_compile_options_safe(-Wno-unsafe-buffer-usage)
Expand Down
2 changes: 1 addition & 1 deletion lib/clangimport.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1466,7 +1466,7 @@ void clangimport::AstNode::createTokensForCXXRecord(TokenList &tokenList)
const_cast<Scope *>(classToken->scope())->definedTypesMap[className] = scope->definedType;
}
addtoken(tokenList, ";");
const_cast<Token *>(tokenList.back())->scope(classToken->scope());
tokenList.back()->scope(classToken->scope());
}

Token * clangimport::AstNode::createTokensVarDecl(TokenList &tokenList)
Expand Down
10 changes: 5 additions & 5 deletions lib/symboldatabase.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1196,7 +1196,7 @@ void SymbolDatabase::fixVarId(VarIdMap & varIds, const Token * vartok, Token * m
if (varId == varIds.end()) {
MemberIdMap memberId;
if (membertok->varId() == 0) {
memberId[membervar->nameToken()->varId()] = const_cast<Tokenizer &>(mTokenizer).newVarId();
memberId[membervar->nameToken()->varId()] = mTokenizer.newVarId();
mVariableList.push_back(membervar);
} else
mVariableList[membertok->varId()] = membervar;
Expand All @@ -1206,7 +1206,7 @@ void SymbolDatabase::fixVarId(VarIdMap & varIds, const Token * vartok, Token * m
MemberIdMap::iterator memberId = varId->second.find(membervar->nameToken()->varId());
if (memberId == varId->second.end()) {
if (membertok->varId() == 0) {
varId->second.insert(std::make_pair(membervar->nameToken()->varId(), const_cast<Tokenizer &>(mTokenizer).newVarId()));
varId->second.insert(std::make_pair(membervar->nameToken()->varId(), mTokenizer.newVarId()));
mVariableList.push_back(membervar);
memberId = varId->second.find(membervar->nameToken()->varId());
} else
Expand Down Expand Up @@ -1766,7 +1766,7 @@ void SymbolDatabase::createSymbolDatabaseExprIds()

// Mark expressions that are unique
std::vector<std::pair<Token*, int>> uniqueExprId(id);
for (Token* tok = const_cast<Token*>(mTokenizer.list.front()); tok; tok = tok->next()) {
for (Token* tok = mTokenizer.list.front(); tok; tok = tok->next()) {
const auto id2 = tok->exprId();
if (id2 == 0 || id2 <= maximumVarId)
continue;
Expand Down Expand Up @@ -2982,7 +2982,7 @@ bool Function::argsMatch(const Scope *scope, const Token *first, const Token *se
if (Token::simpleMatch(second->next(), param.c_str(), param.size())) {
// check for redundant qualification before skipping it
if (!Token::simpleMatch(first->next(), param.c_str(), param.size())) {
second = second->tokAt(int(arg_path_length));
second = second->tokAt(arg_path_length);
arg_path_length = 0;
}
}
Expand Down Expand Up @@ -7263,7 +7263,7 @@ static const Function* getFunction(const Token* tok) {
void SymbolDatabase::setValueTypeInTokenList(bool reportDebugWarnings, Token *tokens)
{
if (!tokens)
tokens = const_cast<Tokenizer &>(mTokenizer).list.front();
tokens = mTokenizer.list.front();

for (Token *tok = tokens; tok; tok = tok->next())
tok->setValueType(nullptr);
Expand Down
2 changes: 1 addition & 1 deletion lib/symboldatabase.h
Original file line number Diff line number Diff line change
Expand Up @@ -1003,7 +1003,7 @@ class CPPCHECKLIB Function {
setFlag(fIsVolatile, state);
}
void hasTrailingReturnType(bool state) {
return setFlag(fHasTrailingReturnType, state);
setFlag(fHasTrailingReturnType, state);
}
void isInlineKeyword(bool state) {
setFlag(fIsInlineKeyword, state);
Expand Down
2 changes: 1 addition & 1 deletion lib/valueflow.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -6302,7 +6302,7 @@ struct ConditionHandler {
const Settings& settings,
SourceLocation loc = SourceLocation::current()) const
{
return valueFlowReverse(start, endToken, exprTok, values, tokenlist, errorLogger, settings, loc);
valueFlowReverse(start, endToken, exprTok, values, tokenlist, errorLogger, settings, loc);
}

void traverseCondition(const TokenList& tokenlist,
Expand Down

0 comments on commit d6bca49

Please sign in to comment.