Open paleolimbot opened 3 months ago
FWIW this issue just popped up in cudf as well. In my case, the tracebacks all point back to inline_buffer.h
, specifically
/home/coder/cudf/cpp/build/conda/cuda-12.5/release/_deps/nanoarrow-src/src/nanoarrow/common/inline_buffer.h:350:8: warning: Dereference of null pointer (loaded from variable 'out') [clang-analyzer-core. NullDereference] /home/coder/cudf/cpp/build/conda/cuda-12.5/release/_deps/nanoarrow-src/src/nanoarrow/common/inline_buffer.h:474:23: warning: Array access (from variable 'bits') results in a null pointer dereference [cl ang-analyzer-core.NullDereference]
/home/coder/cudf/cpp/build/conda/cuda-12.5/release/_deps/nanoarrow-src/src/nanoarrow/common/inline_buffer.h:480:21: warning: Array access (from variable 'bits') results in a null pointer dereference [cl ang-analyzer-core.NullDereference]
/home/coder/cudf/cpp/build/conda/cuda-12.5/release/_deps/nanoarrow-src/src/nanoarrow/common/inline_buffer.h:640:17: warning: Dereference of null pointer (loaded from variable 'out_cursor') [clang-analyz er-core.NullDereference
I'm also having difficulty suppressing them in our runs. The recent release of clang-tidy 19 exposed the ability to exclude headers, which helps, but I'm running into cases specifically with nanoarrow where the exclusions don't work. I suspect that the issue comes from the extensive use of macros and clang-tidy having special logic around the way macros are handled in the call stack, but I'm not sure about that.
I'll take another look today!
Meson has built-in support for clang-tidy, so if we wanted to I think can just add a .clang-tidy configuration to the project root and run meson compile clang-tidy
to check
I'll plug through fixing all of these tomorrow, but I'll also share here the workaround from ADBC which may be helpful here which involves some magic with jq
:
Ah yeah I'm doing something similar to prevent clang-tidy from checking nanoarrow sources, but I still see some errors in nanoarrow headers because clang-tidy will check all headers included in source files that are checked. In theory those should be possible to filter, and I've been able to filter all other vendored/downloaded at build-time headers, but not nanoarrow's. I suspect the issue is specifically with how macros are being handled in nested contexts and that defeating the filtering capabilities of clang-tidy.
The
clang-tidy
job in ADBC higlighted a few warnings that should be addressed ( https://github.com/apache/arrow-adbc/pull/1928 ). We should run this in our CI to ensure that nanoarrow doesn't cause problems for downstream projects that use clang-tidy (like ADBC!).https://github.com/apache/arrow-adbc/actions/runs/9590445640/job/26445818971?pr=1928#step:7:344