Context
#2280 made every CUDA translation unit in the NanoVDB build warnings-as-errors by default (NANOVDB_CUDA_WERROR, covering both the NVCC front end and the forwarded host-compiler pass). The remaining gap is pure host TUs — .cc sources such as TestNanoVDB.cc, the tools, and the python bindings — which build with no -Werror at all.
The repository already has the mechanism: OPENVDB_CXX_STRICT (-Werror -Wall -Wextra plus the curated per-compiler set in OpenVDBCXX.cmake), which the core library builds with in CI (build.yml). The NanoVDB components have never built under it, and today they cannot: replicating the strict GNU and Clang flag sets over a standalone NanoVDB build (unit tests + tools + examples, Release and Debug) fails on pre-existing warnings.
Measured inventory
gcc (13.3): 74 unique sites
| Category |
Sites |
Notes |
-Wunused-parameter |
39 |
mostly named-but-unused params in header interfaces, e.g. the dummy parameter of DeviceBuffer::create |
-Wunused-function |
17 |
file-static functions in the portable C headers (CNanoVDB.h, PNanoVDB.h) — see policy question below |
-Wsign-compare |
10 |
Debug-only: inside assert bodies, so Release builds never see them |
-Wdangling-else |
3 |
|
-Wpedantic / -Wformat / -Wunused-variable |
5 |
includes %p passed non-void* in an example |
clang: 33 unique sites — overlapping categories plus -Wconversion (in the Clang strict set but not the GNU one) in NanoVDB.h, PNanoVDB.h, math/Math.h and tools/CreateNanoGrid.h.
Raw-error counts are much higher (~180 sign-compare instances in a Debug build) because header sites repeat per TU; the unique-site counts above are the real work.
Policy decisions needed
- CNanoVDB.h / PNanoVDB.h: file-static functions are the design of these portable C-style headers, and PNanoVDB.h is synced with external consumers. Options: attribute/edit every site, suppress
-Wunused-function at the including test TUs, or exclude these headers' test TUs from strict. Editing PNanoVDB.h piecemeal seems wrong; a deliberate choice is needed.
- clang
-Wconversion in public headers is semantic-adjacent (narrowing arithmetic in core math paths) and needs careful review rather than mechanical casts.
Suggested direction
Fix in slices, each independently reviewable: (1) the mechanical classes (unused parameters/variables, dangling-else, format); (2) the Debug-only sign-compares in asserts; (3) the C-header policy decision and its implementation; (4) -Wconversion last. Once clean, add -DOPENVDB_CXX_STRICT=ON to the linux-nanovdb matrix in nanovdb.yml (all four gcc/clang × Release/Debug configs), mirroring what build.yml already does for the core. OPENVDB_CXX_STRICT itself should stay opt-in in CMake — it is a repo-wide option — but on in CI; the CUDA-side NANOVDB_CUDA_WERROR remains default-ON as landed in #2280.
Context
#2280 made every CUDA translation unit in the NanoVDB build warnings-as-errors by default (
NANOVDB_CUDA_WERROR, covering both the NVCC front end and the forwarded host-compiler pass). The remaining gap is pure host TUs —.ccsources such asTestNanoVDB.cc, the tools, and the python bindings — which build with no-Werrorat all.The repository already has the mechanism:
OPENVDB_CXX_STRICT(-Werror -Wall -Wextraplus the curated per-compiler set inOpenVDBCXX.cmake), which the core library builds with in CI (build.yml). The NanoVDB components have never built under it, and today they cannot: replicating the strict GNU and Clang flag sets over a standalone NanoVDB build (unit tests + tools + examples, Release and Debug) fails on pre-existing warnings.Measured inventory
gcc (13.3): 74 unique sites
-Wunused-parameterdummyparameter ofDeviceBuffer::create-Wunused-function-Wsign-compareassertbodies, so Release builds never see them-Wdangling-else-Wpedantic/-Wformat/-Wunused-variable%ppassed non-void*in an exampleclang: 33 unique sites — overlapping categories plus
-Wconversion(in the Clang strict set but not the GNU one) in NanoVDB.h, PNanoVDB.h, math/Math.h and tools/CreateNanoGrid.h.Raw-error counts are much higher (~180 sign-compare instances in a Debug build) because header sites repeat per TU; the unique-site counts above are the real work.
Policy decisions needed
-Wunused-functionat the including test TUs, or exclude these headers' test TUs from strict. Editing PNanoVDB.h piecemeal seems wrong; a deliberate choice is needed.-Wconversionin public headers is semantic-adjacent (narrowing arithmetic in core math paths) and needs careful review rather than mechanical casts.Suggested direction
Fix in slices, each independently reviewable: (1) the mechanical classes (unused parameters/variables, dangling-else, format); (2) the Debug-only sign-compares in asserts; (3) the C-header policy decision and its implementation; (4)
-Wconversionlast. Once clean, add-DOPENVDB_CXX_STRICT=ONto thelinux-nanovdbmatrix innanovdb.yml(all four gcc/clang × Release/Debug configs), mirroring whatbuild.ymlalready does for the core.OPENVDB_CXX_STRICTitself should stay opt-in in CMake — it is a repo-wide option — but on in CI; the CUDA-sideNANOVDB_CUDA_WERRORremains default-ON as landed in #2280.