https://gcc.gnu.org/bugzilla/show_bug.cgi?id=91426

--- Comment #1 from David Malcolm <dmalcolm at gcc dot gnu.org> ---
The diagnostic is coming from
  gfc_define_st_label in gcc/fortran/symbol.c:2711

2711        gfc_error ("Duplicate statement label %d at %L and %L", labelno,
2712                   &lp->where, label_locus);

This ultimately leads to a call to diagnostic_show_locus from
gfc_diagnostic_starter, with a rich_location containing two locations.

A rich_location can contain an arbitrary number of location_t values.  The
first is considered the "primary" location, subsequent ones are considered
"secondary" locations.

diagnostic_show_locus currently colorizes locations by using the
"diagnostic_kind" color for the primary location_t within the rich_location,
and then alternating between two other colors for any secondary location_t
values within the rich_location ("range1" and "range2" within GCC_COLORS).

It's not clear to me what ought to happen here for Fortran.

Currently the fortran/error.c seems to be set up to support at most 2 locations
per diagnostic (via the %L formatting code).

Some possible ways forward:
- generalize the fortran diagnostics-handling code to support more than 2
locations (though would any diagnostics use this?)
- special-case fortran's colorization so it uses the same color for both
locations
- something else I haven't thought of

Reply via email to