#include "coretypes.h"
#include "options.h"
#include "gfortran.h"
+#include "diagnostic-core.h"
#include "parse.h"
#include "match.h"
#include "constructor.h"
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;
}
--- /dev/null
+! { 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