aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Koenig <tkoenig@gcc.gnu.org>2018-10-30 23:04:10 +0000
committerThomas Koenig <tkoenig@gcc.gnu.org>2018-10-30 23:04:10 +0000
commit0a8949a3f248a7b77e7c952bdfeff5649d25f8fd (patch)
treeb3309ac16e809dde960b1cece3e41fa4d435c7cd
parent91e3ec29af2b20d26a97b4b80c88eac9ad95e011 (diff)
downloadgcc-0a8949a3f248a7b77e7c952bdfeff5649d25f8fd.zip
gcc-0a8949a3f248a7b77e7c952bdfeff5649d25f8fd.tar.gz
gcc-0a8949a3f248a7b77e7c952bdfeff5649d25f8fd.tar.bz2
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
-rw-r--r--gcc/fortran/ChangeLog6
-rw-r--r--gcc/fortran/simplify.c11
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gfortran.dg/min_max_type.f9010
4 files changed, 21 insertions, 11 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog
index b5675d1..1186a40 100644
--- a/gcc/fortran/ChangeLog
+++ b/gcc/fortran/ChangeLog
@@ -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
diff --git a/gcc/fortran/simplify.c b/gcc/fortran/simplify.c
index 3939d26..2c87ae9 100644
--- a/gcc/fortran/simplify.c
+++ b/gcc/fortran/simplify.c
@@ -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);
}
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 3d96f1c..5b8090f 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -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
diff --git a/gcc/testsuite/gfortran.dg/min_max_type.f90 b/gcc/testsuite/gfortran.dg/min_max_type.f90
new file mode 100644
index 0000000..58137ad
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/min_max_type.f90
@@ -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