OSDN Git Service

* trans-decl.c (gfc_build_function_decl): Remove dead code.
authorpbrook <pbrook@138bc75d-0d04-0410-961f-82ee72b054a4>
Sat, 14 Aug 2004 15:35:51 +0000 (15:35 +0000)
committerpbrook <pbrook@138bc75d-0d04-0410-961f-82ee72b054a4>
Sat, 14 Aug 2004 15:35:51 +0000 (15:35 +0000)
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@85996 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/fortran/ChangeLog
gcc/fortran/trans-decl.c

index fb1fa94..9bea25a 100644 (file)
@@ -1,5 +1,9 @@
 2004-08-14  Paul Brook  <paul@codesourcery.com>
 
+       * trans-decl.c (gfc_build_function_decl): Remove dead code.
+
+2004-08-14  Paul Brook  <paul@codesourcery.com>
+
        * trans-arry.c (gfc_trans_auto_array_allocation): Remove unused var.
 
 2004-08-13  Tobias Schlueter  <tobias.schlueter@physik.uni-muenchen.de>
index e519501..e2707b4 100644 (file)
@@ -976,6 +976,7 @@ gfc_build_function_decl (gfc_symbol * sym)
   tree length;
   symbol_attribute attr;
   gfc_formal_arglist *f;
+  tree parm;
 
   assert (!sym->backend_decl);
   assert (!sym->attr.external);
@@ -1049,14 +1050,13 @@ gfc_build_function_decl (gfc_symbol * sym)
   DECL_CONTEXT (fndecl) = current_function_decl;
   DECL_EXTERNAL (fndecl) = 0;
 
-  /* This specifies if a function is globaly addressable, ie. it is
+  /* This specifies if a function is globaly visible, ie. it is
      the opposite of declaring static in C.  */
-  if (DECL_CONTEXT (fndecl) == NULL_TREE || attr.external)
+  if (DECL_CONTEXT (fndecl) == NULL_TREE)
     TREE_PUBLIC (fndecl) = 1;
 
   /* TREE_STATIC means the function body is defined here.  */
-  if (!attr.external)
-    TREE_STATIC (fndecl) = 1;
+  TREE_STATIC (fndecl) = 1;
 
   /* Set attributes for PURE functions. A call to PURE function in the
      Fortran 95 sense is both pure and without side effects in the C
@@ -1073,146 +1073,142 @@ gfc_build_function_decl (gfc_symbol * sym)
 
   /* Layout the function declaration and put it in the binding level
      of the current function.  */
-  if (!attr.external)
+  pushdecl (fndecl);
+  /* Build formal argument list. Make sure that their TREE_CONTEXT is
+     the new FUNCTION_DECL node.  */
+  current_function_decl = fndecl;
+  arglist = NULL_TREE;
+  typelist = TYPE_ARG_TYPES (TREE_TYPE (fndecl));
+  if (gfc_return_by_reference (sym))
     {
-      tree parm;
-
-      pushdecl (fndecl);
-      /* Build formal argument list. Make sure that their TREE_CONTEXT is
-         the new FUNCTION_DECL node.  */
-      current_function_decl = fndecl;
-      arglist = NULL_TREE;
-      typelist = TYPE_ARG_TYPES (TREE_TYPE (fndecl));
-      if (gfc_return_by_reference (sym))
-       {
-         type = TREE_VALUE (typelist);
-         parm = build_decl (PARM_DECL, get_identifier ("__result"), type);
+      type = TREE_VALUE (typelist);
+      parm = build_decl (PARM_DECL, get_identifier ("__result"), type);
 
-         DECL_CONTEXT (parm) = fndecl;
-         DECL_ARG_TYPE (parm) = type;
-         TREE_READONLY (parm) = 1;
-         gfc_finish_decl (parm, NULL_TREE);
+      DECL_CONTEXT (parm) = fndecl;
+      DECL_ARG_TYPE (parm) = type;
+      TREE_READONLY (parm) = 1;
+      gfc_finish_decl (parm, NULL_TREE);
 
-         arglist = chainon (arglist, parm);
-         typelist = TREE_CHAIN (typelist);
+      arglist = chainon (arglist, parm);
+      typelist = TREE_CHAIN (typelist);
 
-         if (sym->ts.type == BT_CHARACTER)
-           {
-             gfc_allocate_lang_decl (parm);
+      if (sym->ts.type == BT_CHARACTER)
+       {
+         gfc_allocate_lang_decl (parm);
 
-             /* Length of character result.  */
-             type = TREE_VALUE (typelist);
-             assert (type == gfc_strlen_type_node);
+         /* Length of character result.  */
+         type = TREE_VALUE (typelist);
+         assert (type == gfc_strlen_type_node);
 
-             length = build_decl (PARM_DECL,
-                                  get_identifier (".__result"),
-                                  type);
-             if (!sym->ts.cl->length)
-               {
-                 sym->ts.cl->backend_decl = length;
-                 TREE_USED (length) = 1;
-               }
-             assert (TREE_CODE (length) == PARM_DECL);
-             arglist = chainon (arglist, length);
-             typelist = TREE_CHAIN (typelist);
-             DECL_CONTEXT (length) = fndecl;
-             DECL_ARG_TYPE (length) = type;
-             TREE_READONLY (length) = 1;
-             gfc_finish_decl (length, NULL_TREE);
+         length = build_decl (PARM_DECL,
+                              get_identifier (".__result"),
+                              type);
+         if (!sym->ts.cl->length)
+           {
+             sym->ts.cl->backend_decl = length;
+             TREE_USED (length) = 1;
            }
+         assert (TREE_CODE (length) == PARM_DECL);
+         arglist = chainon (arglist, length);
+         typelist = TREE_CHAIN (typelist);
+         DECL_CONTEXT (length) = fndecl;
+         DECL_ARG_TYPE (length) = type;
+         TREE_READONLY (length) = 1;
+         gfc_finish_decl (length, NULL_TREE);
        }
+    }
 
-      for (f = sym->formal; f; f = f->next)
+  for (f = sym->formal; f; f = f->next)
+    {
+      if (f->sym != NULL)      /* ignore alternate returns. */
        {
-         if (f->sym != NULL)   /* ignore alternate returns. */
-           {
-             length = NULL_TREE;
+         length = NULL_TREE;
 
-             type = TREE_VALUE (typelist);
+         type = TREE_VALUE (typelist);
 
-             /* Build a the argument declaration.  */
-             parm = build_decl (PARM_DECL,
-                                gfc_sym_identifier (f->sym), type);
+         /* Build a the argument declaration.  */
+         parm = build_decl (PARM_DECL,
+                            gfc_sym_identifier (f->sym), type);
 
-             /* Fill in arg stuff.  */
-             DECL_CONTEXT (parm) = fndecl;
-             DECL_ARG_TYPE (parm) = type;
-             DECL_ARG_TYPE_AS_WRITTEN (parm) = type;
-             /* All implementation args are read-only.  */
-             TREE_READONLY (parm) = 1;
+         /* Fill in arg stuff.  */
+         DECL_CONTEXT (parm) = fndecl;
+         DECL_ARG_TYPE (parm) = type;
+         DECL_ARG_TYPE_AS_WRITTEN (parm) = type;
+         /* All implementation args are read-only.  */
+         TREE_READONLY (parm) = 1;
 
-             gfc_finish_decl (parm, NULL_TREE);
+         gfc_finish_decl (parm, NULL_TREE);
 
-             f->sym->backend_decl = parm;
+         f->sym->backend_decl = parm;
 
-             arglist = chainon (arglist, parm);
-             typelist = TREE_CHAIN (typelist);
-           }
-        }
+         arglist = chainon (arglist, parm);
+         typelist = TREE_CHAIN (typelist);
+       }
+    }
 
-      /* Add the hidden string length parameters.  */
-      parm = arglist;
-      for (f = sym->formal; f; f = f->next)
-       {
-          char name[GFC_MAX_SYMBOL_LEN + 2];
-         /* Ignore alternate returns.  */
-         if (f->sym == NULL)
-            continue;
+  /* Add the hidden string length parameters.  */
+  parm = arglist;
+  for (f = sym->formal; f; f = f->next)
+    {
+      char name[GFC_MAX_SYMBOL_LEN + 2];
+      /* Ignore alternate returns.  */
+      if (f->sym == NULL)
+       continue;
 
-          if (f->sym->ts.type != BT_CHARACTER)
-            continue;
+      if (f->sym->ts.type != BT_CHARACTER)
+       continue;
 
-          parm = f->sym->backend_decl;
-          type = TREE_VALUE (typelist);
-          assert (type == gfc_strlen_type_node);
+      parm = f->sym->backend_decl;
+      type = TREE_VALUE (typelist);
+      assert (type == gfc_strlen_type_node);
 
-          strcpy (&name[1], f->sym->name);
-          name[0] = '_';
-          length = build_decl (PARM_DECL, get_identifier (name), type);
+      strcpy (&name[1], f->sym->name);
+      name[0] = '_';
+      length = build_decl (PARM_DECL, get_identifier (name), type);
 
-          arglist = chainon (arglist, length);
-          DECL_CONTEXT (length) = fndecl;
-          DECL_ARG_TYPE (length) = type;
-          TREE_READONLY (length) = 1;
-          gfc_finish_decl (length, NULL_TREE);
+      arglist = chainon (arglist, length);
+      DECL_CONTEXT (length) = fndecl;
+      DECL_ARG_TYPE (length) = type;
+      TREE_READONLY (length) = 1;
+      gfc_finish_decl (length, NULL_TREE);
 
-         /* TODO: Check string lengths when -fbounds-check.  */
+      /* TODO: Check string lengths when -fbounds-check.  */
 
-         /* Use the passed value for assumed length variables.  */
-          if (!f->sym->ts.cl->length)
+      /* Use the passed value for assumed length variables.  */
+      if (!f->sym->ts.cl->length)
+       {
+         TREE_USED (length) = 1;
+         if (!f->sym->ts.cl->backend_decl)
+           f->sym->ts.cl->backend_decl = length;
+         else
            {
-             TREE_USED (length) = 1;
-             if (!f->sym->ts.cl->backend_decl)
-               f->sym->ts.cl->backend_decl = length;
-             else
-               {
-                 /* there is already another variable using this
-                    gfc_charlen node, build a new one for this variable
-                    and chain it into the list of gfc_charlens.
-                    This happens for e.g. in the case
-                    CHARACTER(*)::c1,c2
-                    since CHARACTER declarations on the same line share
-                    the same gfc_charlen node.  */
-                 gfc_charlen *cl;
-                 
-                 cl = gfc_get_charlen ();
-                 cl->backend_decl = length;
-                 cl->next = f->sym->ts.cl->next;
-                 f->sym->ts.cl->next = cl;
-                 f->sym->ts.cl = cl;
-               }
+             /* there is already another variable using this
+                gfc_charlen node, build a new one for this variable
+                and chain it into the list of gfc_charlens.
+                This happens for e.g. in the case
+                CHARACTER(*)::c1,c2
+                since CHARACTER declarations on the same line share
+                the same gfc_charlen node.  */
+             gfc_charlen *cl;
+             
+             cl = gfc_get_charlen ();
+             cl->backend_decl = length;
+             cl->next = f->sym->ts.cl->next;
+             f->sym->ts.cl->next = cl;
+             f->sym->ts.cl = cl;
            }
-
-          parm = TREE_CHAIN (parm);
-          typelist = TREE_CHAIN (typelist);
        }
 
-      assert (TREE_VALUE (typelist) == void_type_node);
-      DECL_ARGUMENTS (fndecl) = arglist;
-
-      /* Restore the old context.  */
-      current_function_decl = DECL_CONTEXT (fndecl);
+      parm = TREE_CHAIN (parm);
+      typelist = TREE_CHAIN (typelist);
     }
+
+  assert (TREE_VALUE (typelist) == void_type_node);
+  DECL_ARGUMENTS (fndecl) = arglist;
+
+  /* Restore the old context.  */
+  current_function_decl = DECL_CONTEXT (fndecl);
+
   sym->backend_decl = fndecl;
 }