[PATCH] Fortran/OpenMP: Add support for 'close' in map clause

Jakub Jelinek jakub@redhat.com
Thu May 20 08:57:17 GMT 2021


On Thu, May 20, 2021 at 10:47:52AM +0200, Marcel Vollweiler wrote:
> --- a/gcc/fortran/openmp.c
> +++ b/gcc/fortran/openmp.c
> @@ -1710,10 +1710,21 @@ gfc_match_omp_clauses (gfc_omp_clauses **cp, const omp_mask mask,
>  	      && gfc_match ("map ( ") == MATCH_YES)
>  	    {
>  	      locus old_loc2 = gfc_current_locus;
> -	      bool always = false;
> +
> +	      int always = 0;
> +	      int close = 0;

The vertical space should be after the 3 variable declarations
rather than in between 1 and 2.

> +	      for (;;)
> +		{
> +		  if (gfc_match ("always ") == MATCH_YES)
> +		    always++;
> +		  else if (gfc_match ("close ") == MATCH_YES)
> +		    close++;
> +		  else
> +		    break;
> +		  gfc_match (", ");
> +		}
> +
>  	      gfc_omp_map_op map_op = OMP_MAP_TOFROM;
> -	      if (gfc_match ("always , ") == MATCH_YES)
> -		always = true;
>  	      if (gfc_match ("alloc : ") == MATCH_YES)
>  		map_op = OMP_MAP_ALLOC;
>  	      else if (gfc_match ("tofrom : ") == MATCH_YES)
> @@ -1726,11 +1737,24 @@ gfc_match_omp_clauses (gfc_omp_clauses **cp, const omp_mask mask,
>  		map_op = OMP_MAP_RELEASE;
>  	      else if (gfc_match ("delete : ") == MATCH_YES)
>  		map_op = OMP_MAP_DELETE;
> -	      else if (always)
> +	      else
>  		{
>  		  gfc_current_locus = old_loc2;
> -		  always = false;
> +		  always = 0;
> +		  close = 0;
>  		}
> +
> +	      if (always > 1)
> +		{
> +		  gfc_error ("too many %<always%> modifiers at %C");
> +		  break;
> +		}
> +	      if (close > 1)
> +		{
> +		  gfc_error ("too many %<close%> modifiers at %C");
> +		  break;

I think it would be nice to show the locus of the second always or close
modifier.  Could the loop above remember that locus when always++ == 1
(or ++always == 2) and similarly for close and use it when printing the
error?
And similarly to the C/C++ patch, better use always_modifier and
close_modifier as the names of the variables, as close is a function and
could be defined as macro.

	Jakub



More information about the Gcc-patches mailing list