mirror of
https://gcc.gnu.org/git/gcc.git
synced 2026-02-21 19:35:28 -05:00
Fortran: Fix diagnostic for ambiguous pointer function assignment [PR80012]
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 (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: Gonzalo Silvalde Blanco <gonzalo.silvalde@gmail.com>
This commit is contained in:
committed by
Harald Anlauf
parent
3a17cc11cb
commit
84ef494860
@@ -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"
|
||||
@@ -1887,19 +1888,19 @@ gfc_add_procedure (symbol_attribute *attr, procedure_type t,
|
||||
if (attr->proc != PROC_UNKNOWN && !attr->module_procedure
|
||||
&& attr->access == ACCESS_UNKNOWN)
|
||||
{
|
||||
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",
|
||||
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));
|
||||
else
|
||||
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))
|
||||
{
|
||||
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;
|
||||
}
|
||||
|
||||
14
gcc/testsuite/gfortran.dg/pr80012.f90
Normal file
14
gcc/testsuite/gfortran.dg/pr80012.f90
Normal file
@@ -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
|
||||
Reference in New Issue
Block a user