[PATCH, v4] Fortran: detect blanks within literal constants in free-form mode [PR92805]

Mikael Morin morin-mikael@orange.fr
Sun Jul 31 08:35:20 GMT 2022


Le 30/07/2022 à 21:40, Harald Anlauf a écrit :
> Hi Mikael,
> 
> Am 30.07.22 um 10:28 schrieb Mikael Morin:
>> Meh! We killed one check for gfc_current_form but the other one is still
>> there.
>> OK, match_kind_param calls two functions that also gobble space, so
>> there is work remaining here.
>> So please make match_small_literal_constant and gfc_match_name
>> space-gobbling wrappers around space-non-gobbling inner functions and
>> call those inner functions instead in match_kind_param.
> 
> well, here's the shortest solution I could come up with.
> I added a new argument to 3 functions used in parsing that
> controls the gobbling of whitespace.  We use this to handle
> whitespace for numerical literals, while the parsing of string
> literals remains as in the previous version of the patch.
> 
> This version obviously ignores Thomas' request, as that would
> require to treat gfc_match_char specially...
> 
> Regtested again.  OK now?

> 	PR fortran/92805
> 	* match.cc (gfc_match_small_literal_int): Make gobbling of leading
> 	whitespace optional.
> 	(gfc_match_name): Likewise.
> 	(gfc_match_char): Likewise.
> 	* match.h (gfc_match_small_literal_int): Adjust prototype.
> 	(gfc_match_name): Likewise.
> 	(gfc_match_char): Likewise.
> 	* primary.cc (match_kind_param): Match small literal int or name
> 	without gobbling whitespace.
> 	(get_kind): Do not skip over blanks in free-form mode.
I think the "in free-form mode" applied to the preceding patches but can 
be dropped now.
> 	(match_string_constant): Likewise.

> diff --git a/gcc/fortran/match.cc b/gcc/fortran/match.cc
> index 1aa3053e70e..c0dc0e89361 100644
> --- a/gcc/fortran/match.cc
> +++ b/gcc/fortran/match.cc
> @@ -457,7 +457,7 @@ gfc_match_eos (void)
>     will be set to the number of digits.  */
Please add a note about GOBBLE_WS here, like you did for gfc_match_char.
> 
>  match
> -gfc_match_small_literal_int (int *value, int *cnt)
> +gfc_match_small_literal_int (int *value, int *cnt, bool gobble_ws)
>  {
>    locus old_loc;
>    char c;
(...)
> @@ -611,14 +612,15 @@ gfc_match_label (void)
>     than GFC_MAX_SYMBOL_LEN.  */
Same here.
>  
>  match
> -gfc_match_name (char *buffer)
> +gfc_match_name (char *buffer, bool gobble_ws)
>  {
>    locus old_loc;
>    int i;
>    char c;
>  
(...)
> @@ -1052,16 +1054,19 @@ cleanup:
>  }
>  
>  
> -/* Tries to match the next non-whitespace character on the input.
> -   This subroutine does not return MATCH_ERROR.  */
> +/* Tries to match the next non-whitespace character on the input.  This
> +   subroutine does not return MATCH_ERROR.  When gobble_ws is false, do not
> +   skip over leading blanks.
> +*/
There should be no line feed before end of comment.

OK with those changes.
thanks for your patience.

Mikael



More information about the Gcc-patches mailing list