Blame SOURCES/0003-Allow-more-than-one-character-as-argument-to-ICHAR.patch

00b2fc
From 2de74ecd251387201ab78f614e73f67c8ad89033 Mon Sep 17 00:00:00 2001
00b2fc
From: Mark Eggleston <markeggleston@gcc.gnu.org>
00b2fc
Date: Mon, 3 Feb 2020 08:52:58 +0000
00b2fc
Subject: [PATCH 03/10] Allow more than one character as argument to ICHAR
21d5dc
00b2fc
Use -fdec to enable.
21d5dc
---
21d5dc
 gcc/fortran/check.c                                 |  2 +-
21d5dc
 gcc/fortran/simplify.c                              |  4 ++--
21d5dc
 gcc/testsuite/gfortran.dg/dec_ichar_with_string_1.f | 21 +++++++++++++++++++++
21d5dc
 3 files changed, 24 insertions(+), 3 deletions(-)
21d5dc
 create mode 100644 gcc/testsuite/gfortran.dg/dec_ichar_with_string_1.f
21d5dc
21d5dc
diff --git a/gcc/fortran/check.c b/gcc/fortran/check.c
00b2fc
index 148a3269815..4c0b83e8e6f 100644
21d5dc
--- a/gcc/fortran/check.c
21d5dc
+++ b/gcc/fortran/check.c
00b2fc
@@ -3154,7 +3154,7 @@ gfc_check_ichar_iachar (gfc_expr *c, gfc_expr *kind)
21d5dc
   else
21d5dc
     return true;
21d5dc
 
21d5dc
-  if (i != 1)
21d5dc
+  if (i != 1 && !flag_dec)
21d5dc
     {
21d5dc
       gfc_error ("Argument of %s at %L must be of length one",
21d5dc
 		 gfc_current_intrinsic, &c->where);
21d5dc
diff --git a/gcc/fortran/simplify.c b/gcc/fortran/simplify.c
00b2fc
index eb8b2afeb29..248fe05ee48 100644
21d5dc
--- a/gcc/fortran/simplify.c
21d5dc
+++ b/gcc/fortran/simplify.c
21d5dc
@@ -3229,7 +3229,7 @@ gfc_simplify_iachar (gfc_expr *e, gfc_expr *kind)
21d5dc
   if (e->expr_type != EXPR_CONSTANT)
21d5dc
     return NULL;
21d5dc
 
21d5dc
-  if (e->value.character.length != 1)
21d5dc
+  if (e->value.character.length != 1 && !flag_dec)
21d5dc
     {
21d5dc
       gfc_error ("Argument of IACHAR at %L must be of length one", &e->where);
21d5dc
       return &gfc_bad_expr;
21d5dc
@@ -3427,7 +3427,7 @@ gfc_simplify_ichar (gfc_expr *e, gfc_expr *kind)
21d5dc
   if (e->expr_type != EXPR_CONSTANT)
21d5dc
     return NULL;
21d5dc
 
21d5dc
-  if (e->value.character.length != 1)
21d5dc
+  if (e->value.character.length != 1 && !flag_dec)
21d5dc
     {
21d5dc
       gfc_error ("Argument of ICHAR at %L must be of length one", &e->where);
21d5dc
       return &gfc_bad_expr;
21d5dc
diff --git a/gcc/testsuite/gfortran.dg/dec_ichar_with_string_1.f b/gcc/testsuite/gfortran.dg/dec_ichar_with_string_1.f
21d5dc
new file mode 100644
21d5dc
index 00000000000..85efccecc0f
21d5dc
--- /dev/null
21d5dc
+++ b/gcc/testsuite/gfortran.dg/dec_ichar_with_string_1.f
21d5dc
@@ -0,0 +1,21 @@
21d5dc
+! { dg-do run }
21d5dc
+! { dg-options "-fdec" }
21d5dc
+!
21d5dc
+! Test ICHAR and IACHAR with more than one character as argument
21d5dc
+!
21d5dc
+! Test case contributed by Jim MacArthur <jim.macarthur@codethink.co.uk>
21d5dc
+! Modified by Mark Eggleston <mark.eggleston@codethink.com>
21d5dc
+!
21d5dc
+        PROGRAM ichar_more_than_one_character
21d5dc
+          CHARACTER*4 st/'Test'/
21d5dc
+          INTEGER i
21d5dc
+
21d5dc
+          i = ICHAR(st)
21d5dc
+          if (i.NE.84) STOP 1
21d5dc
+          i = IACHAR(st)
21d5dc
+          if (i.NE.84) STOP 2
21d5dc
+          i = ICHAR('Test')
21d5dc
+          if (i.NE.84) STOP 3
21d5dc
+          i = IACHAR('Test')
21d5dc
+          if (i.NE.84) STOP 4
21d5dc
+        END
21d5dc
-- 
21d5dc
2.11.0
21d5dc