frontend-passes.c (create_var): Set ts.deferred for deferred-length character variables.
authorThomas Koenig <tkoenig@gcc.gnu.org>
Mon, 15 Aug 2016 19:34:48 +0000 (19:34 +0000)
committerThomas Koenig <tkoenig@gcc.gnu.org>
Mon, 15 Aug 2016 19:34:48 +0000 (19:34 +0000)
2016-08-15  Thomas Koenig  <tkoenig@gcc.gnu.org>

* frontend-passes.c (create_var):  Set ts.deferred for
deferred-length character variables.
* dump-parse-tree.c (show_typespec):  Also dump
is_c_interop, is_iso_c and deferred flags.

From-SVN: r239488

gcc/fortran/ChangeLog
gcc/fortran/dump-parse-tree.c
gcc/fortran/frontend-passes.c

index 5972a3e7e6f166d272235968e12fcf435a6fa8d4..84bfb33416853e5cb78896814b72f96929328903 100644 (file)
@@ -1,3 +1,10 @@
+2016-08-15  Thomas Koenig  <tkoenig@gcc.gnu.org>
+
+       * frontend-passes.c (create_var):  Set ts.deferred for
+       deferred-length character variables.
+       * dump-parse-tree.c (show_typespec):  Also dump
+       is_c_interop, is_iso_c and deferred flags.
+
 2016-08-15  Jakub Jelinek  <jakub@redhat.com>
 
        PR debug/71906
index f50743475d303e204439de078a5ca2eefdb008fc..8c24074215055e8e21a7ea5865879c7c2f12ea42 100644 (file)
@@ -120,6 +120,14 @@ show_typespec (gfc_typespec *ts)
       fprintf (dumpfile, "%d", ts->kind);
       break;
     }
+  if (ts->is_c_interop)
+    fputs (" C_INTEROP", dumpfile);
+
+  if (ts->is_iso_c)
+    fputs (" ISO_C", dumpfile);
+
+  if (ts->deferred)
+    fputs (" DEFERRED", dumpfile);
 
   fputc (')', dumpfile);
 }
index 29e43a11138f9ff31acc5a0bca7ccd90300f59d8..3892069d057f90e5000e0bf94afe7e59d2285ff5 100644 (file)
@@ -616,6 +616,7 @@ create_var (gfc_expr * e, const char *vname)
   gfc_code *n;
   gfc_namespace *ns;
   int i;
+  bool deferred;
 
   if (e->expr_type == EXPR_CONSTANT || is_fe_temp (e))
     return gfc_copy_expr (e);
@@ -666,6 +667,7 @@ create_var (gfc_expr * e, const char *vname)
        }
     }
 
+  deferred = 0;
   if (e->ts.type == BT_CHARACTER && e->rank == 0)
     {
       gfc_expr *length;
@@ -675,7 +677,10 @@ create_var (gfc_expr * e, const char *vname)
       if (length)
        symbol->ts.u.cl->length = length;
       else
-       symbol->attr.allocatable = 1;
+       {
+         symbol->attr.allocatable = 1;
+         deferred = 1;
+       }
     }
 
   symbol->attr.flavor = FL_VARIABLE;
@@ -687,6 +692,7 @@ create_var (gfc_expr * e, const char *vname)
   result = gfc_get_expr ();
   result->expr_type = EXPR_VARIABLE;
   result->ts = e->ts;
+  result->ts.deferred = deferred;
   result->rank = e->rank;
   result->shape = gfc_copy_shape (e->shape, e->rank);
   result->symtree = symtree;