diff --git a/toolchain/lexer/fuzzer_corpus/numeric_literal/a6c9027065d9ae3dc8f1b1b880d5f1775240ca0c b/toolchain/lexer/fuzzer_corpus/numeric_literal/a6c9027065d9ae3dc8f1b1b880d5f1775240ca0c new file mode 100644 index 000000000000..838afc54bb4b --- /dev/null +++ b/toolchain/lexer/fuzzer_corpus/numeric_literal/a6c9027065d9ae3dc8f1b1b880d5f1775240ca0c @@ -0,0 +1 @@ +28000018446744073709551616000000000000000052__00000000000000000000000000000000000000000012880500000000000000000000000000000000000000000000000184467440737295518446744073_000000000000000000000000000000000000000000128805000000000000000000000000000000000000000000000001844674407372955184467440737095516160000000000000000000288050000000000000000000000000000000000000000000000018446744073729551616000000000000184000000000000000500000000000000000000000000000000000000000000000184467440737295518446744073709551616000000000000000000028805000000000000000000000000000000000000000000000001844674407372955161600000000000018446744073709000000000000001288050000000000000000000000000000000000000000000000000000000000000000000000001844674407372955184467440737095516160000000000000000000288050000000000000000000000000000000000000000000000018446744073729551616000000000000000050000000000000000000000000000000000000000000000000000000001844674407372955161600000000000000005000000000000000000000000000000000000000060000000000000000000288050000000000000000000000000000000000000000000000018446744073729551616000000000000184467440737090000000000000012880500000000000000000000000000000000000000000000000000000000000000000000000018446744073729551844674407370955161600000000000000000002880500000000000000000000000000000000000000000000000184467440737295516160000000000000000500000000000000000000000000000000000000000000000000000000018446744073729551616000000000000000050000000000000000000000000000000000000000600000000000000000002880500000000000000000000000000000000000000000000000184467440737295516160000000000001844674407370900000000000000128805000000000000000000000000000000000000000000000000000000000000000000000000184467440737295518446744073709551616000000000000000000028805000000000000000000000000000000000000000000000001844674407372955161600000000000000005000000000000000000000000000000000000000000000000000000000184467440737295516160000000000000000500000000000000000000000000000000000000006000000000000000000028805000000000000000000000000000000000000000000000001844674407372955161600000000000018446744073709000000000000001288050000000000000000000000000000000000000000000000000000000000000000000000001844674407372955184467440737095516160000000000000000000288050000000000000000000000000000000000000000000000018446744073729551616000000000000000050000000000000000000000000000000000000000000000000000000001844674407372955161600000000000000005000000000000000000000000000000000000000060000000000000000000288050000000000000000000000000000000000000000000000018446744073729551616000000000000184467440737090000000000000012880500000000000000000000000000000000000000000000000000000000000000000000000018446744073729551844674407370955161600000000000000000002880500000000000000000000000000000000000000000000000184467440737295516160000000000000000500000000000000000000000000000000000000000000000000000000018446744073729551616000000000000000050000000000000000000000000000000000000000600000000000000000002880500000000000000000000000000000000000000000000000184467440737295516160000000000001844674407370900000000000000128805000000000000000000000000000000000000000000000000000000000000000000000000184467440737295518446744073709551616000000000000000000028805000000000000000000000000000000000000000000000001844674407372955161600000000000000005000000000000000000000000000000000000000000000000000000000184467440737295516160000000000000000500000000000000000000000000000000000000006000000000000000000028805000000000000000000000000000000000000000000000001844674407372955161600000000000018446744073709000000000000001288050000000000000000000000000000000000000000000000000000000000000000000000001844674407372955184467440737095516160000000000000000000288050000000000000000000000000000000000000000000000018446744073729551616000000000000000050000000000000000000000000000000000000000000000000000000001844674407372955161600000000000000005000000000000000000000000000000000000000060000000000000000000288050000000000000000000000000000000000000000000000018446744073729551616000000000000184467440737090000000000000012880500000000000000000000000000000000000000000000000000000000000000000000000018446744073729551844674407370955161600000000000000000002880500000000000000000000000000000000000000000000000184467440737295516160000000000000000500000000000000000000000000000000000000000000000000000000018446744073729551616000000000000000050000000000000000000000000000000000000000600000000000000000002880500000000000000000000000000000000000000000000000184467440737295516160000000000001844674407370900000000000000128805000000000000000000000000000000000000000000000000000000000000000000000000184467440737295518446744073709551616000000000000000000028805000000000000000000000000000000000000000000000001844674407372955161600000000000000005000000000000000000000000000000000000000000000000000000000184467440737295516160000000000000000500000000000000000000000000000000000000006000000000000000000028805000000000000000000000000000000000000000000000001844674407372955161600000000000018446744073709000000000000001288050000000000000000000000000000000000000000000000000000000000000000000000001844674407372955184467440737095516160000000000000000000288050000000000000000000000000000000000000000000000018446744073729551616000000000000000050000000000000000000000000000000000000000000000000000000001844674407372955161600000000000000005000000000000000000000000000000000000000060000000000000000000288050000000000000000000000000000000000000000000000018446744073729551616000000000000184467440737090000000000000012880500000000000000000000000000000000000000000000000000000000000000000000000018446744073729551844674407370955161600000000000000000002880500000000000000000000000000000000000000000000000184467440737295516160000000000000000500000000000000000000000000000000000000000000000000000000018446744073729551616000000000000000050000000000000000000000000000000000000000600000000000000000002880500000000000000000000000000000000000000000000000184467440737295516160000000000001844674407370900000000000000128805000000000000000000000000000000000000000000000000000000000000000000000000184467440737295518446744073709551616000000000000000000028805000000000000000000000000000000000000000000000001844674407372955161600000000000000005000000000000000000000000000000000000000000000000000000000184467440737295516160000000000000000500000000000000000000000000000000000000006000000000000000000028805000000000000000000000000000000000000000000000001844674407372955161600000000000018446744073709000000000000001288050000000000000000000000000000000000000000000000000000000000000000000000001844674407372955184467440737095516160000000000000000000288050000000000000000000000000000000000000000000000018446744073729551616000000000000000050000000000000000000000000000000000000000000000000000000001844674407372955161600000000000000005000000000000000000000000000000000000000060000000000000000000288050000000000000000000000000000000000000000000000018446744073729551616000000000000184467440737090000000000000012880500000000000000000000000000000000000000000000000000000000000000000000000018446744073729551844674407370955161600000000000000000002880500000000000000000000000000000000000000000000000184467440737295516160000000000000000500000000000000000000000000000000000000000000000000000000018446744073729551616000000000000000050000000000000000000000000000000000000000600000000000000000002880500000000000000000000000000000000000000000000000184467440737295516160000000000001844674407370900000000000000128805000000000000000000000000000000000000000000000000000000000000000000000000184467440737295518446744073709551616000000000000000000028805000000000000000000000000000000000000000000000001844674407372955161600000000000000005000000000000000000000000000000000000000000000000000000000184467440737295516160000000000000000500000000000000000000000000000000000000006000000000000000000028805000000000000000000000000000000000000000000000001844674407372955161600000000000018446744073709000000000000001288050000000000000000000000000000000000000000000000000000000000000000000000001844674407372955184467440737095516160000000000000000000288050000000000000000000000000000000000000000000000018446744073729551616000000000000000050000000000000000000000000000000000000000000000000000000001844674407372955161600000000000000005000000000000000000000000000000000000000060000000000000000000288050000000000000000000000000000000000000000000000018446744073729551616000000000000184467440737090000000000000012880500000000000000000000000000000000000000000000000000000000000000000000000018446744073729551844674407370955161600000000000000000002880500000000000000000000000000000000000000000000000184467440737295516160000000000000000500000000000000000000000000000000000000000000000000000000018446744073729551616000000000000000050000000000000000000000000000000000000000600000000000000000002880500000000000000000000000000000000000000000000000184467440737295516160000000000001844674407370900000000000000128805000000000000000000000000000000000000000000000000000000000000000000000000184467440737295518446744073709551616000000000000000000028805000000000000000000000000000000000000000000000001844674407372955161600000000000000005000000000000000000000000000000000000000000000000000000000184467440737295516160000000000000000500000000000000000000000000000000000000006000000000000000000028805000000000000000000000000000000000000000000000001844674407372955161600000000000018446744073709000000000000001288050000000000000000000000000000000000000000000000000000000000000000000000001844674407372955184467440737095516160000000000000000000288050000000000000000000000000000000000000000000000018446744073729551616000000000000000050000000000000000000000000000000000000000000000000000000001844674407372955161600000000000000005000000000000000000000000000000000000000060000000000000000000288050000000000000000000000000000000000000000000000018446744073729551616000000000000184467440737090000000000000012880500000000000000000000000000000000000000000000000000000000000000000000000018446744073729551844674407370955161600000000000000000002880500000000000000000000000000000000000000000000000184467440737295516160000000000000000500000000000000000000000000000000000000000000000000000000018446744073729551616000000000000000050000000000000000000000000000000000000000600000000000000000002880500000000000000000000000000000000000000000000000184467440737295516160000000000001844674407370900000000000000128805000000000000000000000000000000000000000000000000000000000000000000000000184467440737295518446744073709551616000000000000000000028805000000000000000000000000000000000000000000000001844674407372955161600000000000000005000000000000000000000000000000000000000000000000000000000184467440737295516160000000000000000500000000000000000000000000000000000000006000000000000000000028805000000000000000000000000000000000000000000000001844674407372955161600000000000018446744073709000000000000001288050000000000000000000000000000000000000000000000000000000000000000000000001844674407372955184467440737095516160000000000000000000288050000000000000000000000000000000000000000000000018446744073729551616000000000000000050000000000000000000000000000000000000000000000000000000001844674407372955161600000000000000005000000000000000000000000000000000000000060000000000000000000288050000000000000000000000000000000000000000000000018446744073729551616000000000000184467440737090000000000000012880500000000000000000000000000000000000000000000000000000000000000000000000018446744073729551844674407370955161600000000000000000002880500000000000000000000000000000000000000000000000184467440737295516160000000000000000500000000000000000000000000000000000000000000000000000000018446744073729551616000000000000000050000000000000000000000000000000000000000600000000000000000002880500000000000000000000000000000000000000000000000184467440737295516160000000000001844674407370900000000000000128805000000000000000000000000000000000000000000000000000000000000000000000000184467440737295518446744073709551616000000000000000000028805000000000000000000000000000000000000000000000001844674407372955161600000000000000005000000000000000000000000000000000000000000000000000000000184467440737295516160000000000000000500000000000000000000000000000000000000006000000000000000000028805000000000000000000000000000000000000000000000001844674407372955161600000000000018446744073709000000000000001288050000000000000000000000000000000000000000000000000000000000000000000000001844674407372955184467440737095516160000000000000000000288050000000000000000000000000000000000000000000000018446744073729551616000000000000000050000000000000000000000000000000000000000000000000000000001844674407372955161600000000000000005000000000000000000000000000000000000000060000000000000000000288050000000000000000000000000000000000000000000000018446744073729551616000000000000184467440737090000000000000012880500000000000000000000000000000000000000000000000000000000000000000000000018446744073729551844674407370955161600000000000000000002880500000000000000000000000000000000000000000000000184467440737295516160000000000000000500000000000000000000000000000000000000000000000000000000018446744073729551616000000000000000050000000000000000000000000000000000000000600000000000000000002880500000000000000000000000000000000000000000000000184467440737295516160000000000001844674407370900000000000000128805000000000000000000000000000000000000000000000000000000000000000000000000184467440737295518446744073709551616000000000000000000028805000000000000000000000000000000000000000000000001844674407372955161600000000000000005000000000000000000000000000000000000000000000000000000000184467440737295516160000000000000000500000000000000000000000000000000000000006000000000000000000028805000000000000000000000000000000000000000000000001844674407372955161600000000000018446744073709000000000000001288050000000000000000000000000000000000000000000000000000000000000000000000001844674407372955184467440737095516160000000000000000000288050000000000000000000000000000000000000000000000018446744073729551616000000000000000050000000000000000000000000000000000000000000000000000000001844674407372955161600000000000000005000000000000000000000000000000000000000060000000000000000000288050000000000000000000000000000000000000000000000018446744073729551616000000000000184467440737090000000000000012880500000000000000000000000000000000000000000000000000000000000000000000000018446744073729551844674407370955161600000000000000000002880500000000000000000000000000000000000000000000000184467440737295516160000000000000000500000000000000000000000000000000000000000000000000000000018446744073729551616000000000000000050000000000000000000000000000000000000000600000000000000000002880500000000000000000000000000000000000000000000000184467440737295516160000000000001844674407370900000000000000128805000000000000000000000000000000000000000000000000000000000000000000000000184467440737295518446744073709551616000000000000000000028805000000000000000000000000000000000000000000000001844674407372955161600000000000000005000000000000000000000000000000000000000000000000000000000184467440737295516160000000000000000500000000000000000000000000000000000000006000000000000000000028805000000000000000000000000000000000000000000000001844674407372955161600000000000018446744073709000000000000001288050000000000000000000000000000000000000000000000000000000000000000000000001844674407372955184467440737095516160000000000000000000288050000000000000000000000000000000000000000000000018446744073729551616000000000000000050000000000000000000000000000000000000000000000000000000001844674407372955161600000000000000005000000000000000000000000000000000000000060000000000000000000288050000000000000000000000000000000000000000000000018446744073729551616000000000000184467440737090000000000000012880500000000000000000000000000000000000000000000000000000000000000000000000018446744073729551844674407370955161600000000000000000002880500000000000000000000000000000000000000000000000184467440737295516160000000000000000500000000000000000000000000000000000000000000000000000000018446744073729551616000000000000000050000000000000000000000000000000000000000600000000000000000002880500000000000000000000000000000000000000000000000184467440737295516160000000000001844674407370900000000000000128805000000000000000000000000000000000000000000000000000000000000000000000000184467440737295518446744073709551616000000000000000000028805000000000000000000000000000000000000000000000001844674407372955161600000000000000005000000000000000000000000000000000000000000000000000000000184467440737295516160000000000000000500000000000000000000000000000000000000006000000000000000000028805000000000000000000000000000000000000000000000001844674407372955161600000000000018446744073709000000000000001288050000000000000000000000000000000000000000000000000000000000000000000000001844674407372955184467440737095516160000000000000000000288050000000000000000000000000000000000000000000000018446744073729551616000000000000000050000000000000000000000000000000000000000000000000000000001844674407372955161600000000000000005000000000000000000000000000000000000000060000000000000000000288050000000000000000000000000000000000000000000000018446744073729551616000000000000184467440737090000000000000012880500000000000000000000000000000000000000000000000000000000000000000000000018446744073729551844674407370955161600000000000000000002880500000000000000000000000000000000000000000000000184467440737295516160000000000000000500000000000000000000000000000000000000000000000000000000018446744073729551616000000000000000050000000000000000000000000000000000000000600000000000000000002880500000000000000000000000000000000000000000000000184467440737295516160000000000001844674407370900000000000000128805000000000000000000000000000000000000000000000000000000000000000000000000184467440737295518446744073709551616000000000000000000028805000000000000000000000000000000000000000000000001844674407372955161600000000000000005000000000000000000000000000000000000000000000000000000000184467440737295516160000000000000000500000000000000000000000000000000000000006000000000000000000028805000000000000000000000000000000000000000000000001844674407372955161600000000000018446744073709000000000000001288050000000000000000000000000000000000000000000000000000000000000000000000001844674407372955184467440737095516160000000000000000000288050000000000000000000000000000000000000000000000018446744073729551616000000000000000050000000000000000000000000000000000000000000000000000000001844674407372955161600000000000000005000000000000000000000000000000000000000060000000000000000000288050000000000000000000000000000000000000000000000018446744073729551616000000000000184467440737090000000000000012880500000000000000000000000000000000000000000000000000000000000000000000000018446744073729551844674407370955161600000000000000000002880500000000000000000000000000000000000000000000000184467440737295516160000000000000000500000000000000000000000000000000000000000000000000000000018446744073729551616000000000000000050000000000000000000000000000000000000000600000000000000000002880500000000000000000000000000000000000000000000000184467440737295516160000000000001844674407370900000000000000128805000000000000000000000000000000000000000000000000000000000000000000000000184467440737295518446744073709551616000000000000000000028805000000000000000000000000000000000000000000000001844674407372955161600000000000000005000000000000000000000000000000000000000000000000000000000184467440737295516160000000000000000500000000000000000000000000000000000000006000000000000000000028805000000000000000000000000000000000000000000000001844674407372955161600000000000018446744073709000000000000001288050000000000000000000000000000000000000000000000000000000000000000000000001844674407372955184467440737095516160000000000000000000288050000000000000000000000000000000000000000000000018446744073729551616000000000000000050000000000000000000000000000000000000000000000000000000001844674407372955161600000000000000005000000000000000000000000000000000000000060000000000000000000288050000000000000000000000000000000000000000000000018446744073729551616000000000000184467440737090000000000000012880500000000000000000000000000000000000000000000000000000000000000000000000018446744073729551844674407370955161600000000000000000002880500000000000000000000000000000000000000000000000184467440737295516160000000000000000500000000000000000000000000000000000000000000000000000000018446744073729551616000000000000000050000000000000000000000000000000000000000600000000000000000002880500000000000000000000000000000000000000000000000184467440737295516160000000000001844674407370900000000000000128805000000000000000000000000000000000000000000000000000000000000000000000000184467440737295518446744073709551616000000000000000000028805000000000000000000000000000000000000000000000001844674407372955161600000000000000005000000000000000000000000000000000000000000000000000000000184467440737295516160000000000000000500000000000000000000000000000000000000006000000000000000000028805000000000000000000000000000000000000000000000001844674407372955161600000000000018446744073709000000000000001288050000000000000000000000000000000000000000000000000000000000000000000000001844674407372955184467440737095516160000000000000000000288050000000000000000000000000000000000000000000000018446744073729551616000000000000000050000000000000000000000000000000000000000000000000000000001844674407372955161600000000000000005000000000000000000000000000000000000000060000000000000000000288050000000000000000000000000000000000000000000000018446744073729551616000000000000184467440737090000000000000012880500000000000000000000000000000000000000000000000000000000000000000000000018446744073729551844674407370955161600000000000000000002880500000000000000000000000000000000000000000000000184467440737295516160000000000000000500000000000000000000000000000000000000000000000000000000018446744073729551616000000000000000050000000000000000000000000000000000000000600000000000000000002880500000000000000000000000000000000000000000000000184467440737295516160000000000001844674407370900000000000000128805000000000000000000000000000000000000000000000000000000000000000000000000184467440737295518446744073709551616000000000000000000028805000000000000000000000000000000000000000000000001844674407372955161600000000000000005000000000000000000000000000000000000000000000000000000000184467440737295516160000000000000000500000000000000000000000000000000000000006000000000000000000028805000000000000000000000000000000000000000000000001844674407372955161600000000000018446744073709000000000000001288050000000000000000000000000000000000000000000000000000000000000000000000001844674407372955184467440737095516160000000000000000000288050000000000000000000000000000000000000000000000018446744073729551616000000000000000050000000000000000000000000000000000000000000000000000000001844674407372955161600000000000000005000000000000000000000000000000000000000060000000000000000000288050000000000000000000000000000000000000000000000018446744073729551616000000000000184467440737090000000000000012880500000000000000000000000000000000000000000000000000000000000000000000000018446744073729551844674407370955161600000000000000000002880500000000000000000000000000000000000000000000000184467440737295516160000000000000000500000000000000000000000000000000000000000000000000000000018446744073729551616000000000000000050000000000000000000000000000000000000000600000000000000000002880500000000000000000000000000000000000000000000000184467440737295516160000000000001844674407370900000000000000128805000000000000000000000000000000000000000000000000000000000000000000000000184467440737295518446744073709551616000000000000000000028805000000000000000000000000000000000000000000000001844674407372955161600000000000000005000000000000000000000000000000000000000000000000000000000184467440737295516160000000000000000500000000000000000000000000000000000000006000000000000000000028805000000000000000000000000000000000000000000000001844674407372955161600000000000018446744073709000000000000001288050000000000000000000000000000000000000000000000000000000000000000000000001844674407372955184467440737095516160000000000000000000288050000000000000000000000000000000000000000000000018446744073729551616000000000000000050000000000000000000000000000000000000000000000000000000001844674407372955161600000000000000005000000000000000000000000000000000000000060000000000000000000288050000000000000000000000000000000000000000000000018446744073729551616000000000000184467440737090000000000000012880500000000000000000000000000000000000000000000000000000000000000000000000018446744073729551844674407370955161600000000000000000002880500000000000000000000000000000000000000000000000184467440737295516160000000000000000500000000000000000000000000000000000000000000000000000000018446744073729551616000000000000000050000000000000000000000000000000000000000600000000000000000002880500000000000000000000000000000000000000000000000184467440737295516160000000000001844674407370900000000000000128805000000000000000000000000000000000000000000000000000000000000000000000000184467440737295518446744073709551616000000000000000000028805000000000000000000000000000000000000000000000001844674407372955161600000000000000005000000000000000000000000000000000000000000000000000000000184467440737295516160000000000000000500000000000000000000000000000000000000006000000000000000000028805000000000000000000000000000000000000000000000001844674407372955161600000000000018446744073709000000000000001288050000000000000000000000000000000000000000000000000000000000000000000000001844674407372955184467440737095516160000000000000000000288050000000000000000000000000000000000000000000000018446744073729551616000000000000000050000000000000000000000000000000000000000000000000000000001844674407372955161600000000000000005000000000000000000000000000000000000000060000000000000000000288050000000000000000000000000000000000000000000000018446744073729551616000000000000184467440737090000000000000012880500000000000000000000000000000000000000000000000000000000000000000000000018446744073729551844674407370955161600000000000000000002880500000000000000000000000000000000000000000000000184467440737295516160000000000000000500000000000000000000000000000000000000000000000000000000018446744073729551616000000000000000050000000000000000000000000000000000000000600000000000000000002880500000000000000000000000000000000000000000000000184467440737295516160000000000001844674407370900000000000000128805000000000000000000000000000000000000000000000000000000000000000000000000184467440737295518446744073709551616000000000000000000028805000000000000000000000000000000000000000000000001844674407372955161600000000000000005000000000000000000000000000000000000000000000000000000000184467440737295516160000000000000000500000000000000000000000000000000000000006000000000000000000028805000000000000000000000000000000000000000000000001844674407372955161600000000000018446744073709000000000000001288050000000000000000000000000000000000000000000000000000000000000000000000001844674407372955184467440737095516160000000000000000000288050000000000000000000000000000000000000000000000018446744073729551616000000000000000050000000000000000000000000000000000000000000000000000000001844674407372955161600000000000000005000000000000000000000000000000000000000060000000000000000000288050000000000000000000000000000000000000000000000018446744073729551616000000000000184467440737090000000000000012880500000000000000000000000000000000000000000000000000000000000000000000000018446744073729551844674407370955161600000000000000000002880500000000000000000000000000000000000000000000000184467440737295516160000000000000000500000000000000000000000000000000000000000000000000000000018446744073729551616000000000000000050000000000000000000000000000000000000000600000000000000000002880500000000000000000000000000000000000000000000000184467440737295516160000000000001844674407370900000000000000128805000000000000000000000000000000000000000000000000000000000000000000000000184467440737295518446744073709551616000000000000000000028805000000000000000000000000000000000000000000000001844674407372955161600000000000000005000000000000000000000000000000000000000000000000000000000184467440737295516160000000000000000500000000000000000000000000000000000000000000001844674407372616000146744073709551440700000000000000000000000000001288050000000000000000000000000000000000000000000000018446744073729551844674407370955160000000000000000000000000000000000000000000184467440727295516160000000000001840000000000000005000000000000000000000000000000000000000000000001844674407372955184467440737095516160000000000000000000288050000000000000002000000000000000000000000000000018446744073729551616000000000000184467440737090000000000000012880500000000000000000000000000000000000000000000000184467440737295518446744073709551616000000000000000000028805000000000000000200000000000000000000000000000001844674407372955161600000000000018446744073709000000000000001288050000000000000000000000000000000000000000000000018446744073729551844674407370955161600000000000000000002880500000000000000000000000000000000184467440737295518446744073709551616000000000000000000028805000000000000000000000000000000000000000000000001844674407372955161600000000000018446744073709551000000000000000000128805000000000000000000000000000000000000000000000000000018446744073729551616000000000000000050000000000000000000000000000000000000000000000000000000001844674407372955161600000000000000005000001616000000000000000050000000000000000000000000000000000000000000000000000000001844674407372955161600000000000000005000001616000000000000000050000000000000000000000000000000000000000000000000000000001844674407372955161600000000000000005000001616000000000000000050000000000000000000000000000000000000000000000000000000001844674407372955161600000000000000005000001616000000000000000050000000000000000000000000000000000000000000000000000000001844674407372955161600000000000000005000001616000000000000000050000000000000000000000000000000000000000000000000000000001844674407372955161600000000000000005000001616000000000000000050000000000000000000000000000000000000000000000000000000001844674407372955161600000000000000005000001616000000000000000050000000000000000000000000000000000000000000000000000000001844674407372955161600000000000000005000001616000000000000000050000000000000000000000000000000000000000000000000000000001844674407372955161600000000000000005000001616000000000000000050000000000000000000000000000000000000000000000000000000001844674407372955161600000000000000005000001616000000000000000050000000000000000000000000000000000000000000000000000000001844674407372955161600000000000000005000001616000000000000000050000000000000000000000000000000000000000000000000000000001844674407372955161600000000000000005000001616000000000000000050000000000000000000000000000000000000000000000000000000001844674407372955161600000000000000005000001616000000000000000050000000000000000000000000000000000000000000000000000000001844674407372955161600000000000000005000001616000000000000000050000000000000000000000000000000000000000000000000000000001844674407372955161600000000000000005000001616000000000000000050000000000000000000000000000000000000000000000000000000001844674407372955161600000000000000005000001616000000000000000050000000000000000000000000000000000000000000000000000000001844674407372955161600000000000000005000001616000000000000000050000000000000000000000000000000000000000000000000000000001844674407372955161600000000000000005000001616000000000000000050000000000000000000000000000000000000000000000000000000001844674407372955161600000000000000005000001616000000000000000050000000000000000000000000000000000000000000000000000000001844674407372955161600000000000000005000001616000000000000000050000000000000000000000000000000000000000000000000000000001844674407372955161600000000000000005000001616000000000000000050000000000000000000000000000000000000000000000000000000001844674407372955161600000000000000005000001616000000000000000050000000000000000000000000000000000000000000000000000000001844674407372955161600000000000000005000001616000000000000000050000000000000000000000000000000000000000000000000000000001844674407372955161600000000000000005000001616000000000000000050000000000000000000000000000000000000000000000000000000001844674407372955161600000000000000005000001616000000000000000050000000000000000000000000000000000000000000000000000000001844674407372955161600000000000000005000001616000000000000000050000000000000000000000000000000000000000000000000000000001844674407372955161600000000000000005000001616000000000000000050000000000000000000000000000000000000000000000000000000001844674407372955161600000000000000005000001616000000000000000050000000000000000000000000000000000000000000000000000000001844674407372955161600000000000000005000001616000000000000000050000000000000000000000000000000000000000000000000000000001844674407372955161600000000000000005000001616000000000000000050000000000000000000000000000000000000000000000000000000001844674407372955161600000000000000005000001616000000000000000050000000000000000000000000000000000000000000000000000000001844674407372955161600000000000000005000001616000000000000000050000000000000000000000000000000000000000000000000000000001844674407372955161600000000000000005000001616000000000000000050000000000000000000000000000000000000000000000000000000001844674407372955161600000000000000005000001616000000000000000050000000000000000000000000000000000000000000000000000000001844674407372955161600000000000000005000001616000000000000000050000000000000000000000000000000000000000000000000000000001844674407372955161600000000000000005000001616000000000000000050000000000000000000000000000000000000000000000000000000001844674407372955161600000000000000005000001616000000000000000050000000000000000000000000000000000000000000000000000000001844674407372955161600000000000000005000001616000000000000000050000000000000000000000000000000000000000000000000000000001844674407372955161600000000000000005000001616000000000000000050000000000000000000000000000000000000000000000000000000001844674407372955161600000000000000005000001616000000000000000000000000000001844674407372955184467440737095516160000000000000000000288050000000000000002000000000000000000000000000000018446744073729551616000000000000184467440737090000000000000012880500000000000000000000000000000000000000000000000184467440737295518446744073709551616000000000000000000028805000000000000000000000000000000001844674407372955184467440737095516160000000000000000000288050000000000000000000000000000000000000000000000018446744073729551616000000000000184467440737095510000000000000000001288050000000000000000000000000000000000000000000000000000184467440737295516160000000000000000500000161600000000000000005000000000000000000000000000000000000000000000000000000000184467440737295516160000000000000000500000161600000000000000005000000000000000000000000000000000000000000000000000000000184467440737295516160000000000000000500000161600000000000000005000000000000000000000000000000000000000000000000000000000184467440737295516160000000000000000500000161600000000000000005000000000000000000000000000000000000000000000000000000000184467440737295516160000000000000000500000161600000000000000005000000000000000000000000000000000000000000000000000000000184467440737295516160000000000000000500000161600000000000000005000000000000000000000000000000000000000000000000000000000184467440737295516160000000000000000500000161600000000000000005000000000000000000000000000000000000000000000000000000000184467440737295516160000000000000000500000161600000000000000005000000000000000000000000000000000000000000000000000000000184467440737295516160000000000000000500000161600000000000000005000000000000000000000000000000000000000000000000000000000184467440737295516160000000000000000500000161600000000000000005000000000000000000000000000000000000000000000000000000000184467440737295516160000000000000000500000161600000000000000005000000000000000000000000000000000000000000000000000000000184467440737295516160000000000000000500000161600000000000000005000000000000000000000000000000000000000000000000000000000184467440737295516160000000000000000500000161600000000000000005000000000000000000000000000000000000000000000000000000000184467440737295516160000000000000000500000161600000000000000005000000000000000000000000000000000000000000000000000000000184467440737295516160000000000000000500000161600000000000000005000000000000000000000000000000000000000000000000000000000184467440737295516160000000000000000500000161600000000000000005000000000000000000000000000000000000000000000000000000000184467440737295516160000000000000000500000161600000000000000005 0000000000000000000000000000000000000000000000000000000018446744073729551616000000000000000050000016160000000000000000500000000000000000000000000000000000000000000000000000000018446744073729551616000000000000000050000016160000000000000000500000000000000000000000000000000000000000000000000000000018446744073729551616000000000000000050000016160000000000000000500000000000000000000000000000000000000000000000000000000018446744073729551616000000000000000050000016160000000000000000500000000000000000000000000000000000000000000000000000000018446744073729551616000000000000000050000016160000000000000000500000000000000000000000000000000000000000000000000000000018446744073729551616000000000000000050000016160000000000000000500000000000000000000000000000000000000000000000000000000018446744073729551616000000000000000050000016160000000000000000500000000000000000000000000000000000000000000000000000000018446744073729551616000000000000000050000016160000000000000000500000000000000000000000000000000000000000000000000000000018446744073729551616000000000000000050000016160000000000000000500000000000000000000000000000000000000000000000000000000018446744073729551616000000000000000050000016160000000000000000500000000000000000000000000000000000000000000000000000000018446744073729551616000000000000000050000016160000000000000000500000000000000000000000000000000000000000000000000000000018446744073729551616000000000000000050000016160000000000000000500000000000000000000000000000000000000000000000000000000018446744073729551616000000000000000050000016160000000000000000500000000000000000000000000000000000000000000000000000000018446744073729551616000000000000000050000016160000000000000000500000000000000000000000000000000000000000000000000000000018446744073729551616000000000000000050000016160000000000000000500000000000000000000000000000000000000000000000000000000018446744073729551616000000000000000050000016160000000000000000500000000000000000000000000000000000000000000000000000000018446744073729551616000000000000000050000016160000000000000000500000000000000000000000000000000000000000000000000000000018446744073729551616000000000000000050000016160000000000000000500000000000000000000000000000000000000000000000000000000018446744073729551616000000000000000050000016160000000000000000500000000000000000000000000000000000000000000000000000000018446744073729551616000000000000000050000016160000000000000000500000000000000000000000000000000000000000000000000000000018446744073729551616000000000000000050000016160000000000000000500000000000000000000000000000000000000000000000000000000018446744073729551616000000000000000050000016160000000000000000500000000000000000000000000000000000000000000000000000000018446744073729551616000000000000000050000016160000000000000000500000000000000000000000000000000000000000000000000000000018446744073729551616000000000000000050000016160000000000000000500000000000000000000000000000000000000000000000000000000018446744073729551616000000000000000050000016160000000000000000500000000000000000000000000000000000000000000000000000000018446744073729551616000000000000000050000016160000000000000000500000000000000000000000000000000000000000000000000000000018446744073729551616000000000000000050000016160000000000000000500000000000000000000000000000000000000000000000000000000018446744073729551616000000000000000050000016160000000000000000500000000000000000000000000000000000000000000000000000000018446744073729551616000000000000000050000016160000000000000000500000000000000000000000000000000000000000000000000000000018446744073729551616000000000000000050000016160000000000000000500000000000000000000000000000000000000000000000000000000018446744073729551616000000000000000050000016160000000000000000500000000000000000000000000000000000000000000000000000000018446744073729551616000000000000000050000016160000000000000000500000000000000000000000000000000000000000000000000000000018446744073729551616000000000000000050000016160000000000000000500000000000000000000000000000000000000000000000000000000018446744073729551616000000000000000050000016160000000000000000500000000000000000000000000000000000000000000000000000000018446744073729551616000000000000000050000016160000000000000000500000000000000000000000000000000000000000000000000000000018446744073729551616000000000000000050000016160000000000000000500000000000000000000000000000000000000000000000000000000018446744073729551616000000000000000050000016160000000000000000500000000000000000000000000000000000000000000000000000000018446744073729551616000000000000000050000000000000000000000000000000000000000000000184467440737261600014674407370(9547440737000184467440737261600014674407370(954744073700018446744073726160001467440950737ÐÆÊÊÎÉÊÐ616……1256……257777 \ No newline at end of file diff --git a/toolchain/lexer/fuzzer_corpus/tokenized_buffer/eec540334e2254864e033353ec23daa556fadcd0 b/toolchain/lexer/fuzzer_corpus/tokenized_buffer/eec540334e2254864e033353ec23daa556fadcd0 new file mode 100644 index 000000000000..d35da287909c Binary files /dev/null and b/toolchain/lexer/fuzzer_corpus/tokenized_buffer/eec540334e2254864e033353ec23daa556fadcd0 differ diff --git a/toolchain/lexer/numeric_literal.cpp b/toolchain/lexer/numeric_literal.cpp index e9fb3e7ebe83..8e2751fb1ccf 100644 --- a/toolchain/lexer/numeric_literal.cpp +++ b/toolchain/lexer/numeric_literal.cpp @@ -80,6 +80,21 @@ struct WrongRealLiteralExponent { char expected; }; + +struct TooManyDigits { + static constexpr llvm::StringLiteral ShortName = "syntax-invalid-number"; + + auto Format() -> std::string { + return llvm::formatv( + "Found a sequence of {0} digits, which is greater than the " + "limit of {1}.", + count, limit) + .str(); + } + + size_t count; + size_t limit; +}; } // namespace auto LexedNumericLiteral::Lex(llvm::StringRef source_text) @@ -366,6 +381,21 @@ auto LexedNumericLiteral::Parser::CheckDigitSequence( CheckDigitSeparatorPlacement(text, radix, num_digit_separators); } + // llvm::getAsInteger is used for parsing, but it's quadratic and visibly slow + // on large integer values. This limit exists to avoid hitting those limits. + // Per https://github.com/carbon-language/carbon-lang/issues/980, it may be + // feasible to optimize integer parsing in order to address performance if + // this limit becomes an issue. + // + // 2^128 would be 39 decimal digits or 128 binary. In either case, this limit + // is far above the threshold for normal integers. + constexpr size_t DigitLimit = 1000; + if (text.size() > DigitLimit) { + emitter_.EmitError( + text.begin(), {.count = text.size(), .limit = DigitLimit}); + return {.ok = false}; + } + return {.ok = true, .has_digit_separators = (num_digit_separators != 0)}; } diff --git a/toolchain/lexer/numeric_literal_test.cpp b/toolchain/lexer/numeric_literal_test.cpp index b067b7c65442..4ac2e1847f64 100644 --- a/toolchain/lexer/numeric_literal_test.cpp +++ b/toolchain/lexer/numeric_literal_test.cpp @@ -331,5 +331,11 @@ TEST_F(NumericLiteralTest, ValidatesRealLiterals) { } } +TEST_F(NumericLiteralTest, TooManyDigits) { + std::string long_number(2000, '1'); + EXPECT_THAT(Parse(long_number), HasUnrecoverableError()); + EXPECT_TRUE(error_tracker.SeenError()); +} + } // namespace } // namespace Carbon