Build failure with clang-22 -std=c99 -pedantic #877

Open
opened 2026-08-26 04:49:39 -05:00 by gilles-peskine-arm · 0 comments
gilles-peskine-arm commented 2026-08-26 04:49:39 -05:00 (Migrated from github.com)

Quick reproducer:

clang-22 -Wall -Wextra -Werror -std=c99 -pedantic -Iinclude -Icore -Idispatch -Idrivers/builtin/include -Iextras -Iplatform -Iutilities -c core/psa_crypto_slot_management.c

Expected behavior: clean build

Actual behavior:

core/psa_crypto_slot_management.c:32:1: error: '__COUNTER__' is a C2y extension
      [-Werror,-Wc2y-extensions]
   32 | MBEDTLS_STATIC_ASSERT(PSA_KEY_ID_USER_MIN < PSA_KEY_ID_USER_MAX,
      | ^
core/tf_psa_crypto_common.h:486:38: note: expanded from macro
      'MBEDTLS_STATIC_ASSERT'
  486 |     MBEDTLS_STATIC_ASSERT_WRAP(expr, __COUNTER__)
      |                                      ^
core/psa_crypto_slot_management.c:34:1: error: '__COUNTER__' is a C2y extension
      [-Werror,-Wc2y-extensions]
   34 | MBEDTLS_STATIC_ASSERT(PSA_KEY_ID_VENDOR_MIN < PSA_KEY_ID_VENDOR_MAX,
      | ^
core/tf_psa_crypto_common.h:486:38: note: expanded from macro
      'MBEDTLS_STATIC_ASSERT'
  486 |     MBEDTLS_STATIC_ASSERT_WRAP(expr, __COUNTER__)
      |                                      ^
core/psa_crypto_slot_management.c:36:1: error: '__COUNTER__' is a C2y extension
      [-Werror,-Wc2y-extensions]
   36 | MBEDTLS_STATIC_ASSERT(MBEDTLS_PSA_KEY_ID_BUILTIN_MIN <= MBEDTLS_...
      | ^
core/tf_psa_crypto_common.h:486:38: note: expanded from macro
      'MBEDTLS_STATIC_ASSERT'
  486 |     MBEDTLS_STATIC_ASSERT_WRAP(expr, __COUNTER__)
      |                                      ^
core/psa_crypto_slot_management.c:38:1: error: '__COUNTER__' is a C2y extension
      [-Werror,-Wc2y-extensions]
   38 | MBEDTLS_STATIC_ASSERT(PSA_KEY_ID_VOLATILE_MIN <= PSA_KEY_ID_VOLA...
      | ^
core/tf_psa_crypto_common.h:486:38: note: expanded from macro
      'MBEDTLS_STATIC_ASSERT'
  486 |     MBEDTLS_STATIC_ASSERT_WRAP(expr, __COUNTER__)
      |                                      ^
core/psa_crypto_slot_management.c:41:1: error: '__COUNTER__' is a C2y extension
      [-Werror,-Wc2y-extensions]
   41 | MBEDTLS_STATIC_ASSERT(PSA_KEY_ID_USER_MAX < PSA_KEY_ID_VENDOR_MIN ||
      | ^
core/tf_psa_crypto_common.h:486:38: note: expanded from macro
      'MBEDTLS_STATIC_ASSERT'
  486 |     MBEDTLS_STATIC_ASSERT_WRAP(expr, __COUNTER__)
      |                                      ^
core/psa_crypto_slot_management.c:45:1: error: '__COUNTER__' is a C2y extension
      [-Werror,-Wc2y-extensions]
   45 | MBEDTLS_STATIC_ASSERT(PSA_KEY_ID_VENDOR_MIN <= MBEDTLS_PSA_KEY_I...
      | ^
core/tf_psa_crypto_common.h:486:38: note: expanded from macro
      'MBEDTLS_STATIC_ASSERT'
  486 |     MBEDTLS_STATIC_ASSERT_WRAP(expr, __COUNTER__)
      |                                      ^
core/psa_crypto_slot_management.c:49:1: error: '__COUNTER__' is a C2y extension
      [-Werror,-Wc2y-extensions]
   49 | MBEDTLS_STATIC_ASSERT(PSA_KEY_ID_VENDOR_MIN <= PSA_KEY_ID_VOLATI...
      | ^
core/tf_psa_crypto_common.h:486:38: note: expanded from macro
      'MBEDTLS_STATIC_ASSERT'
  486 |     MBEDTLS_STATIC_ASSERT_WRAP(expr, __COUNTER__)
      |                                      ^
core/psa_crypto_slot_management.c:53:1: error: '__COUNTER__' is a C2y extension
      [-Werror,-Wc2y-extensions]
   53 | MBEDTLS_STATIC_ASSERT(PSA_KEY_ID_VOLATILE_MAX < MBEDTLS_PSA_KEY_...
      | ^
core/tf_psa_crypto_common.h:486:38: note: expanded from macro
      'MBEDTLS_STATIC_ASSERT'
  486 |     MBEDTLS_STATIC_ASSERT_WRAP(expr, __COUNTER__)
      |                                      ^
8 errors generated.

Clang ≤21 is fine, but Clang 22 and Clang 23 complains. The complaint is technically correct (__COUNTER__ is indeed not a C99 feature), but annoying (we specifically test for its existence before using it). We already avoid using a GCC extension to implement MBEDTLS_STATIC_ASSERT in C99 mode. We should do something similar for recent Clang.

CI reproducer: tests/scripts/all.sh clang_latest when clang-latest is Clang 22 or above.

Affects development (and presumably 1.1), but not 3.6.

Quick reproducer: ``` clang-22 -Wall -Wextra -Werror -std=c99 -pedantic -Iinclude -Icore -Idispatch -Idrivers/builtin/include -Iextras -Iplatform -Iutilities -c core/psa_crypto_slot_management.c ``` Expected behavior: clean build Actual behavior: ``` core/psa_crypto_slot_management.c:32:1: error: '__COUNTER__' is a C2y extension [-Werror,-Wc2y-extensions] 32 | MBEDTLS_STATIC_ASSERT(PSA_KEY_ID_USER_MIN < PSA_KEY_ID_USER_MAX, | ^ core/tf_psa_crypto_common.h:486:38: note: expanded from macro 'MBEDTLS_STATIC_ASSERT' 486 | MBEDTLS_STATIC_ASSERT_WRAP(expr, __COUNTER__) | ^ core/psa_crypto_slot_management.c:34:1: error: '__COUNTER__' is a C2y extension [-Werror,-Wc2y-extensions] 34 | MBEDTLS_STATIC_ASSERT(PSA_KEY_ID_VENDOR_MIN < PSA_KEY_ID_VENDOR_MAX, | ^ core/tf_psa_crypto_common.h:486:38: note: expanded from macro 'MBEDTLS_STATIC_ASSERT' 486 | MBEDTLS_STATIC_ASSERT_WRAP(expr, __COUNTER__) | ^ core/psa_crypto_slot_management.c:36:1: error: '__COUNTER__' is a C2y extension [-Werror,-Wc2y-extensions] 36 | MBEDTLS_STATIC_ASSERT(MBEDTLS_PSA_KEY_ID_BUILTIN_MIN <= MBEDTLS_... | ^ core/tf_psa_crypto_common.h:486:38: note: expanded from macro 'MBEDTLS_STATIC_ASSERT' 486 | MBEDTLS_STATIC_ASSERT_WRAP(expr, __COUNTER__) | ^ core/psa_crypto_slot_management.c:38:1: error: '__COUNTER__' is a C2y extension [-Werror,-Wc2y-extensions] 38 | MBEDTLS_STATIC_ASSERT(PSA_KEY_ID_VOLATILE_MIN <= PSA_KEY_ID_VOLA... | ^ core/tf_psa_crypto_common.h:486:38: note: expanded from macro 'MBEDTLS_STATIC_ASSERT' 486 | MBEDTLS_STATIC_ASSERT_WRAP(expr, __COUNTER__) | ^ core/psa_crypto_slot_management.c:41:1: error: '__COUNTER__' is a C2y extension [-Werror,-Wc2y-extensions] 41 | MBEDTLS_STATIC_ASSERT(PSA_KEY_ID_USER_MAX < PSA_KEY_ID_VENDOR_MIN || | ^ core/tf_psa_crypto_common.h:486:38: note: expanded from macro 'MBEDTLS_STATIC_ASSERT' 486 | MBEDTLS_STATIC_ASSERT_WRAP(expr, __COUNTER__) | ^ core/psa_crypto_slot_management.c:45:1: error: '__COUNTER__' is a C2y extension [-Werror,-Wc2y-extensions] 45 | MBEDTLS_STATIC_ASSERT(PSA_KEY_ID_VENDOR_MIN <= MBEDTLS_PSA_KEY_I... | ^ core/tf_psa_crypto_common.h:486:38: note: expanded from macro 'MBEDTLS_STATIC_ASSERT' 486 | MBEDTLS_STATIC_ASSERT_WRAP(expr, __COUNTER__) | ^ core/psa_crypto_slot_management.c:49:1: error: '__COUNTER__' is a C2y extension [-Werror,-Wc2y-extensions] 49 | MBEDTLS_STATIC_ASSERT(PSA_KEY_ID_VENDOR_MIN <= PSA_KEY_ID_VOLATI... | ^ core/tf_psa_crypto_common.h:486:38: note: expanded from macro 'MBEDTLS_STATIC_ASSERT' 486 | MBEDTLS_STATIC_ASSERT_WRAP(expr, __COUNTER__) | ^ core/psa_crypto_slot_management.c:53:1: error: '__COUNTER__' is a C2y extension [-Werror,-Wc2y-extensions] 53 | MBEDTLS_STATIC_ASSERT(PSA_KEY_ID_VOLATILE_MAX < MBEDTLS_PSA_KEY_... | ^ core/tf_psa_crypto_common.h:486:38: note: expanded from macro 'MBEDTLS_STATIC_ASSERT' 486 | MBEDTLS_STATIC_ASSERT_WRAP(expr, __COUNTER__) | ^ 8 errors generated. ``` Clang ≤21 is fine, but Clang 22 and Clang 23 complains. The complaint is technically correct (`__COUNTER__` is indeed not a C99 feature), but annoying (we specifically test for its existence before using it). We already avoid using a GCC extension to implement `MBEDTLS_STATIC_ASSERT` in C99 mode. We should do something similar for recent Clang. CI reproducer: `tests/scripts/all.sh clang_latest` when `clang-latest` is Clang 22 or above. Affects development (and presumably 1.1), but not 3.6.
Sign in to join this conversation.
No milestone
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
gh-Mbed-TLS/TF-PSA-Crypto#877
No description provided.