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

            Bug ID: 119837
           Summary: Off-by-one truncation in a warning message from
                    gfortran with quoted string
           Product: gcc
           Version: 15.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: fortran
          Assignee: unassigned at gcc dot gnu.org
          Reporter: kargls at comcast dot net
  Target Milestone: ---

The following code,

   program foo
     i = 6Habcdef
     print *, i
   end program foo

yields

% gfcx -std=legacy -Wall -o z a.f90
a.f90:3:7:

    3 |    i = 6Habcdef
      |       1
Warning: Conversion from HOLLERITH to INTEGER(4) at (1) [-Wconversion]
a.f90:3:7:

    3 |    i = 6Habcdef
      |       1
Warning: The Hollerith constant at (1) is truncated in conversion to
'INTEGER(4' [-Wcharacter-truncation]

Notice that that the second warning truncates the type name to 'INTEGER(4'.
That is, it is missing the closing parenthesis.

This warning comes from misc.cc(hollerith2representation) 

  if (src_len > result_len)
    {
      gfc_warning (OPT_Wcharacter_truncation, "The Hollerith constant at %L "
                   "is truncated in conversion to %qs", &src->where,
                   gfc_typename(&result->ts));
    }

I checked and gfc_typename(&result->ts) returns INTEGER(4) with the closing
parenthesis.  That is, if I change the warning to

      gfc_warning (OPT_Wcharacter_truncation, "The Hollerith constant at %L "
                   "is truncated in conversion to an %qs type", &src->where,
                   gfc_typename(&result->ts));

the printed warning is 

Warning: The Hollerith constant at (1) is truncated in conversion to
an 'INTEGER(4)' type [-Wcharacter-truncation]

I also get the correct type name if I change %qs to simply %s.   So, the
issue appears to be in gfc_warning when the last  part of the warning string
is %qs.

Reply via email to