From: Pierre-Emmanuel Patry Date: Thu, 3 Aug 2023 13:28:40 +0000 (+0200) Subject: gccrs: fix lexer exponent output on tuple indices X-Git-Tag: basepoints/gcc-15~2211 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=a7eacd8879e422485a0044be37d03a05d3ed262e;p=thirdparty%2Fgcc.git gccrs: fix lexer exponent output on tuple indices The lexer did output a literal for values such as 42.e wich are invalid in rust. gcc/rust/ChangeLog: * lex/rust-lex.cc (Lexer::parse_decimal_int_or_float): Only accept digits after a dot instead of accepting any float member. Signed-off-by: Pierre-Emmanuel Patry --- diff --git a/gcc/rust/lex/rust-lex.cc b/gcc/rust/lex/rust-lex.cc index 53895c141992..8142aa0cf782 100644 --- a/gcc/rust/lex/rust-lex.cc +++ b/gcc/rust/lex/rust-lex.cc @@ -2295,7 +2295,17 @@ Lexer::parse_decimal_int_or_float (location_t loc) length += std::get<1> (initial_decimal); // detect float literal - if (current_char == '.' && is_float_digit (peek_input (1).value)) + // + // Note: + // + // We should not use is_float_digit () for this verification but instead + // directly ISDIGIT because rust does not support non digit values right after + // a dot. + // The following value is not legal in rust: + // let a = 3.e1; + // A `0` should be put between the dot and the exponent to be valid + // (eg. 3.0e1). + if (current_char == '.' && ISDIGIT (peek_input (1).value)) { // float with a '.', parse another decimal into it