re PR fortran/85896 (ICE in gfc_convert_constant(): Unexpected type)

2018-10-30  Thomas Koenig  <tkoenig@gcc.gnu.org>

	PR fortran/85896
	* simplify.c (simplify_min_max): Do not convert the type of the
	return expression.

2018-10-30  Thomas Koenig  <tkoenig@gcc.gnu.org>

	PR fortran/85896
	* gfortran.dg/min_max_type.f90: New test.

From-SVN: r265649
This commit is contained in:
Thomas Koenig 2018-10-30 23:04:10 +00:00
parent 91e3ec29af
commit 0a8949a3f2
4 changed files with 21 additions and 11 deletions

View file

@ -1,3 +1,9 @@
2018-10-30 Thomas Koenig <tkoenig@gcc.gnu.org>
PR fortran/85896
* simplify.c (simplify_min_max): Do not convert the type of the
return expression.
2017-10-28 Thomas Koenig <tkoenig@gcc.gnu.org>
PR fortran/54613

View file

@ -4961,11 +4961,9 @@ static gfc_expr *
simplify_min_max (gfc_expr *expr, int sign)
{
gfc_actual_arglist *arg, *last, *extremum;
gfc_intrinsic_sym * specific;
last = NULL;
extremum = NULL;
specific = expr->value.function.isym;
arg = expr->value.function.actual;
@ -4995,15 +4993,6 @@ simplify_min_max (gfc_expr *expr, int sign)
if (expr->value.function.actual->next != NULL)
return NULL;
/* Convert to the correct type and kind. */
if (expr->ts.type != BT_UNKNOWN)
return gfc_convert_constant (expr->value.function.actual->expr,
expr->ts.type, expr->ts.kind);
if (specific->ts.type != BT_UNKNOWN)
return gfc_convert_constant (expr->value.function.actual->expr,
specific->ts.type, specific->ts.kind);
return gfc_copy_expr (expr->value.function.actual->expr);
}

View file

@ -1,3 +1,8 @@
2018-10-30 Thomas Koenig <tkoenig@gcc.gnu.org>
PR fortran/85896
* gfortran.dg/min_max_type.f90: New test.
2018-10-30 Martin Sebor <msebor@redhat.com>
PR middle-end/87041

View file

@ -0,0 +1,10 @@
! { dg-do run }
! Make sure this is evaluated correctly even though max
! has been declared integer.
! Original test case by Gerhard Steinmetz.
program main
integer :: max
character(len=1), parameter :: c = max('a','b')
character(len=1), parameter :: d = min('a','b')
if (c /= 'b' .or. d /= 'a') stop 1
end program main