re PR fortran/27552 (-fdump-parse-tree doesn't like Holleriths (but then, who does?))
authorFrancois-Xavier Coudert <coudert@clipper.ens.fr>
Thu, 18 May 2006 02:31:41 +0000 (04:31 +0200)
committerFeng Wang <fengwang@gcc.gnu.org>
Thu, 18 May 2006 02:31:41 +0000 (02:31 +0000)
2006-05-18  Francois-Xavier Coudert  <coudert@clipper.ens.fr>
            Feng Wang  <fengwang@nudt.edu.cn>

        PR fortran/27552
        * dump-parse-tree.c (gfc_show_expr): Deal with Hollerith constants.
        * data.c (create_character_intializer): Set from_H flag if character is
        initialized by Hollerith constant.

Co-Authored-By: Feng Wang <fengwang@nudt.edu.cn>
From-SVN: r113881

gcc/fortran/ChangeLog
gcc/fortran/data.c
gcc/fortran/dump-parse-tree.c

index 1f30fd46a94930cba505bb702a96cb97dec07c28..1b62f79d09c6c48c1ed04230bec4828f914fee8b 100644 (file)
@@ -1,3 +1,11 @@
+2006-05-18  Francois-Xavier Coudert  <coudert@clipper.ens.fr>
+           Feng Wang  <fengwang@nudt.edu.cn>
+
+       PR fortran/27552
+       * dump-parse-tree.c (gfc_show_expr): Deal with Hollerith constants.
+       * data.c (create_character_intializer): Set from_H flag if character is
+       initialized by Hollerith constant.
+
 2006-05-17  Francois-Xavier Coudert  <coudert@clipper.ens.fr>
 
        PR fortran/26551
index fdb98569c7ae666e1ca732beb7acd3ddbdc2d822..8fb8b5d08297b1f44116b82f12290060e9663bc9 100644 (file)
@@ -192,6 +192,9 @@ create_character_intializer (gfc_expr * init, gfc_typespec * ts,
   if (len < end - start && ref == NULL)
     memset (&dest[start + len], ' ', end - (start + len));
 
+  if (rvalue->ts.type == BT_HOLLERITH)
+    init->from_H = 1;
+
   return init;
 }
 
index adec12f4c36c9253658e220be4b94be463d43348..cd909800d4f2d79b51a250487ed9dd37822e51b7 100644 (file)
@@ -348,6 +348,16 @@ gfc_show_expr (gfc_expr * p)
       break;
 
     case EXPR_CONSTANT:
+      if (p->from_H || p->ts.type == BT_HOLLERITH)
+       {
+         gfc_status ("%dH", p->value.character.length);
+         c = p->value.character.string;
+         for (i = 0; i < p->value.character.length; i++, c++)
+           {
+             gfc_status_char (*c);
+           }
+         break;
+       }
       switch (p->ts.type)
        {
        case BT_INTEGER: