Skip to content

clang-21 compilation warning: implicit conversion loses integer precision #2390

@xuganyu96

Description

@xuganyu96

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    Status

    Todo

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions