From 223f9d5aaa83b41e9dbe2962aec22e3d29224dff Mon Sep 17 00:00:00 2001
From: Francois-Xavier Coudert <coudert@clipper.ens.fr>
Date: Thu, 18 May 2006 04:31:41 +0200
Subject: [PATCH] re PR fortran/27552 (-fdump-parse-tree doesn't like
 Holleriths (but then, who does?))

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         |  8 ++++++++
 gcc/fortran/data.c            |  3 +++
 gcc/fortran/dump-parse-tree.c | 10 ++++++++++
 3 files changed, 21 insertions(+)

diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog
index 1f30fd46a949..1b62f79d09c6 100644
--- a/gcc/fortran/ChangeLog
+++ b/gcc/fortran/ChangeLog
@@ -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
diff --git a/gcc/fortran/data.c b/gcc/fortran/data.c
index fdb98569c7ae..8fb8b5d08297 100644
--- a/gcc/fortran/data.c
+++ b/gcc/fortran/data.c
@@ -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;
 }
 
diff --git a/gcc/fortran/dump-parse-tree.c b/gcc/fortran/dump-parse-tree.c
index adec12f4c36c..cd909800d4f2 100644
--- a/gcc/fortran/dump-parse-tree.c
+++ b/gcc/fortran/dump-parse-tree.c
@@ -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:
-- 
GitLab