Hello world,

first of all, Happy New Year to everybody!

In 2018, we fixed 333 bugs, an average of 0.91 per day. Not bad at all.

Here is a first contribution towards reaching something similar, or even
better, for 2019.  It is a rather straightforward patch which adds a
missing warning for truncated strings in constructors.

Regression-tested. OK for trunk?

Regards

        Thomas

2019-01-01  Thomas Koenig  <tkoe...@gcc.gnu.org>

        PR fortran/82743
        * primary.c (gfc_convert_to_structure_constructor): If a character
        in a constructor is too long, add a warning with
        -Wcharacter-truncation.

2019-01-01  Thomas Koenig  <tkoe...@gcc.gnu.org>

        PR fortran/82743
        * gfortran.dg/structure_constructor_16.f90: New test.
Index: primary.c
===================================================================
--- primary.c	(Revision 267335)
+++ primary.c	(Arbeitskopie)
@@ -3074,6 +3074,12 @@ gfc_convert_to_structure_constructor (gfc_expr *e,
 
 	      actual->expr->value.character.length = c;
 	      actual->expr->value.character.string = dest;
+
+	      if (warn_line_truncation && c < e)
+		gfc_warning_now (OPT_Wcharacter_truncation,
+				 "CHARACTER expression will be truncated "
+				 "in constructor (%ld/%ld) at %L", (long int) c,
+				 (long int) e, &actual->expr->where);
 	    }
 	}
 
! { dg-do compile }
! { dg-additional-options "-Wcharacter-truncation" }
! PR 82743 - warnings were missing on truncation of structure
! constructors.
! Original test case by Simon Klüpfel
PROGRAM TEST
    TYPE A
        CHARACTER(LEN=1) :: C
    END TYPE A
    TYPE(A) :: A1
    A1=A("123") ! { dg-warning "CHARACTER expression will be truncated" }
    A1=A(C="123") ! { dg-warning "CHARACTER expression will be truncated" }
    A1%C="123" ! { dg-warning "CHARACTER expression will be truncated" }
END PROGRAM TEST

Reply via email to