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

0714f1
From d15e5e207e2a6b46edee2f2b5d3e4c1cc7cdb80f Mon Sep 17 00:00:00 2001
0714f1
From: Jim MacArthur <jim.macarthur@codethink.co.uk>
0714f1
Date: Mon, 5 Oct 2015 13:45:15 +0100
0714f1
Subject: [PATCH 07/16] Allow more than one character as argument to ICHAR
0714f1
0714f1
Use -fdec to enable..
0714f1
---
0714f1
 gcc/fortran/check.c                                 |  2 +-
0714f1
 gcc/fortran/simplify.c                              |  4 ++--
0714f1
 gcc/testsuite/gfortran.dg/dec_ichar_with_string_1.f | 21 +++++++++++++++++++++
0714f1
 3 files changed, 24 insertions(+), 3 deletions(-)
0714f1
 create mode 100644 gcc/testsuite/gfortran.dg/dec_ichar_with_string_1.f
0714f1
0714f1
diff --git a/gcc/fortran/check.c b/gcc/fortran/check.c
0714f1
index a04f0d66655..0ba4d0a031f 100644
0714f1
--- a/gcc/fortran/check.c
0714f1
+++ b/gcc/fortran/check.c
0714f1
@@ -2603,7 +2603,7 @@ gfc_check_ichar_iachar (gfc_expr *c, gfc_expr *kind)
0714f1
   else
0714f1
     return true;
0714f1
 
0714f1
-  if (i != 1)
0714f1
+  if (i != 1 && !flag_dec)
0714f1
     {
0714f1
       gfc_error ("Argument of %s at %L must be of length one",
0714f1
 		 gfc_current_intrinsic, &c->where);
0714f1
diff --git a/gcc/fortran/simplify.c b/gcc/fortran/simplify.c
0714f1
index 7d7e3f22f73..7aff256c6b3 100644
0714f1
--- a/gcc/fortran/simplify.c
0714f1
+++ b/gcc/fortran/simplify.c
0714f1
@@ -3229,7 +3229,7 @@ gfc_simplify_iachar (gfc_expr *e, gfc_expr *kind)
0714f1
   if (e->expr_type != EXPR_CONSTANT)
0714f1
     return NULL;
0714f1
 
0714f1
-  if (e->value.character.length != 1)
0714f1
+  if (e->value.character.length != 1 && !flag_dec)
0714f1
     {
0714f1
       gfc_error ("Argument of IACHAR at %L must be of length one", &e->where);
0714f1
       return &gfc_bad_expr;
0714f1
@@ -3427,7 +3427,7 @@ gfc_simplify_ichar (gfc_expr *e, gfc_expr *kind)
0714f1
   if (e->expr_type != EXPR_CONSTANT)
0714f1
     return NULL;
0714f1
 
0714f1
-  if (e->value.character.length != 1)
0714f1
+  if (e->value.character.length != 1 && !flag_dec)
0714f1
     {
0714f1
       gfc_error ("Argument of ICHAR at %L must be of length one", &e->where);
0714f1
       return &gfc_bad_expr;
0714f1
diff --git a/gcc/testsuite/gfortran.dg/dec_ichar_with_string_1.f b/gcc/testsuite/gfortran.dg/dec_ichar_with_string_1.f
0714f1
new file mode 100644
0714f1
index 00000000000..85efccecc0f
0714f1
--- /dev/null
0714f1
+++ b/gcc/testsuite/gfortran.dg/dec_ichar_with_string_1.f
0714f1
@@ -0,0 +1,21 @@
0714f1
+! { dg-do run }
0714f1
+! { dg-options "-fdec" }
0714f1
+!
0714f1
+! Test ICHAR and IACHAR with more than one character as argument
0714f1
+!
0714f1
+! Test case contributed by Jim MacArthur <jim.macarthur@codethink.co.uk>
0714f1
+! Modified by Mark Eggleston <mark.eggleston@codethink.com>
0714f1
+!
0714f1
+        PROGRAM ichar_more_than_one_character
0714f1
+          CHARACTER*4 st/'Test'/
0714f1
+          INTEGER i
0714f1
+
0714f1
+          i = ICHAR(st)
0714f1
+          if (i.NE.84) STOP 1
0714f1
+          i = IACHAR(st)
0714f1
+          if (i.NE.84) STOP 2
0714f1
+          i = ICHAR('Test')
0714f1
+          if (i.NE.84) STOP 3
0714f1
+          i = IACHAR('Test')
0714f1
+          if (i.NE.84) STOP 4
0714f1
+        END
0714f1
-- 
0714f1
2.11.0
0714f1