intrinsic.c (conv_name): Let gfc_get_string handle the format.
authorTobias Schlüter <tobi@gcc.gnu.org>
Thu, 29 Mar 2007 22:57:23 +0000 (00:57 +0200)
committerTobias Schlüter <tobi@gcc.gnu.org>
Thu, 29 Mar 2007 22:57:23 +0000 (00:57 +0200)
* intrinsic.c (conv_name): Let gfc_get_string handle the format.
(find_conv): Compare pointers instead of calling strcmp.
(find_sym): Likewise, but ensure that the compared pointer is in
the global string table.

From-SVN: r123346

gcc/fortran/ChangeLog
gcc/fortran/intrinsic.c

index eecbcadd449d918e2729af6e864825a14fd22202..69364bc394447b6123ea3221cfc4d8c37af8efeb 100644 (file)
@@ -1,3 +1,10 @@
+2007-03-29  Tobias Schlüter  <tobi@gcc.gnu.org>
+
+       * intrinsic.c (conv_name): Let gfc_get_string handle the format.
+       (find_conv): Compare pointers instead of calling strcmp.
+       (find_sym): Likewise, but ensure that the compared pointer is in
+       the global string table.
+
 2007-03-28  Tobias Schlüter  <tobi@gcc.gnu.org>
 
        * gfc-internals.texi: Fix output filename.  Merge type index into
index 5db319adb1046475bc7676187d64b7f2c27b3f0d..7990988c55e78ff69663a28282c3bc63a93a73c7 100644 (file)
@@ -120,12 +120,9 @@ gfc_get_intrinsic_sub_symbol (const char *name)
 static const char *
 conv_name (gfc_typespec *from, gfc_typespec *to)
 {
-  static char name[30];
-
-  sprintf (name, "__convert_%c%d_%c%d", gfc_type_letter (from->type),
-          from->kind, gfc_type_letter (to->type), to->kind);
-
-  return gfc_get_string (name);
+  return gfc_get_string ("__convert_%c%d_%c%d",
+                        gfc_type_letter (from->type), from->kind,
+                        gfc_type_letter (to->type), to->kind);
 }
 
 
@@ -144,7 +141,7 @@ find_conv (gfc_typespec *from, gfc_typespec *to)
   sym = conversion;
 
   for (i = 0; i < nconv; i++, sym++)
-    if (strcmp (target, sym->name) == 0)
+    if (target == sym->name)
       return sym;
 
   return NULL;
@@ -701,9 +698,14 @@ add_sym_5s (const char *name, int elemental, bt type, int kind, int standard,
 static gfc_intrinsic_sym *
 find_sym (gfc_intrinsic_sym *start, int n, const char *name)
 {
+  /* name may be a user-supplied string, so we must first make sure
+     that we're comparing against a pointer into the global string
+     table.  */
+  const char *p = gfc_get_string (name);
+
   while (n > 0)
     {
-      if (strcmp (name, start->name) == 0)
+      if (p == start->name)
        return start;
 
       start++;