Commit e6ca33ba by Harald Anlauf Committed by Harald Anlauf

re PR fortran/89077 (ICE using * as len specifier for character parameter)

2019-02-17  Harald Anlauf  <anlauf@gmx.de>

	PR fortran/89077
	* decl.c (gfc_set_constant_character_len): Clear original string
	representation after padding has been performed to target length.

	PR fortran/89077
	* gfortran.dg/transfer_simplify_12.f90: New test.

From-SVN: r268973
parent dc20515e
2019-02-17 Harald Anlauf <anlauf@gmx.de>
PR fortran/89077
* decl.c (gfc_set_constant_character_len): Clear original string
representation after padding has been performed to target length.
2019-02-16 Jakub Jelinek <jakub@redhat.com>
PR middle-end/88074
......
......@@ -1754,6 +1754,14 @@ gfc_set_constant_character_len (gfc_charlen_t len, gfc_expr *expr,
free (expr->value.character.string);
expr->value.character.string = s;
expr->value.character.length = len;
/* If explicit representation was given, clear it
as it is no longer needed after padding. */
if (expr->representation.length)
{
expr->representation.length = 0;
free (expr->representation.string);
expr->representation.string = NULL;
}
}
}
......
2019-02-17 Harald Anlauf <anlauf@gmx.de>
PR fortran/89077
* gfortran.dg/transfer_simplify_12.f90: New test.
2019-02-17 Marek Polacek <polacek@redhat.com>
PR c++/89217 - ICE with list-initialization in range-based for loop.
......
! { dg-do run }
! { dg-options "-O -std=legacy" }
!
! Test fixes for some findings while resolving PR fortran/89077
program test
implicit none
integer :: i
character(*) ,parameter :: s = 'abcdef' ! Length will be 6
character(*) ,parameter :: h = 6Habcdef ! Length will be 8 (Hollerith!)
character(10) ,parameter :: k = 6Habcdef
character(10) ,parameter :: t = transfer (s, s)
character(10) ,save :: u = transfer (s, s)
character(10) ,parameter :: v = transfer (h, h)
character(10) ,save :: w = transfer (h, h)
character(10) ,parameter :: x = transfer ([(s(i:i),i=len(s),1,-1)], s)
character(10) ,save :: y = transfer ([(s(i:i),i=len(s),1,-1)], s)
if (len (h) /= 8) stop 1
if (h /= s) stop 2
if (k /= s) stop 3
if (t /= s) stop 4
if (u /= s) stop 5
if (v /= s) stop 6
if (w /= s) stop 7
if (x /= "fedcba") stop 8
if (y /= x) stop 9
end program test
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment