Description
When compiling liboqs using clang-21, the compiler reported warning: implicit conversion loses integer precision: 'int' to 'unsigned char' [-Wimplicit-int-conversion]. This warning is present with both AppleClang 21 and Clang 21 installed from Homebrew. This warning is not present with Clang 18 installed from Homebrew.
$LIBOQS_DIR/src/common/sha3/xkcp_low/KeccakP-1600/plain-64bits/KeccakP-1600-opt64.c:200:62: warning: implicit conversion loses integer precision: 'int' to 'unsigned char' [-Wimplicit-int-conversion]
200 | ((unsigned char *)state)[lanePosition * 8 + offset + i] = ~data[i];
| ~ ^~~~~~~~
$LIBOQS_DIR/src/common/sha3/xkcp_low/KeccakP-1600/plain-64bits/KeccakP-1600-opt64.c:384:3: warning: implicit conversion loses integer precision: 'int' to 'unsigned char' [-Wimplicit-int-conversion]
384 | COMPL(1);
| ^~~~~~~~
$LIBOQS_DIR/src/common/sha3/xkcp_low/KeccakP-1600/plain-64bits/KeccakP-1600-opt64.c:382:70: note: expanded from macro 'COMPL'
382 | #define COMPL(lane) for(unsigned int i=0; i<8; i++) data[8*lane+i] = ~data[8*lane+i]
| ~ ^~~~~~~~~~~~~~~
$LIBOQS_DIR/src/common/sha3/xkcp_low/KeccakP-1600/plain-64bits/KeccakP-1600-opt64.c:386:4: warning: implicit conversion loses integer precision: 'int' to 'unsigned char' [-Wimplicit-int-conversion]
386 | COMPL(2);
| ^~~~~~~~
$LIBOQS_DIR/src/common/sha3/xkcp_low/KeccakP-1600/plain-64bits/KeccakP-1600-opt64.c:382:70: note: expanded from macro 'COMPL'
382 | #define COMPL(lane) for(unsigned int i=0; i<8; i++) data[8*lane+i] = ~data[8*lane+i]
| ~ ^~~~~~~~~~~~~~~
$LIBOQS_DIR/src/common/sha3/xkcp_low/KeccakP-1600/plain-64bits/KeccakP-1600-opt64.c:388:5: warning: implicit conversion loses integer precision: 'int' to 'unsigned char' [-Wimplicit-int-conversion]
388 | COMPL(8);
| ^~~~~~~~
$LIBOQS_DIR/src/common/sha3/xkcp_low/KeccakP-1600/plain-64bits/KeccakP-1600-opt64.c:382:70: note: expanded from macro 'COMPL'
382 | #define COMPL(lane) for(unsigned int i=0; i<8; i++) data[8*lane+i] = ~data[8*lane+i]
| ~ ^~~~~~~~~~~~~~~
$LIBOQS_DIR/src/common/sha3/xkcp_low/KeccakP-1600/plain-64bits/KeccakP-1600-opt64.c:390:6: warning: implicit conversion loses integer precision: 'int' to 'unsigned char' [-Wimplicit-int-conversion]
390 | COMPL(12);
| ^~~~~~~~~
$LIBOQS_DIR/src/common/sha3/xkcp_low/KeccakP-1600/plain-64bits/KeccakP-1600-opt64.c:382:70: note: expanded from macro 'COMPL'
382 | #define COMPL(lane) for(unsigned int i=0; i<8; i++) data[8*lane+i] = ~data[8*lane+i]
| ~ ^~~~~~~~~~~~~~~
$LIBOQS_DIR/src/common/sha3/xkcp_low/KeccakP-1600/plain-64bits/KeccakP-1600-opt64.c:392:7: warning: implicit conversion loses integer precision: 'int' to 'unsigned char' [-Wimplicit-int-conversion]
392 | COMPL(17);
| ^~~~~~~~~
$LIBOQS_DIR/src/common/sha3/xkcp_low/KeccakP-1600/plain-64bits/KeccakP-1600-opt64.c:382:70: note: expanded from macro 'COMPL'
382 | #define COMPL(lane) for(unsigned int i=0; i<8; i++) data[8*lane+i] = ~data[8*lane+i]
| ~ ^~~~~~~~~~~~~~~
$LIBOQS_DIR/src/common/sha3/xkcp_low/KeccakP-1600/plain-64bits/KeccakP-1600-opt64.c:394:8: warning: implicit conversion loses integer precision: 'int' to 'unsigned char' [-Wimplicit-int-conversion]
394 | COMPL(20);
| ^~~~~~~~~
$LIBOQS_DIR/src/common/sha3/xkcp_low/KeccakP-1600/plain-64bits/KeccakP-1600-opt64.c:382:70: note: expanded from macro 'COMPL'
382 | #define COMPL(lane) for(unsigned int i=0; i<8; i++) data[8*lane+i] = ~data[8*lane+i]
| ~ ^~~~~~~~~~~~~~~
$LIBOQS_DIR/src/common/sha3/xkcp_low/KeccakP-1600/plain-64bits/KeccakP-1600-opt64.c:459:3: warning: implicit conversion loses integer precision: 'int' to 'unsigned char' [-Wimplicit-int-conversion]
459 | COMPL(1);
| ^~~~~~~~
$LIBOQS_DIR/src/common/sha3/xkcp_low/KeccakP-1600/plain-64bits/KeccakP-1600-opt64.c:457:59: note: expanded from macro 'COMPL'
457 | #define COMPL(lane) for(i=0; i<8; i++) output[8*lane+i] = ~output[8*lane+i]
| ~ ^~~~~~~~~~~~~~~~~
$LIBOQS_DIR/src/common/sha3/xkcp_low/KeccakP-1600/plain-64bits/KeccakP-1600-opt64.c:461:4: warning: implicit conversion loses integer precision: 'int' to 'unsigned char' [-Wimplicit-int-conversion]
461 | COMPL(2);
| ^~~~~~~~
$LIBOQS_DIR/src/common/sha3/xkcp_low/KeccakP-1600/plain-64bits/KeccakP-1600-opt64.c:457:59: note: expanded from macro 'COMPL'
457 | #define COMPL(lane) for(i=0; i<8; i++) output[8*lane+i] = ~output[8*lane+i]
| ~ ^~~~~~~~~~~~~~~~~
$LIBOQS_DIR/src/common/sha3/xkcp_low/KeccakP-1600/plain-64bits/KeccakP-1600-opt64.c:463:5: warning: implicit conversion loses integer precision: 'int' to 'unsigned char' [-Wimplicit-int-conversion]
463 | COMPL(8);
| ^~~~~~~~
$LIBOQS_DIR/src/common/sha3/xkcp_low/KeccakP-1600/plain-64bits/KeccakP-1600-opt64.c:457:59: note: expanded from macro 'COMPL'
457 | #define COMPL(lane) for(i=0; i<8; i++) output[8*lane+i] = ~output[8*lane+i]
| ~ ^~~~~~~~~~~~~~~~~
$LIBOQS_DIR/src/common/sha3/xkcp_low/KeccakP-1600/plain-64bits/KeccakP-1600-opt64.c:465:6: warning: implicit conversion loses integer precision: 'int' to 'unsigned char' [-Wimplicit-int-conversion]
465 | COMPL(12);
| ^~~~~~~~~
$LIBOQS_DIR/src/common/sha3/xkcp_low/KeccakP-1600/plain-64bits/KeccakP-1600-opt64.c:457:59: note: expanded from macro 'COMPL'
457 | #define COMPL(lane) for(i=0; i<8; i++) output[8*lane+i] = ~output[8*lane+i]
| ~ ^~~~~~~~~~~~~~~~~
$LIBOQS_DIR/src/common/sha3/xkcp_low/KeccakP-1600/plain-64bits/KeccakP-1600-opt64.c:467:7: warning: implicit conversion loses integer precision: 'int' to 'unsigned char' [-Wimplicit-int-conversion]
467 | COMPL(17);
| ^~~~~~~~~
$LIBOQS_DIR/src/common/sha3/xkcp_low/KeccakP-1600/plain-64bits/KeccakP-1600-opt64.c:457:59: note: expanded from macro 'COMPL'
457 | #define COMPL(lane) for(i=0; i<8; i++) output[8*lane+i] = ~output[8*lane+i]
| ~ ^~~~~~~~~~~~~~~~~
$LIBOQS_DIR/src/common/sha3/xkcp_low/KeccakP-1600/plain-64bits/KeccakP-1600-opt64.c:469:8: warning: implicit conversion loses integer precision: 'int' to 'unsigned char' [-Wimplicit-int-conversion]
469 | COMPL(20);
| ^~~~~~~~~
$LIBOQS_DIR/src/common/sha3/xkcp_low/KeccakP-1600/plain-64bits/KeccakP-1600-opt64.c:457:59: note: expanded from macro 'COMPL'
457 | #define COMPL(lane) for(i=0; i<8; i++) output[8*lane+i] = ~output[8*lane+i]
| ~ ^~~~~~~~~~~~~~~~~
13 warnings generated.
Expected behaviour
There should not be any warnings.
liboqs version
ab0e07c
Environment
- Architecture: Apple Silicon
- OS: MacOS 26.4
- OpenSSL version: OpenSSL 3.6.1 27 Jan 2026 (Library: OpenSSL 3.6.1 27 Jan 2026)
- Compiler version used: Apple clang version 21.0.0 (clang-2100.0.123.102) and Homebrew clang version 21.1.8
Build command:
cmake -GNinja \
-DCMAKE_C_COMPILER="/opt/homebrew/Cellar/llvm@21/21.1.8/bin/clang-21" \
-DOQS_MINIMAL_BUILD="KEM_frodokem_640_aes" \
-DCMAKE_OSX_DEPLOYMENT_TARGET="26.0" \
-DOPENSSL_ROOT_DIR="/opt/homebrew/Cellar/openssl@3/3.6.1" \
.. && ninja
Use of generative AI
No response
Additional information
No response
Description
When compiling liboqs using
clang-21, the compiler reportedwarning: implicit conversion loses integer precision: 'int' to 'unsigned char' [-Wimplicit-int-conversion]. This warning is present with both AppleClang 21 and Clang 21 installed from Homebrew. This warning is not present with Clang 18 installed from Homebrew.Expected behaviour
There should not be any warnings.
liboqs version
ab0e07c
Environment
Build command:
cmake -GNinja \ -DCMAKE_C_COMPILER="/opt/homebrew/Cellar/llvm@21/21.1.8/bin/clang-21" \ -DOQS_MINIMAL_BUILD="KEM_frodokem_640_aes" \ -DCMAKE_OSX_DEPLOYMENT_TARGET="26.0" \ -DOPENSSL_ROOT_DIR="/opt/homebrew/Cellar/openssl@3/3.6.1" \ .. && ninjaUse of generative AI
No response
Additional information
No response