diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog
index 1f30fd46a94930cba505bb702a96cb97dec07c28..1b62f79d09c6c48c1ed04230bec4828f914fee8b 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 fdb98569c7ae666e1ca732beb7acd3ddbdc2d822..8fb8b5d08297b1f44116b82f12290060e9663bc9 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 adec12f4c36c9253658e220be4b94be463d43348..cd909800d4f2d79b51a250487ed9dd37822e51b7 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: