Commit b01fff48 by Thomas Koenig

re PR fortran/83316 (ICE: minval/maxval and characters)

2017-12-09  Thomas Koenig  <tkoenig@gcc.gnu.org>

	PR fortran/83316
	* arith.c (gfc_character2character): New function.
	* arith.h: Add prototype.
	* simplify.c (gfc_convert_constant): Handle character type.

2017-12-09  Thomas Koenig  <tkoenig@gcc.gnu.org>

	PR fortran/83316
	* gfortran.dg/minval_char_5.f90: New test.

From-SVN: r255522
parent 3a4c600f
2017-12-09 Thomas Koenig <tkoenig@gcc.gnu.org>
PR fortran/83316
* arith.c (gfc_character2character): New function.
* arith.h: Add prototype.
* simplify.c (gfc_convert_constant): Handle character type.
2017-12-07 Martin Sebor <msebor@redhat.com>
PR c/81544
......
......@@ -2514,6 +2514,18 @@ gfc_int2log (gfc_expr *src, int kind)
return result;
}
/* Convert character to character. We only use wide strings internally,
so we only set the kind. */
gfc_expr *
gfc_character2character (gfc_expr *src, int kind)
{
gfc_expr *result;
result = gfc_copy_expr (src);
result->ts.kind = kind;
return result;
}
/* Helper function to set the representation in a Hollerith conversion.
This assumes that the ts.type and ts.kind of the result have already
......
......@@ -82,6 +82,7 @@ gfc_expr *gfc_hollerith2real (gfc_expr *, int);
gfc_expr *gfc_hollerith2complex (gfc_expr *, int);
gfc_expr *gfc_hollerith2character (gfc_expr *, int);
gfc_expr *gfc_hollerith2logical (gfc_expr *, int);
gfc_expr *gfc_character2character (gfc_expr *, int);
#endif /* GFC_ARITH_H */
......@@ -7130,6 +7130,13 @@ gfc_convert_constant (gfc_expr *e, bt type, int kind)
}
break;
case BT_CHARACTER:
if (type == BT_CHARACTER)
f = gfc_character2character;
else
goto oops;
break;
default:
oops:
gfc_internal_error ("gfc_convert_constant(): Unexpected type");
......
2017-12-09 Thomas Koenig <tkoenig@gcc.gnu.org>
PR fortran/83316
* gfortran.dg/minval_char_5.f90: New test.
2017-12-08 Jakub Jelinek <jakub@redhat.com>
PR rtl-optimization/83317
......
! { dg-do run }
! PR fortran/83316 - this used to ICE
program tminmaxval
implicit none
character(len=*), parameter :: b = "a"
character(len=*), parameter :: e = "c"
character(len=*), parameter :: s(3) = (/"a", "b", "c"/)
if (minval(s) /= b) then
call abort
end if
if (maxval(s) /= e) then
call abort
end if
end program tminmaxval
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