OSDN Git Service

* gfortran.h (gfc_get_data_variable, gfc_get_data_value,
authorfxcoudert <fxcoudert@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 5 Oct 2007 12:33:07 +0000 (12:33 +0000)
committerfxcoudert <fxcoudert@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 5 Oct 2007 12:33:07 +0000 (12:33 +0000)
gfc_get_data): Move to decl.c.
(global_used): Rename into gfc_global_used.
(gfc_formalize_init_value, gfc_get_section_index,
gfc_assign_data_value, gfc_assign_data_value_range,
gfc_advance_section): Move to data.h.
(gfc_set_in_match_data): Remove.
* decl.c (gfc_get_data_variable, gfc_get_data_value,
gfc_get_data): Move here.
(gfc_set_in_match_data): Rename into set_in_match_data.
(gfc_match_data): Likewise.
(add_global_entry): Rename global_used into gfc_global_used.
* data.c: Include data.h.
* trans.h (gfc_todo_error): Remove.
* trans-array.c (gfc_trans_array_constructor,
gfc_conv_ss_startstride, gfc_conv_loop_setup): Change
gfc_todo_error into assertions.
* resolve.c (resolve_global_procedure): Rename global_used into
gfc_global_used.
* parse.c (gfc_global_used, parse_module, add_global_procedure,
add_global_program): Likewise.
* trans-intrinsic.c (gfc_walk_intrinsic_function): Rename
global_used into gfc_global_used.
* Make-lang.in: Add dependencies on fortran/data.h.
* data.h: New file.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@129034 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/fortran/ChangeLog
gcc/fortran/Make-lang.in
gcc/fortran/data.c
gcc/fortran/data.h [new file with mode: 0644]
gcc/fortran/decl.c
gcc/fortran/gfortran.h
gcc/fortran/parse.c
gcc/fortran/resolve.c
gcc/fortran/trans-array.c
gcc/fortran/trans-intrinsic.c
gcc/fortran/trans.h

index 488d280..834a5b9 100644 (file)
@@ -1,3 +1,31 @@
+2007-10-05  Francois-Xavier Coudert  <fxcoudert@gcc.gnu.org>
+
+       * gfortran.h (gfc_get_data_variable, gfc_get_data_value,
+       gfc_get_data): Move to decl.c.
+       (global_used): Rename into gfc_global_used.
+       (gfc_formalize_init_value, gfc_get_section_index,
+       gfc_assign_data_value, gfc_assign_data_value_range,
+       gfc_advance_section): Move to data.h.
+       (gfc_set_in_match_data): Remove.
+       * decl.c (gfc_get_data_variable, gfc_get_data_value,
+       gfc_get_data): Move here.
+       (gfc_set_in_match_data): Rename into set_in_match_data.
+       (gfc_match_data): Likewise.
+       (add_global_entry): Rename global_used into gfc_global_used.
+       * data.c: Include data.h.
+       * trans.h (gfc_todo_error): Remove.
+       * trans-array.c (gfc_trans_array_constructor,
+       gfc_conv_ss_startstride, gfc_conv_loop_setup): Change
+       gfc_todo_error into assertions.
+       * resolve.c (resolve_global_procedure): Rename global_used into
+       gfc_global_used.
+       * parse.c (gfc_global_used, parse_module, add_global_procedure,
+       add_global_program): Likewise.
+       * trans-intrinsic.c (gfc_walk_intrinsic_function): Rename
+       global_used into gfc_global_used.
+       * Make-lang.in: Add dependencies on fortran/data.h.
+       * data.h: New file.
+
 2007-10-04  Francois-Xavier Coudert  <fxcoudert@gcc.gnu.org>
 
        PR fortran/33529
index 7b4b4c7..16d4d35 100644 (file)
@@ -324,5 +324,6 @@ fortran/trans-intrinsic.o: $(GFORTRAN_TRANS_DEPS) fortran/mathbuiltins.def \
   gt-fortran-trans-intrinsic.h
 fortran/dependency.o: $(GFORTRAN_TRANS_DEPS) fortran/dependency.h
 fortran/trans-common.o: $(GFORTRAN_TRANS_DEPS) $(TARGET_H) $(RTL_H)
-fortran/resolve.o: fortran/dependency.h
+fortran/resolve.o: fortran/dependency.h fortran/data.h
+fortran/data.o: fortran/data.h
 fortran/options.o: $(PARAMS_H) $(TARGET_H)
index 14c1b1a..59ac5e9 100644 (file)
@@ -35,6 +35,7 @@ along with GCC; see the file COPYING3.  If not see
 
 #include "config.h"
 #include "gfortran.h"
+#include "data.h"
 
 static void formalize_init_expr (gfc_expr *);
 
diff --git a/gcc/fortran/data.h b/gcc/fortran/data.h
new file mode 100644 (file)
index 0000000..5f89d98
--- /dev/null
@@ -0,0 +1,24 @@
+/* Header for functions resolving DATA statements.
+   Copyright (C) 2007 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+void gfc_formalize_init_value (gfc_symbol *);
+void gfc_get_section_index (gfc_array_ref *, mpz_t *, mpz_t *);
+try gfc_assign_data_value (gfc_expr *, gfc_expr *, mpz_t);
+void gfc_assign_data_value_range (gfc_expr *, gfc_expr *, mpz_t, mpz_t);
+void gfc_advance_section (mpz_t *, gfc_array_ref *, mpz_t *);
index d0eb0ef..d2c94a1 100644 (file)
@@ -25,6 +25,14 @@ along with GCC; see the file COPYING3.  If not see
 #include "match.h"
 #include "parse.h"
 
+
+/* Macros to access allocate memory for gfc_data_variable,
+   gfc_data_value and gfc_data.  */
+#define gfc_get_data_variable() gfc_getmem (sizeof (gfc_data_variable))
+#define gfc_get_data_value() gfc_getmem (sizeof (gfc_data_value))
+#define gfc_get_data() gfc_getmem( sizeof (gfc_data))
+
+
 /* This flag is set if an old-style length selector is matched
    during a type-declaration statement.  */
 
@@ -92,8 +100,8 @@ gfc_in_match_data (void)
   return in_match_data;
 }
 
-void
-gfc_set_in_match_data (bool set_value)
+static void
+set_in_match_data (bool set_value)
 {
   in_match_data = set_value;
 }
@@ -496,7 +504,7 @@ gfc_match_data (void)
   gfc_data *new;
   match m;
 
-  gfc_set_in_match_data (true);
+  set_in_match_data (true);
 
   for (;;)
     {
@@ -520,7 +528,7 @@ gfc_match_data (void)
       gfc_match_char (',');    /* Optional comma */
     }
 
-  gfc_set_in_match_data (false);
+  set_in_match_data (false);
 
   if (gfc_pure (NULL))
     {
@@ -531,7 +539,7 @@ gfc_match_data (void)
   return MATCH_YES;
 
 cleanup:
-  gfc_set_in_match_data (false);
+  set_in_match_data (false);
   gfc_free_data (new);
   return MATCH_ERROR;
 }
@@ -4256,7 +4264,7 @@ add_global_entry (const char *name, int sub)
   if (s->defined
       || (s->type != GSYM_UNKNOWN
          && s->type != (sub ? GSYM_SUBROUTINE : GSYM_FUNCTION)))
-    global_used(s, NULL);
+    gfc_global_used(s, NULL);
   else
     {
       s->type = sub ? GSYM_SUBROUTINE : GSYM_FUNCTION;
index 5495ae7..203e1e7 100644 (file)
@@ -1793,10 +1793,6 @@ typedef struct gfc_data
 }
 gfc_data;
 
-#define gfc_get_data_variable() gfc_getmem(sizeof(gfc_data_variable))
-#define gfc_get_data_value() gfc_getmem(sizeof(gfc_data_value))
-#define gfc_get_data() gfc_getmem(sizeof(gfc_data))
-
 
 /* Structure for holding compile options */
 typedef struct
@@ -1909,16 +1905,8 @@ extern iterator_stack *iter_stack;
 
 /************************ Function prototypes *************************/
 
-/* data.c  */
-void gfc_formalize_init_value (gfc_symbol *);
-void gfc_get_section_index (gfc_array_ref *, mpz_t *, mpz_t *);
-try gfc_assign_data_value (gfc_expr *, gfc_expr *, mpz_t);
-void gfc_assign_data_value_range (gfc_expr *, gfc_expr *, mpz_t, mpz_t);
-void gfc_advance_section (mpz_t *, gfc_array_ref *, mpz_t *);
-
 /* decl.c */
 bool gfc_in_match_data (void);
-void gfc_set_in_match_data (bool);
 
 /* scanner.c */
 void gfc_scanner_done_1 (void);
@@ -2371,7 +2359,7 @@ void gfc_show_typespec (gfc_typespec *);
 
 /* parse.c */
 try gfc_parse_file (void);
-void global_used (gfc_gsymbol *, locus *);
+void gfc_global_used (gfc_gsymbol *, locus *);
 
 /* dependency.c */
 int gfc_dep_compare_expr (gfc_expr *, gfc_expr *);
index 14acb86..f357c7a 100644 (file)
@@ -3088,7 +3088,7 @@ done:
    something else.  */
 
 void
-global_used (gfc_gsymbol *sym, locus *where)
+gfc_global_used (gfc_gsymbol *sym, locus *where)
 {
   const char *name;
 
@@ -3154,7 +3154,7 @@ parse_block_data (void)
       s = gfc_get_gsymbol (gfc_new_block->name);
       if (s->defined
          || (s->type != GSYM_UNKNOWN && s->type != GSYM_BLOCK_DATA))
-       global_used(s, NULL);
+       gfc_global_used(s, NULL);
       else
        {
         s->type = GSYM_BLOCK_DATA;
@@ -3185,7 +3185,7 @@ parse_module (void)
 
   s = gfc_get_gsymbol (gfc_new_block->name);
   if (s->defined || (s->type != GSYM_UNKNOWN && s->type != GSYM_MODULE))
-    global_used(s, NULL);
+    gfc_global_used(s, NULL);
   else
     {
       s->type = GSYM_MODULE;
@@ -3232,7 +3232,7 @@ add_global_procedure (int sub)
   if (s->defined
       || (s->type != GSYM_UNKNOWN
          && s->type != (sub ? GSYM_SUBROUTINE : GSYM_FUNCTION)))
-    global_used(s, NULL);
+    gfc_global_used(s, NULL);
   else
     {
       s->type = sub ? GSYM_SUBROUTINE : GSYM_FUNCTION;
@@ -3254,7 +3254,7 @@ add_global_program (void)
   s = gfc_get_gsymbol (gfc_new_block->name);
 
   if (s->defined || (s->type != GSYM_UNKNOWN && s->type != GSYM_PROGRAM))
-    global_used(s, NULL);
+    gfc_global_used(s, NULL);
   else
     {
       s->type = GSYM_PROGRAM;
index 536b3c5..452a8d8 100644 (file)
@@ -27,6 +27,7 @@ along with GCC; see the file COPYING3.  If not see
 #include "bitmap.h"
 #include "arith.h"  /* For gfc_compare_expr().  */
 #include "dependency.h"
+#include "data.h"
 
 /* Types used in equivalence statements.  */
 
@@ -1359,7 +1360,7 @@ resolve_global_procedure (gfc_symbol *sym, locus *where, int sub)
   gsym = gfc_get_gsymbol (sym->name);
 
   if ((gsym->type != GSYM_UNKNOWN && gsym->type != type))
-    global_used (gsym, where);
+    gfc_global_used (gsym, where);
 
   if (gsym->type == GSYM_UNKNOWN)
     {
index 64a62db..2edc95b 100644 (file)
@@ -1636,8 +1636,10 @@ gfc_trans_array_constructor (gfc_loopinfo * loop, gfc_ss * ss)
   if (ss->expr->ts.type == BT_CHARACTER)
     {
       bool const_string = get_array_ctor_strlen (&loop->pre, c, &ss->string_length);
-      if (!ss->string_length)
-       gfc_todo_error ("complex character array constructors");
+
+      /* Complex character array constructors should have been taken care of
+        and not end up here.  */
+      gcc_assert (ss->string_length);
 
       ss->expr->ts.cl->backend_decl = ss->string_length;
 
@@ -2787,9 +2789,9 @@ gfc_conv_ss_startstride (gfc_loopinfo * loop)
        }
     }
 
-  if (loop->dimen == 0)
-    gfc_todo_error ("Unable to determine rank of expression");
-
+  /* We should have determined the rank of the expression by now.  If
+     not, that's bad news.  */
+  gcc_assert (loop->dimen != 0);
 
   /* Loop over all the SS in the chain.  */
   for (ss = loop->ss; ss != gfc_ss_terminator; ss = ss->loop_chain)
@@ -3280,8 +3282,9 @@ gfc_conv_loop_setup (gfc_loopinfo * loop)
             loopspec[n] = ss; */
        }
 
-      if (!loopspec[n])
-       gfc_todo_error ("Unable to find scalarization loop specifier");
+      /* We should have found the scalarization loop specifier.  If not,
+        that's bad news.  */
+      gcc_assert (loopspec[n]);
 
       info = &loopspec[n]->data.info;
 
index cf7d1e1..7cc0c6f 100644 (file)
@@ -4269,10 +4269,9 @@ gfc_walk_intrinsic_function (gfc_ss * ss, gfc_expr * expr,
 
     default:
       /* This probably meant someone forgot to add an intrinsic to the above
-         list(s) when they implemented it, or something's gone horribly wrong.
-       */
-      gfc_todo_error ("Scalarization of non-elemental intrinsic: %s",
-                     expr->value.function.name);
+         list(s) when they implemented it, or something's gone horribly
+        wrong.  */
+      gcc_unreachable ();
     }
 }
 
index 7bff3aa..eafd280 100644 (file)
@@ -632,10 +632,6 @@ struct lang_decl           GTY(())
 #define GFC_TYPE_ARRAY_DATAPTR_TYPE(node) \
   (TYPE_LANG_SPECIFIC(node)->dataptr_type)
 
-/* I changed this from sorry(...) because it should not return.  */
-/* TODO: Remove gfc_todo_error before releasing version 1.0.  */
-#define gfc_todo_error(args...) fatal_error("gfc_todo: Not Implemented: " args)
-
 /* Build an expression with void type.  */
 #define build1_v(code, arg) build1(code, void_type_node, arg)
 #define build2_v(code, arg1, arg2) build2(code, void_type_node, \