gfortran.h (gfc_get_data_variable, [...]): Move to decl.c.
* 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. From-SVN: r129034
This commit is contained in:
parent
b691d4b02a
commit
ca39e6f200
@ -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
|
||||
|
@ -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)
|
||||
|
@ -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 *);
|
||||
|
||||
|
24
gcc/fortran/data.h
Normal file
24
gcc/fortran/data.h
Normal file
@ -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 *);
|
@ -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;
|
||||
|
@ -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 *);
|
||||
|
@ -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;
|
||||
|
@ -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)
|
||||
{
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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 ();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -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, \
|
||||
|
Loading…
Reference in New Issue
Block a user