[QGIS-Developer] clang-tidy warning for narrowing to float
David Koňařík
dvdkon at konarici.cz
Thu Oct 23 02:35:15 PDT 2025
Hi all,
I'd like to propose a change to QGIS's clang-tidy settings. Currently,
we have bugprone-narrowing-conversions [0] turned on by wildcard, which
by default warns on converting between integer types, between floating
point types, and from integers to floating points, if the full range of
the source type won't fit into the destination type without loss of
precision.
I fully agree that conversions between different integer types should be
conscious decisions, since they can lead to security issues [1]. I find
the floating point warnings to have dubious usefulness, though.
In QGIS' 3D code, we often need to use integer values (e.g. screen size)
in floating point calculations, with practically no chance that the
integer value won't be representable as a float, and zero risk even if
it is - creating a security issue would require a very creative abuse of
floats. Fixing the warning leads to a visual spam of
static_cast<float>()s everywhere, obscuring any actual bugs.
Converting doubles to floats can actually cause issues, but it's also
inevitable in many places, seeing as Qt3D uses floats, but we need to
use doubles ourselves for precision reasons. Given this, I also think
the warning isn't very useful here.
I propose turning off WarnOnIntegerToFloatingPointNarrowingConversion
and possibly WarnOnFloatingPointNarrowingConversion, based on your feedback.
David Koňařík
[1]:
https://clang.llvm.org/extra/clang-tidy/checks/bugprone/narrowing-conversions.html
[0]: e.g. char *copy_string(char *str, uint64_t str_size) {
uint32_t size_plus_null = str_size + 1;
char *copy = malloc(size_plus_null);
memcpy(copy, str, str_size);
copy[str_size] = '\0';
return copy;
}
More information about the QGIS-Developer
mailing list