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

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