Blame SOURCES/0008-Allow-non-integer-substring-indexes.patch

3db796
From a6e02ad7b8b66823629a9703af4662b8b4037e2b Mon Sep 17 00:00:00 2001
3db796
From: Jim MacArthur <jim.macarthur@codethink.co.uk>
3db796
Date: Mon, 5 Oct 2015 14:05:03 +0100
3db796
Subject: [PATCH 08/23] Allow non-integer substring indexes
3db796
3db796
This feature is enabled by the `-std=extra-legacy` compiler flag.
3db796
---
3db796
3db796
    0008-Allow-non-integer-substring-indexes.patch
3db796
3db796
diff --git a/gcc/fortran/resolve.c b/gcc/fortran/resolve.c
3db796
index 84a4827..667cc50 100644
3db796
--- a/gcc/fortran/resolve.c
3db796
+++ b/gcc/fortran/resolve.c
3db796
@@ -4680,6 +4680,17 @@ resolve_substring (gfc_ref *ref)
3db796
       if (!gfc_resolve_expr (ref->u.ss.start))
3db796
 	return false;
3db796
 
3db796
+      /* In legacy mode, allow non-integer string indexes by converting */
3db796
+      if ((gfc_option.allow_std & GFC_STD_EXTRA_LEGACY)
3db796
+	  && ref->u.ss.start->ts.type != BT_INTEGER
3db796
+	  && gfc_numeric_ts (&ref->u.ss.start->ts))
3db796
+	{
3db796
+	  gfc_typespec t;
3db796
+	  t.type = BT_INTEGER;
3db796
+	  t.kind = ref->u.ss.start->ts.kind;
3db796
+	  gfc_convert_type_warn (ref->u.ss.start, &t, 2, 1);
3db796
+	}
3db796
+
3db796
       if (ref->u.ss.start->ts.type != BT_INTEGER)
3db796
 	{
3db796
 	  gfc_error ("Substring start index at %L must be of type INTEGER",
3db796
@@ -4709,6 +4720,17 @@ resolve_substring (gfc_ref *ref)
3db796
       if (!gfc_resolve_expr (ref->u.ss.end))
3db796
 	return false;
3db796
 
3db796
+      /* Non-integer string index endings, as for start */
3db796
+      if ((gfc_option.allow_std & GFC_STD_EXTRA_LEGACY)
3db796
+	  && ref->u.ss.end->ts.type != BT_INTEGER
3db796
+	  && gfc_numeric_ts (&ref->u.ss.end->ts))
3db796
+	{
3db796
+	  gfc_typespec t;
3db796
+	  t.type = BT_INTEGER;
3db796
+	  t.kind = ref->u.ss.end->ts.kind;
3db796
+	  gfc_convert_type_warn (ref->u.ss.end, &t, 2, 1);
3db796
+	}
3db796
+
3db796
       if (ref->u.ss.end->ts.type != BT_INTEGER)
3db796
 	{
3db796
 	  gfc_error ("Substring end index at %L must be of type INTEGER",