GHA/linux: replace scan-build with clang-tidy#20751
Closed
vszakats wants to merge 2 commits intocurl:masterfrom
Closed
GHA/linux: replace scan-build with clang-tidy#20751vszakats wants to merge 2 commits intocurl:masterfrom
vszakats wants to merge 2 commits intocurl:masterfrom
Conversation
2 tasks
vszakats
added a commit
to vszakats/curl
that referenced
this pull request
Feb 27, 2026
Silencing (seen on Linux H3 v20 job):
```
lib/vquic/vquic.c:398:37: error: variable 'calls' set but not used [clang-diagnostic-unused-but-set-variable]
398 | size_t total_nread = 0, pkts = 0, calls = 0;
| ^
```
Cherry-picked from curl#20751
Member
Author
|
Never a dull compiler run: https://github.com/curl/curl/actions/runs/22468472670/job/65079885471?pr=20751 edit: it looks like yet another compiler command-line reconstruction issue, |
54b781a to
73c7aca
Compare
This comment was marked as outdated.
This comment was marked as outdated.
3e76fcc to
6db7070
Compare
vszakats
added a commit
to vszakats/curl
that referenced
this pull request
Feb 27, 2026
To avoid a system include masking a custom directory, and e.g. picking
up system OpenSSL headers from `/usr/include` on Linux, instead of the
correct ones from a custom header directory, move system include
directories to the back of the header path list. Also to match what
CMake seems to be doing for the C compiler command-lines it generates.
CMake seems to use `-I`, while for these invocations we stick with
`-isystem` just in case.
This area remains fragile and likely not the final issue.
Fixing (seen in GHA/linux H3 c-ares):
```
Error while processing bld/tests/libtest/lib1521.c.
/usr/include/openssl/macros.h:147:4: error: "OPENSSL_API_COMPAT expresses an impossible API compatibility level" [clang-diagnostic-error]
Found compiler error(s).
147 | # error "OPENSSL_API_COMPAT expresses an impossible API compatibility level"
| ^
FAILED: [code=1] tests/libtest/CMakeFiles/libtests-clang-tidy
```
Ref: https://github.com/curl/curl/actions/runs/22468472670/job/65079885471?pr=20751
Bug: curl#20751 (comment)
Cherry-picked from curl#20751
e382892 to
95adb1f
Compare
vszakats
added a commit
that referenced
this pull request
Feb 27, 2026
To avoid a system include masking a custom directory, and e.g. picking
up system OpenSSL headers from `/usr/include` on Linux, instead of the
correct ones from a custom header directory, move system include
directories to the back of the header path list. Also to match what
CMake seems to be doing for the C compiler command-lines it generates.
CMake seems to use `-I`, while for these invocations we stick with
`-isystem` just in case.
This area remains fragile and likely not the final issue.
Fixing (seen in GHA/linux H3 c-ares):
```
Error while processing bld/tests/libtest/lib1521.c.
/usr/include/openssl/macros.h:147:4: error: "OPENSSL_API_COMPAT expresses an impossible API compatibility level" [clang-diagnostic-error]
Found compiler error(s).
147 | # error "OPENSSL_API_COMPAT expresses an impossible API compatibility level"
| ^
FAILED: [code=1] tests/libtest/CMakeFiles/libtests-clang-tidy
```
Ref: https://github.com/curl/curl/actions/runs/22468472670/job/65079885471?pr=20751
Bug: #20751 (comment)
Cherry-picked from #20751
Closes #20759
[WIP] scan-build is a Perl wrapper over clang's `--analyze` option, which in turn uses the same checks as clang-tidy: https://clang.llvm.org/docs/ClangStaticAnalyzer.html `scan-build` is a (Perl) wrapper around clang's built-in `--analyze` option. Which look similar or identical to clang-tidy checkers under the `clang-analyzer-*` namespace: https://clang.llvm.org/docs/ClangStaticAnalyzer.html Unless somebody has other information, it appears redundant to run scan-build in parallel with clang-tidy in CI, now that the latter is working reliably and with good performance for all curl components. Another scan-build issue is the lack of a markup to suppress false positives. It ignores `NOLINT`, yet find the same false positives as clang-tidy. This happens with scan-build v20+. (v19 is silent.) scan-build may still be a useful option in conjunction with autotools, where clang-tidy support is incomplete, slow (due to no parallelism), and uses a distinct make target, which does not build targets at the same time. But, scan-built lacks extra checkers that are now enabled for clang-tidy. Also: - drop duplicate job. - drop unused scan-build logic. Bug: curl#20732 (comment) Ref: curl#20732 (comment)
95adb1f to
c93e2f9
Compare
1 task
vszakats
added a commit
that referenced
this pull request
Mar 9, 2026
This file contains hidden or 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
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
scan-buildis a (Perl) wrapper around clang's built-in--analyzeoption. Which look similar or identical to clang-tidy checkers under
the
clang-analyzer-*namespace:https://clang.llvm.org/docs/ClangStaticAnalyzer.html
Unless somebody has other information, it appears redundant to run
scan-build in parallel with clang-tidy in CI, now that the latter is
working reliably and with good performance for all curl components.
Another scan-build issue is the lack of a markup to suppress false
positives. It ignores
NOLINT, yet finds the same false positives asclang-tidy. This happens with scan-build v20+. v18 is silent, but it's
a blocker to upgrade to a newer version.
scan-build may still be a useful when combined with autotools, where
clang-tidy support is incomplete, slow (no parallelism), and uses
a distinct make target, which does not build binaries in the same pass.
But, scan-build also lacks extra checkers that are now enabled for
clang-tidy.
The clang-tidy job is also 30-40s faster than the one it replaced.
Also:
CI time saved: 6m30s
To verify a cmake command-line reconstruction issue only hit in this
job in CI.
CI time cost: 1m40s
Ref: b2076d3 vquic: fix unused variable warning reported by clang-tidy #20752
Bug: #20732 (comment)
Ref: #20732 (comment)
Before: https://github.com/curl/curl/actions/runs/22466648624/job/65074048881
After: https://github.com/curl/curl/actions/runs/22467420456/job/65076579641?pr=20751