mirror of git://gcc.gnu.org/git/gcc.git
re PR fortran/88658 (Intrinsic MAX1 returns a REAL result, should be INTEGER.)
2019-01-06 Thomas Koenig <tkoenig@gcc.gnu.org> PR fortran/88658 * gfortran.h: Add macro gfc_real_4_kind * simplify.c (simplify_min_max): Special case for the types of AMAX0, AMIN0, MAX1 and MIN1, which actually change the types of their arguments. 2019-01-06 Thomas Koenig <tkoenig@gcc.gnu.org> PR fortran/88658 * gfortran.dg/min_max_type_2.f90: New test. From-SVN: r267609
This commit is contained in:
parent
8f4813c1b7
commit
13b1afe4de
|
|
@ -1,3 +1,11 @@
|
||||||
|
2019-01-06 Thomas Koenig <tkoenig@gcc.gnu.org>
|
||||||
|
|
||||||
|
PR fortran/88658
|
||||||
|
* gfortran.h: Add macro gfc_real_4_kind
|
||||||
|
* simplify.c (simplify_min_max): Special case for the types of
|
||||||
|
AMAX0, AMIN0, MAX1 and MIN1, which actually change the types of
|
||||||
|
their arguments.
|
||||||
|
|
||||||
2019-01-05 Janus Weil <janus@gcc.gnu.org>
|
2019-01-05 Janus Weil <janus@gcc.gnu.org>
|
||||||
|
|
||||||
PR fortran/88009
|
PR fortran/88009
|
||||||
|
|
|
||||||
|
|
@ -2967,6 +2967,7 @@ extern int gfc_character_storage_size;
|
||||||
|
|
||||||
#define gfc_logical_4_kind 4
|
#define gfc_logical_4_kind 4
|
||||||
#define gfc_integer_4_kind 4
|
#define gfc_integer_4_kind 4
|
||||||
|
#define gfc_real_4_kind 4
|
||||||
|
|
||||||
/* symbol.c */
|
/* symbol.c */
|
||||||
void gfc_clear_new_implicit (void);
|
void gfc_clear_new_implicit (void);
|
||||||
|
|
|
||||||
|
|
@ -4963,6 +4963,8 @@ static gfc_expr *
|
||||||
simplify_min_max (gfc_expr *expr, int sign)
|
simplify_min_max (gfc_expr *expr, int sign)
|
||||||
{
|
{
|
||||||
gfc_actual_arglist *arg, *last, *extremum;
|
gfc_actual_arglist *arg, *last, *extremum;
|
||||||
|
gfc_expr *tmp, *ret;
|
||||||
|
const char *fname;
|
||||||
|
|
||||||
last = NULL;
|
last = NULL;
|
||||||
extremum = NULL;
|
extremum = NULL;
|
||||||
|
|
@ -4995,7 +4997,27 @@ simplify_min_max (gfc_expr *expr, int sign)
|
||||||
if (expr->value.function.actual->next != NULL)
|
if (expr->value.function.actual->next != NULL)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
return gfc_copy_expr (expr->value.function.actual->expr);
|
/* Handle special cases of specific functions (min|max)1 and
|
||||||
|
a(min|max)0. */
|
||||||
|
|
||||||
|
tmp = expr->value.function.actual->expr;
|
||||||
|
fname = expr->value.function.isym->name;
|
||||||
|
|
||||||
|
if ((tmp->ts.type != BT_INTEGER || tmp->ts.kind != gfc_integer_4_kind)
|
||||||
|
&& (strcmp (fname, "min1") == 0 || strcmp (fname, "max1") == 0))
|
||||||
|
{
|
||||||
|
ret = gfc_convert_constant (tmp, BT_INTEGER, gfc_integer_4_kind);
|
||||||
|
}
|
||||||
|
else if ((tmp->ts.type != BT_REAL || tmp->ts.kind != gfc_real_4_kind)
|
||||||
|
&& (strcmp (fname, "amin0") == 0 || strcmp (fname, "amax0") == 0))
|
||||||
|
{
|
||||||
|
ret = gfc_convert_constant (tmp, BT_REAL, gfc_real_4_kind);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
ret = gfc_copy_expr (tmp);
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,8 @@
|
||||||
|
2019-01-06 Thomas Koenig <tkoenig@gcc.gnu.org>
|
||||||
|
|
||||||
|
PR fortran/88658
|
||||||
|
* gfortran.dg/min_max_type_2.f90: New test.
|
||||||
|
|
||||||
2019-01-06 Jakub Jelinek <jakub@redhat.com>
|
2019-01-06 Jakub Jelinek <jakub@redhat.com>
|
||||||
|
|
||||||
PR c/88363
|
PR c/88363
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,18 @@
|
||||||
|
! { dg-do run }
|
||||||
|
! PR 88658 - make sure the types for min1, max1, amax0 and amin0 are
|
||||||
|
! correct when simplified
|
||||||
|
|
||||||
|
program main
|
||||||
|
real :: RVCOMP
|
||||||
|
character (len=12) :: line
|
||||||
|
integer :: n
|
||||||
|
|
||||||
|
RVCOMP = MAX1(2.3, 3.1, 4.4) / 5
|
||||||
|
if (rvcomp /= 0.) stop 1
|
||||||
|
rvcomp = min1(2.3, 3.1, 5.1) / 5
|
||||||
|
if (rvcomp /= 0.) stop 2
|
||||||
|
write (unit=line, fmt='(F12.5)') amax0(42, 21, 7)
|
||||||
|
if (line /= ' 42.00000') stop 3
|
||||||
|
write (unit=line, fmt='(F12.5)') amin0(42,21,7)
|
||||||
|
if (line /= ' 7.00000') stop 4
|
||||||
|
end program main
|
||||||
Loading…
Reference in New Issue