Re: clang-tidy 23 bugprone-signed-bitwise and CPL_LSBINT32PTR macros
Andrew C Aitchison via gdal-dev <[email protected]> Mon, 11 May 2026 13:11:59 +0100 (BST)
| Newsgroups | gmane.comp.gis.gdal.devel |
|---|---|
| Message-ID | <[email protected]> |
This message is in MIME format. The first part should be readable text, while the remaining parts are likely unreadable without MIME-aware tools. ---1463807999-1634960871-1778445330=:3126666 Content-Type: text/plain; CHARSET=ISO-8859-15; format=flowed Content-Transfer-Encoding: 8BIT Content-ID: <[email protected]> On Sun, 10 May 2026, Even Rouault wrote: > Andrew, > > does https://github.com/OSGeo/gdal/pull/14524 fix the warning? With that change, clang-tidy is happy, but now the compile breaks if I use `clang++ -Wsign-conversion`: In file included from /usr/local/gdal/git.llvm/include/gdal_dataset.h:18: /usr/local/gdal/git.llvm/include/cpl_port.h:808:33: error: implicit conversion changes signedness: 'int' to 'uint32_t' (aka 'unsigned int') [-Werror,-Wsign-conversion] 808 | uint32_t unsigned_val = CPL_LSBINT32PTR(x); | ~~~~~~~~~~~~ ^~~~~~~~~~~~~~~~~~ /usr/local/gdal/git.llvm/include/cpl_port.h:788:62: note: expanded from macro 'CPL_LSBINT32PTR' 786 | ((*CPL_REINTERPRET_CAST(const GByte *, x)) | \ | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 787 | (*((CPL_REINTERPRET_CAST(const GByte *, x)) + 1) << 8) | \ | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 788 | (*((CPL_REINTERPRET_CAST(const GByte *, x)) + 2) << 16) | \ | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~ 789 | (*((CPL_REINTERPRET_CAST(const GByte *, x)) + 3) << 24)) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ qed.cpp:122:30: note: in instantiation of function template specialization 'CPL_LSBSINT32PTR<unsigned char>' requested here 122 | return (static_cast<int>(CPL_LSBSINT32PTR(buf))); | ^ > Even > > Le 10/05/2026 à 16:02, Andrew C Aitchison via gdal-dev a écrit : >> >> clang-tidy 23 (I'm using Ubuntu 26.04 with build >> ++20260508083129+d791e3a6f4c8-1~exp1~20260508083148.481 >> from llvm-toolchain-snapshot at https://www.llvm.org/) >> has a new? check bugprone-signed-bitwise. >> >> This check objects to macros like CPL_LSBINT32PTR: >> >> clang-tidy --config="{Checks: 'bugprone-signed-bitwise', CheckOptions: >> {bugprone-signed-bitwise.IgnorePositiveIntegerLiterals: true}}" >> frmts/raw/lcpdataset.cpp >> >> reports 63 warnings of [bugprone-signed-bitwise], starting with: >> >> /home/werdna/gdal/git/frmts/raw/lcpdataset.cpp:171:10: warning: use of a >> signed integer operand with a binary bitwise operator >> [bugprone-signed-bitwise] >> 171 | if ((CPL_LSBSINT32PTR(poOpenInfo->pabyHeader) != 20 && >> | ^ >> /usr/local/gdal/git.llvm/include/cpl_port.h:799:53: note: expanded from >> macro 'CPL_LSBSINT32PTR' >> 799 | #define CPL_LSBSINT32PTR(x) CPL_STATIC_CAST(GInt32, >> CPL_LSBINT32PTR(x)) >> | ~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~ >> /usr/local/gdal/git.llvm/include/cpl_port.h:786:6: note: expanded from >> macro 'CPL_LSBINT32PTR' >> 786 | ((*CPL_REINTERPRET_CAST(const GByte *, x)) | \ >> | ^ >> 787 | (*((CPL_REINTERPRET_CAST(const GByte *, x)) + 1) << 8U) | \ >> 788 | (*((CPL_REINTERPRET_CAST(const GByte *, x)) + 2) << 16U) | \ >> | ~ >> /usr/local/gdal/git.llvm/include/cpl_port.h:181:55: note: expanded from >> macro 'CPL_STATIC_CAST' >> 181 | #define CPL_STATIC_CAST(type, expr) static_cast<type>(expr) >> | ^~~~ >> >> I suspect that default type-promotion from an unsigned GByte >> to a *signed* int does not help here. >> >> Not exactly a bug, but annoying. >> -- Andrew C. Aitchison Kendal, UK [email protected] ---1463807999-1634960871-1778445330=:3126666 Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ gdal-dev mailing list [email protected] https://lists.osgeo.org/mailman/listinfo/gdal-dev ---1463807999-1634960871-1778445330=:3126666--