Re: [PATCH v2] Fortran: Fix diagnostic for ambiguous pointer function assignment [PR80012]

Harald Anlauf <[email protected]>
Newsgroups gmane.comp.gcc.patches,gmane.comp.gcc.fortran
Message-ID <[email protected]>
Hi Gonzalo,

this is basically OK for mainline.  But please check the indentation;
in my mail reader it appears that the part starting with

 > +    auto_diagnostic_group d;

is off by 2 columns.

Thanks,
Harald


On 2/16/26 22:25, Gonzalosilvalde wrote:
> The error message for an ambiguous pointer function assignment contained
> a FIXME and an embedded newline that the diagnostics printer does not
> handle.  Split the single gfc_error call into a gfc_error for the main
> diagnostic and an inform note for the F2008 explanation, wrapped in an
> auto_diagnostic_group.
> 
> 	PR fortran/80012
> 
> gcc/fortran/ChangeLog:
> 
> 	* symbol.cc: Include diagnostic-core.h.
> 	(gfc_add_procedure): Split error into gfc_error and inform
> 	using auto_diagnostic_group.
> 
> gcc/testsuite/ChangeLog:
> 
> 	* gfortran.dg/pr80012.f90: New test.
> 
> Signed-off-by: Gonzalosilvalde <[email protected]>
> ---
> Hi Harald,
> 
> Thanks for the quick review. Here is the patch with the suggestion.
> 
>   gcc/fortran/symbol.cc                 | 23 ++++++++++++-----------
>   gcc/testsuite/gfortran.dg/pr80012.f90 | 14 ++++++++++++++
>   2 files changed, 26 insertions(+), 11 deletions(-)
>   create mode 100644 gcc/testsuite/gfortran.dg/pr80012.f90
> 
> diff --git a/gcc/fortran/symbol.cc b/gcc/fortran/symbol.cc
> index 5a68f44ca63..a1f1b151a96 100644
> --- a/gcc/fortran/symbol.cc
> +++ b/gcc/fortran/symbol.cc
> @@ -24,6 +24,7 @@ along with GCC; see the file COPYING3.  If not see
>   #include "coretypes.h"
>   #include "options.h"
>   #include "gfortran.h"
> +#include "diagnostic-core.h"
>   #include "parse.h"
>   #include "match.h"
>   #include "constructor.h"
> @@ -1886,19 +1887,19 @@ gfc_add_procedure (symbol_attribute *attr, procedure_type t,
>     if (attr->proc != PROC_UNKNOWN && !attr->module_procedure
>         && attr->access == ACCESS_UNKNOWN)
>       {
> +    auto_diagnostic_group d;
> +    gfc_error ("%s procedure at %L is already declared as %s procedure",
> +	       gfc_code2string (procedures, t), where,
> +	       gfc_code2string (procedures, attr->proc));
>         if (attr->proc == PROC_ST_FUNCTION && t == PROC_INTERNAL
>   	  && !gfc_notification_std (GFC_STD_F2008))
> -	gfc_error ("%s procedure at %L is already declared as %s "
> -		   "procedure. \nF2008: A pointer function assignment "
> -		   "is ambiguous if it is the first executable statement "
> -		   "after the specification block. Please add any other "
> -		   "kind of executable statement before it. FIXME",
> -		 gfc_code2string (procedures, t), where,
> -		 gfc_code2string (procedures, attr->proc));
> -      else
> -	gfc_error ("%s procedure at %L is already declared as %s "
> -		   "procedure", gfc_code2string (procedures, t), where,
> -		   gfc_code2string (procedures, attr->proc));
> +	{
> +	inform (gfc_get_location (where),
> +		"F2008: A pointer function assignment is ambiguous if it is "
> +		"the first executable statement after the specification "
> +		"block.  Please add any other kind of executable "
> +		"statement before it");
> +	}
>   
>         return false;
>       }
> diff --git a/gcc/testsuite/gfortran.dg/pr80012.f90 b/gcc/testsuite/gfortran.dg/pr80012.f90
> new file mode 100644
> index 00000000000..da626d565d8
> --- /dev/null
> +++ b/gcc/testsuite/gfortran.dg/pr80012.f90
> @@ -0,0 +1,14 @@
> +! { dg-do compile }
> +! { dg-options "-std=gnu" }
> +! PR fortran/80012
> +! Test that the error message for ambiguous pointer function assignment
> +! is split into an error and an informational note, without FIXME.
> +
> +two() = 7
> +contains
> +  function two () ! { dg-error "INTERNAL-PROC procedure at .1. is already declared as STATEMENT-PROC procedure" }
> +! { dg-message "F2008: A pointer function assignment is ambiguous" "" { target *-*-* } 9 }
> +    integer, pointer  :: two
> +    allocate(two)
> +  end function two
> +end
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.