@@ -321,6 +321,8 @@ static void characterLiteral()
321321 ASSERT_THROW_EQUALS (simplecpp::characterLiteralToLL (" u8'\343\201\202 '" ), std::runtime_error, " code point too large" );
322322 ASSERT_THROW_EQUALS (simplecpp::characterLiteralToLL (" u8'\360\223\200\200 '" ), std::runtime_error, " code point too large" );
323323
324+ ASSERT_THROW_EQUALS (simplecpp::characterLiteralToLL (" '\\ U11111111" ), std::runtime_error, " code point too large" );
325+
324326 ASSERT_EQUALS (' \x89 ' , simplecpp::characterLiteralToLL (" '\x89 '" ));
325327 ASSERT_THROW_EQUALS (simplecpp::characterLiteralToLL (" U'\x89 '" ), std::runtime_error, " assumed UTF-8 encoded source, but sequence is invalid" );
326328
@@ -372,6 +374,33 @@ static void characterLiteral()
372374
373375 ASSERT_THROW_EQUALS (simplecpp::characterLiteralToLL (" U'\xed\xa0\x80 '" ), std::runtime_error, " assumed UTF-8 encoded source, but sequence is invalid" );
374376 ASSERT_THROW_EQUALS (simplecpp::characterLiteralToLL (" U'\xed\xbf\xbf '" ), std::runtime_error, " assumed UTF-8 encoded source, but sequence is invalid" );
377+
378+ ASSERT_THROW_EQUALS (simplecpp::characterLiteralToLL (" " ), std::runtime_error, " expected a character literal" );
379+ ASSERT_THROW_EQUALS (simplecpp::characterLiteralToLL (" LU" ), std::runtime_error, " expected a character literal" );
380+ ASSERT_THROW_EQUALS (simplecpp::characterLiteralToLL (" ;\n " ), std::runtime_error, " expected a character literal" );
381+ ASSERT_THROW_EQUALS (simplecpp::characterLiteralToLL (" u8U" ), std::runtime_error, " expected a character literal" );
382+
383+ ASSERT_THROW_EQUALS (simplecpp::characterLiteralToLL (" '\n\n " ), std::runtime_error, " raw single quotes and newlines not allowed in character literals" );
384+ ASSERT_THROW_EQUALS (simplecpp::characterLiteralToLL (" ''&" ), std::runtime_error, " raw single quotes and newlines not allowed in character literals" );
385+
386+ ASSERT_THROW_EQUALS (simplecpp::characterLiteralToLL (" L'\f ff" ), std::runtime_error, " multiple characters only supported in narrow character literals" );
387+
388+ ASSERT_THROW_EQUALS (simplecpp::characterLiteralToLL (" '\\\n " ), std::runtime_error, " unexpected end of character literal" );
389+
390+ ASSERT_THROW_EQUALS (simplecpp::characterLiteralToLL (" '" ), std::runtime_error, " missing closing quote in character literal" );
391+ ASSERT_THROW_EQUALS (simplecpp::characterLiteralToLL (" u'" ), std::runtime_error, " missing closing quote in character literal" );
392+ ASSERT_THROW_EQUALS (simplecpp::characterLiteralToLL (" L'" ), std::runtime_error, " missing closing quote in character literal" );
393+ ASSERT_THROW_EQUALS (simplecpp::characterLiteralToLL (" 'a" ), std::runtime_error, " missing closing quote in character literal" );
394+
395+ ASSERT_THROW_EQUALS (simplecpp::characterLiteralToLL (" ''" ), std::runtime_error, " empty character literal" );
396+ ASSERT_THROW_EQUALS (simplecpp::characterLiteralToLL (" L''" ), std::runtime_error, " empty character literal" );
397+ ASSERT_THROW_EQUALS (simplecpp::characterLiteralToLL (" U''" ), std::runtime_error, " empty character literal" );
398+ ASSERT_THROW_EQUALS (simplecpp::characterLiteralToLL (" u''" ), std::runtime_error, " empty character literal" );
399+ ASSERT_THROW_EQUALS (simplecpp::characterLiteralToLL (" u8''" ), std::runtime_error, " empty character literal" );
400+
401+ ASSERT_THROW_EQUALS (simplecpp::characterLiteralToLL (" '\\ 555" ), std::runtime_error, " numeric escape sequence too large" );
402+
403+ ASSERT_THROW_EQUALS (simplecpp::characterLiteralToLL (" u'Ó" ), std::runtime_error, " assumed UTF-8 encoded source, but character literal ends unexpectedly" );
375404}
376405
377406static void combineOperators_floatliteral ()
0 commit comments