This is the mail archive of the fortran@gcc.gnu.org mailing list for the GNU Fortran project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[gfortran] Minor cleanup: add gfc_conv_cstring_const


This small patch adds a function, gfc_build_cstring_const, which does what
gfc_build_string_const does, but only for zero-terminated strings. This saves
us from having to add string lenghts explicitly in a few places.

Built and tested. Ok?

- Tobi

2004-09-27  Tobias Schlueter  <tobias.schlueter@physik.uni-muenchen.de>

	* trans-const.c (gfc_build_cstring_const): New function.
	(gfc_init_cst): Use new function.
	* trans-const.h (gfc_build_cstring_const): Add prototype.
	* trans-io.c (set_string, set_error_locus): Use new function.
	* trans-stmt.c (gfc_trans_goto): Use new function.
? 17612.diff
? alldiffs
? back
Index: trans-const.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/fortran/trans-const.c,v
retrieving revision 1.17
diff -u -p -r1.17 trans-const.c
--- trans-const.c	8 Sep 2004 14:33:02 -0000	1.17
+++ trans-const.c	27 Sep 2004 18:46:04 -0000
@@ -89,6 +89,14 @@ gfc_build_string_const (int length, cons
   return str;
 }
 
+/* Build a string constant from a zero-terminated string.  */
+
+tree
+gfc_build_cstring_const (const char *s)
+{
+  return gfc_build_string_const (strlen (s) + 1, s);
+}
+
 /* Return a string constant with the given length.  Used for static
    initializers.  The constant will be padded or truncated to match 
    length.  */
@@ -147,17 +155,16 @@ gfc_init_constants (void)
   for (n = 0; n <= GFC_MAX_DIMENSIONS; n++)
     gfc_rank_cst[n] = build_int_cst (gfc_array_index_type, n);
 
-  gfc_strconst_bounds = gfc_build_string_const (21, "Array bound mismatch");
+  gfc_strconst_bounds = gfc_build_cstring_const ("Array bound mismatch");
 
   gfc_strconst_fault =
-    gfc_build_string_const (30, "Array reference out of bounds");
+    gfc_build_cstring_const ("Array reference out of bounds");
 
   gfc_strconst_wrong_return =
-    gfc_build_string_const (32, "Incorrect function return value");
+    gfc_build_cstring_const ("Incorrect function return value");
 
   gfc_strconst_current_filename =
-    gfc_build_string_const (strlen (gfc_option.source) + 1,
-			    gfc_option.source);
+    gfc_build_cstring_const (gfc_option.source);
 }
 
 /* Converts a GMP integer into a backend tree node.  */
Index: trans-const.h
===================================================================
RCS file: /cvs/gcc/gcc/gcc/fortran/trans-const.h,v
retrieving revision 1.6
diff -u -p -r1.6 trans-const.h
--- trans-const.h	16 Sep 2004 16:00:43 -0000	1.6
+++ trans-const.h	27 Sep 2004 18:46:04 -0000
@@ -35,6 +35,7 @@ tree gfc_conv_constant_to_tree (gfc_expr
 void gfc_conv_constant (gfc_se *, gfc_expr *);
 
 tree gfc_build_string_const (int, const char *);
+tree gfc_build_cstring_const (const char *);
 
 /* Translate a string constant for a static initializer.  */
 tree gfc_conv_string_init (tree, gfc_expr *);
Index: trans-io.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/fortran/trans-io.c,v
retrieving revision 1.21
diff -u -p -r1.21 trans-io.c
--- trans-io.c	16 Sep 2004 13:29:39 -0000	1.21
+++ trans-io.c	27 Sep 2004 18:46:04 -0000
@@ -409,7 +409,7 @@ set_string (stmtblock_t * block, stmtblo
   if (e->ts.type == BT_INTEGER && e->symtree->n.sym->attr.assign == 1)
     {
       msg =
-        gfc_build_string_const (37, "Assigned label is not a format label");
+        gfc_build_cstring_const ("Assigned label is not a format label");
       tmp = GFC_DECL_STRING_LEN (se.expr);
       tmp = build2 (LE_EXPR, boolean_type_node,
 		    tmp, convert (TREE_TYPE (tmp), integer_minus_one_node));
@@ -518,7 +518,7 @@ set_error_locus (stmtblock_t * block, lo
   int line;
 
   f = where->lb->file;
-  tmp = gfc_build_string_const (strlen (f->filename) + 1, f->filename);
+  tmp = gfc_build_cstring_const (f->filename);
 
   tmp = gfc_build_addr_expr (pchar_type_node, tmp);
   gfc_add_modify_expr (block, locus_file, tmp);
Index: trans-stmt.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/fortran/trans-stmt.c,v
retrieving revision 1.14
diff -u -p -r1.14 trans-stmt.c
--- trans-stmt.c	16 Sep 2004 16:00:44 -0000	1.14
+++ trans-stmt.c	27 Sep 2004 18:46:05 -0000
@@ -144,7 +144,7 @@ gfc_trans_goto (gfc_code * code)
   gfc_start_block (&se.pre);
   gfc_conv_expr (&se, code->expr);
   assign_error =
-    gfc_build_string_const (37, "Assigned label is not a target label");
+    gfc_build_cstring_const ("Assigned label is not a target label");
   tmp = GFC_DECL_STRING_LEN (se.expr);
   tmp = build2 (NE_EXPR, boolean_type_node, tmp, integer_minus_one_node);
   gfc_trans_runtime_check (tmp, assign_error, &se.pre);
@@ -160,8 +160,7 @@ gfc_trans_goto (gfc_code * code)
     }
 
   /* Check the label list.  */
-  range_error =
-    gfc_build_string_const (34, "Assigned label is not in the list");
+  range_error = gfc_build_cstring_const ("Assigned label is not in the list");
 
   do
     {

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]