[clang] [clang] Fix for Assertion `(T->hasSignedIntegerRepresentation() || T->isSignedFixedPointType()) && "Unexpected signed integer or fixed point type"' failed. (PR #195945)

David Spickett via cfe-commits cfe-commits at lists.llvm.org
Thu May 7 02:38:41 PDT 2026


================
@@ -525,13 +519,12 @@ Bug Fixes in This Version
 - Clang now emits an error for friend declarations of lambda members. (#GH26540)
 - Fixed a crash caused by lambda capture handling in delayed default arguments. (#GH176534)
 - Fixed a crash when parsing invalid ``static_assert`` declarations with string-literal messages (#GH187690).
+- Fixed an assert/crash in ``__builtin_va_arg`` when the argument type is an enum without a correspoding signed type (#GH191698).
----------------
DavidSpickett wrote:

I haven't reproduced the bug myself but I think users would think of this purely as a crash so you can say "a crash" rather than "assert/crash". You're not wrong to say that but most people won't care that the assert was the cause.

Fix the spelling of:
correspoding -> corresponding

Can you explain a bit more what corresponding means here?

Does it mean that the crash happened when you have an enum with a underlying type that doesn't have an equivalent signed type?

So looking at the test case, I see `char16_t` and I assume there is no `char16_signed_t`.

In which case I would expand the wording a bit:
> when the argument type is an enum whose underlying type does not have a corresponding signed type

I haven't read the standards but I think the type of the enum is the enum itself, then there's the underlying type and the underlying type is the key here.

https://github.com/llvm/llvm-project/pull/195945


More information about the cfe-commits mailing list