tahonermann added inline comments.
================ Comment at: clang/test/Lexer/utf8-char-literal.cpp:54-56 +# if !(u8'\xff' == 0xff) +# error u8 char literal is not unsigned +# endif ---------------- tbaeder wrote: > tahonermann wrote: > > The C++ case looks good now, but the condition doesn't look right for the C > > case. The expectation is that `u8'\xff'` should not match `'\xff'` in C23 > > mode, but the test treats this as an error. If the test is passing, that > > indicates something is not being validated correctly. Shouldn't unexpected > > error diagnostics cause the test to fail? > I used `u8'\xff' != 0xff` here because that's the condition you mentioned in > the phab review adding the `u8` prefix. Using `u8'\xff' != '\xff'` indeed > fails with: > > ``` > clang/test/Lexer/utf8-char-literal.cpp Line 55: u8 char literal is not > unsigned > clang/test/Lexer/utf8-char-literal.cpp Line 54: right side of operator > converted from negative value to unsigned: -1 to 18446744073709551615 > ``` Oh! I missed the use of `0xff` vs `'\xff'`. Sorry if I mislead you. In order to avoid such subtle differences in the test, can we use the same check as for C++? // UTF-8 character literals are enabled in C23 and later and are always unsigned. #if __STDC_VERSION__ >= 202000L # if u8'\xff' == '\xff' // expected-warning {{right side of operator converted from negative value to unsigned}} # error UTF-8 character value matched ordinary character literal; this is unexpected # endif #endif CHANGES SINCE LAST ACTION https://reviews.llvm.org/D124996/new/ https://reviews.llvm.org/D124996 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits