[fortran] Fix PR 83316

Message ID 558c18e1-35bf-ee68-7271-cf9b8ae5cd94@netcologne.de
State New
Headers show
Series
  • [fortran] Fix PR 83316
Related show

Commit Message

Thomas Koenig Dec. 8, 2017, 6:42 p.m.
Hello world,

the attached patch fixes a case where simplification wasn't done
correctly for maxval and minval with character variables.

Regression-tested. OK for trunk?

Regards

	Thomas

2017-12-08  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-08  Thomas Koenig  <tkoenig@gcc.gnu.org>

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

Comments

Steve Kargl Dec. 8, 2017, 7:17 p.m. | #1
On Fri, Dec 08, 2017 at 07:42:21PM +0100, Thomas Koenig wrote:
> 

> the attached patch fixes a case where simplification wasn't done

> correctly for maxval and minval with character variables.

> 

> Regression-tested. OK for trunk?

> 


OK.

-- 
Steve

Patch

Index: arith.c
===================================================================
--- arith.c	(Revision 255181)
+++ arith.c	(Arbeitskopie)
@@ -2514,7 +2514,19 @@  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
    been set.  */
Index: arith.h
===================================================================
--- arith.h	(Revision 255181)
+++ arith.h	(Arbeitskopie)
@@ -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  */
 
Index: simplify.c
===================================================================
--- simplify.c	(Revision 255181)
+++ simplify.c	(Arbeitskopie)
@@ -7130,6 +7130,13 @@  gfc_convert_constant (gfc_expr *e, bt type, int ki
 	}
       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");