aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTobias Burnus <burnus@net-b.de>2013-03-18 10:50:23 +0100
committerTobias Burnus <burnus@gcc.gnu.org>2013-03-18 10:50:23 +0100
commit9fa5223135cf837e920329b2aee6f87f9515d231 (patch)
tree25e8e8b691c5f6e57051576d9f133388c1a8479e
parent0d5a1b56948ace8d94b7ab74c303cdc842413c3c (diff)
downloadgcc-9fa5223135cf837e920329b2aee6f87f9515d231.zip
gcc-9fa5223135cf837e920329b2aee6f87f9515d231.tar.gz
gcc-9fa5223135cf837e920329b2aee6f87f9515d231.tar.bz2
gfortran.h (gfc_option_t): Remove flag_whole_file.
2013-03-18 Tobias Burnus <burnus@net-b.de> * gfortran.h (gfc_option_t): Remove flag_whole_file. * invoke.texi (-fno-whole-file): Remove. * lang.opt (fwhole-file): Change to Ignore. * options.c (gfc_init_options, gfc_post_options, gfc_handle_option): Remove !flag_whole_file handling * parse.c (resolve_all_program_units, * translate_all_program_units, gfc_parse_file): Ditto. * resolve.c (resolve_global_procedure): Ditto. * trans-decl.c (gfc_get_symbol_decl, * gfc_get_extern_function_decl, gfc_create_module_variable): Ditto. * trans-types.c (gfc_get_derived_type): Ditto. From-SVN: r196773
-rw-r--r--gcc/fortran/ChangeLog14
-rw-r--r--gcc/fortran/gfortran.h1
-rw-r--r--gcc/fortran/invoke.texi18
-rw-r--r--gcc/fortran/lang.opt4
-rw-r--r--gcc/fortran/options.c16
-rw-r--r--gcc/fortran/parse.c41
-rw-r--r--gcc/fortran/resolve.c19
-rw-r--r--gcc/fortran/trans-decl.c33
-rw-r--r--gcc/fortran/trans-types.c19
9 files changed, 58 insertions, 107 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog
index ec9fbaa..817b184 100644
--- a/gcc/fortran/ChangeLog
+++ b/gcc/fortran/ChangeLog
@@ -1,3 +1,17 @@
+2013-03-18 Tobias Burnus <burnus@net-b.de>
+
+ * gfortran.h (gfc_option_t): Remove flag_whole_file.
+ * invoke.texi (-fno-whole-file): Remove.
+ * lang.opt (fwhole-file): Change to Ignore.
+ * options.c (gfc_init_options, gfc_post_options,
+ gfc_handle_option): Remove !flag_whole_file handling
+ * parse.c (resolve_all_program_units, translate_all_program_units,
+ gfc_parse_file): Ditto.
+ * resolve.c (resolve_global_procedure): Ditto.
+ * trans-decl.c (gfc_get_symbol_decl, gfc_get_extern_function_decl,
+ gfc_create_module_variable): Ditto.
+ * trans-types.c (gfc_get_derived_type): Ditto.
+
2013-03-15 Tobias Burnus <burnus@net-b.de>
PR fortran/56615
diff --git a/gcc/fortran/gfortran.h b/gcc/fortran/gfortran.h
index 18bbf79..76d2797 100644
--- a/gcc/fortran/gfortran.h
+++ b/gcc/fortran/gfortran.h
@@ -2297,7 +2297,6 @@ typedef struct
int flag_init_character;
char flag_init_character_value;
int flag_align_commons;
- int flag_whole_file;
int flag_protect_parens;
int flag_realloc_lhs;
int flag_aggressive_function_elimination;
diff --git a/gcc/fortran/invoke.texi b/gcc/fortran/invoke.texi
index db958f9..12c200e 100644
--- a/gcc/fortran/invoke.texi
+++ b/gcc/fortran/invoke.texi
@@ -180,7 +180,7 @@ and warnings}.
-finit-real=@var{<zero|inf|-inf|nan|snan>} @gol
-fmax-array-constructor=@var{n} -fmax-stack-var-size=@var{n}
-fno-align-commons @gol
--fno-automatic -fno-protect-parens -fno-underscoring -fno-whole-file @gol
+-fno-automatic -fno-protect-parens -fno-underscoring @gol
-fsecond-underscore -fpack-derived -frealloc-lhs -frecursive @gol
-frepack-arrays -fshort-enums -fstack-arrays
}
@@ -1291,22 +1291,6 @@ in the source, even if the names as seen by the linker are mangled to
prevent accidental linking between procedures with incompatible
interfaces.
-@item -fno-whole-file
-@opindex @code{fno-whole-file}
-This flag causes the compiler to resolve and translate each procedure in
-a file separately.
-
-By default, the whole file is parsed and placed in a single front-end tree.
-During resolution, in addition to all the usual checks and fixups, references
-to external procedures that are in the same file effect resolution of
-that procedure, if not already done, and a check of the interfaces. The
-dependences are resolved by changing the order in which the file is
-translated into the backend tree. Thus, a procedure that is referenced
-is translated before the reference and the duplication of backend tree
-declarations eliminated.
-
-The @option{-fno-whole-file} option is deprecated and may lead to wrong code.
-
@item -fsecond-underscore
@opindex @code{fsecond-underscore}
@cindex underscore
diff --git a/gcc/fortran/lang.opt b/gcc/fortran/lang.opt
index fbe8a1b..dbc3f6b 100644
--- a/gcc/fortran/lang.opt
+++ b/gcc/fortran/lang.opt
@@ -594,8 +594,8 @@ Fortran
Append underscores to externally visible names
fwhole-file
-Fortran
-Compile all program units at once and check all interfaces
+Fortran Ignore
+Does nothing. Preserved for backward compatibility.
fworking-directory
Fortran
diff --git a/gcc/fortran/options.c b/gcc/fortran/options.c
index fba1a3f..3f5de03 100644
--- a/gcc/fortran/options.c
+++ b/gcc/fortran/options.c
@@ -124,7 +124,6 @@ gfc_init_options (unsigned int decoded_options_count,
gfc_option.flag_real8_kind = 0;
gfc_option.flag_dollar_ok = 0;
gfc_option.flag_underscoring = 1;
- gfc_option.flag_whole_file = 1;
gfc_option.flag_f2c = 0;
gfc_option.flag_second_underscore = -1;
gfc_option.flag_implicit_none = 0;
@@ -264,14 +263,6 @@ gfc_post_options (const char **pfilename)
sorry ("-fexcess-precision=standard for Fortran");
flag_excess_precision_cmdline = EXCESS_PRECISION_FAST;
- /* Whole program needs whole file mode. */
- if (flag_whole_program)
- gfc_option.flag_whole_file = 1;
-
- /* Enable whole-file mode if LTO is in effect. */
- if (flag_lto)
- gfc_option.flag_whole_file = 1;
-
/* Fortran allows associative math - but we cannot reassociate if
we want traps or signed zeros. Cf. also flag_protect_parens. */
if (flag_associative_math == -1)
@@ -430,9 +421,6 @@ gfc_post_options (const char **pfilename)
gfc_option.warn_tabs = 0;
}
- if (pedantic && gfc_option.flag_whole_file)
- gfc_option.flag_whole_file = 2;
-
/* Optimization implies front end optimization, unless the user
specified it directly. */
@@ -823,10 +811,6 @@ gfc_handle_option (size_t scode, const char *arg, int value,
gfc_option.flag_underscoring = value;
break;
- case OPT_fwhole_file:
- gfc_option.flag_whole_file = value;
- break;
-
case OPT_fsecond_underscore:
gfc_option.flag_second_underscore = value;
break;
diff --git a/gcc/fortran/parse.c b/gcc/fortran/parse.c
index 6ee7b7f..a7fa7dc 100644
--- a/gcc/fortran/parse.c
+++ b/gcc/fortran/parse.c
@@ -4382,8 +4382,7 @@ add_global_program (void)
}
-/* Resolve all the program units when whole file scope option
- is active. */
+/* Resolve all the program units. */
static void
resolve_all_program_units (gfc_namespace *gfc_global_ns_list)
{
@@ -4424,9 +4423,8 @@ clean_up_modules (gfc_gsymbol *gsym)
}
-/* Translate all the program units when whole file scope option
- is active. This could be in a different order to resolution if
- there are forward references in the file. */
+/* Translate all the program units. This could be in a different order
+ to resolution if there are forward references in the file. */
static void
translate_all_program_units (gfc_namespace *gfc_global_ns_list,
bool main_in_tu)
@@ -4551,8 +4549,7 @@ loop:
accept_statement (st);
add_global_program ();
parse_progunit (ST_NONE);
- if (gfc_option.flag_whole_file)
- goto prog_units;
+ goto prog_units;
break;
case ST_SUBROUTINE:
@@ -4560,8 +4557,7 @@ loop:
push_state (&s, COMP_SUBROUTINE, gfc_new_block);
accept_statement (st);
parse_progunit (ST_NONE);
- if (gfc_option.flag_whole_file)
- goto prog_units;
+ goto prog_units;
break;
case ST_FUNCTION:
@@ -4569,8 +4565,7 @@ loop:
push_state (&s, COMP_FUNCTION, gfc_new_block);
accept_statement (st);
parse_progunit (ST_NONE);
- if (gfc_option.flag_whole_file)
- goto prog_units;
+ goto prog_units;
break;
case ST_BLOCK_DATA:
@@ -4597,8 +4592,7 @@ loop:
push_state (&s, COMP_PROGRAM, gfc_new_block);
main_program_symbol (gfc_current_ns, "MAIN__");
parse_progunit (st);
- if (gfc_option.flag_whole_file)
- goto prog_units;
+ goto prog_units;
break;
}
@@ -4615,19 +4609,9 @@ loop:
if (s.state == COMP_MODULE)
{
gfc_dump_module (s.sym->name, errors_before == errors);
- if (!gfc_option.flag_whole_file)
- {
- if (errors == 0)
- gfc_generate_module_code (gfc_current_ns);
- pop_state ();
- gfc_done_2 ();
- }
- else
- {
- gfc_current_ns->derived_types = gfc_derived_types;
- gfc_derived_types = NULL;
- goto prog_units;
- }
+ gfc_current_ns->derived_types = gfc_derived_types;
+ gfc_derived_types = NULL;
+ goto prog_units;
}
else
{
@@ -4660,9 +4644,6 @@ prog_units:
done:
- if (!gfc_option.flag_whole_file)
- goto termination;
-
/* Do the resolution. */
resolve_all_program_units (gfc_global_ns_list);
@@ -4681,8 +4662,6 @@ prog_units:
/* Do the translation. */
translate_all_program_units (gfc_global_ns_list, seen_program);
-termination:
-
gfc_end_source_files ();
return SUCCESS;
diff --git a/gcc/fortran/resolve.c b/gcc/fortran/resolve.c
index bb0b946..e9b6fb9 100644
--- a/gcc/fortran/resolve.c
+++ b/gcc/fortran/resolve.c
@@ -2145,15 +2145,14 @@ resolve_global_procedure (gfc_symbol *sym, locus *where,
if ((gsym->type != GSYM_UNKNOWN && gsym->type != type))
gfc_global_used (gsym, where);
- if (gfc_option.flag_whole_file
- && (sym->attr.if_source == IFSRC_UNKNOWN
- || sym->attr.if_source == IFSRC_IFBODY)
- && gsym->type != GSYM_UNKNOWN
- && gsym->ns
- && gsym->ns->resolved != -1
- && gsym->ns->proc_name
- && not_in_recursive (sym, gsym->ns)
- && not_entry_self_reference (sym, gsym->ns))
+ if ((sym->attr.if_source == IFSRC_UNKNOWN
+ || sym->attr.if_source == IFSRC_IFBODY)
+ && gsym->type != GSYM_UNKNOWN
+ && gsym->ns
+ && gsym->ns->resolved != -1
+ && gsym->ns->proc_name
+ && not_in_recursive (sym, gsym->ns)
+ && not_entry_self_reference (sym, gsym->ns))
{
gfc_symbol *def_sym;
@@ -2364,7 +2363,7 @@ resolve_global_procedure (gfc_symbol *sym, locus *where,
"an explicit interface", sym->name, &sym->declared_at);
}
- if (gfc_option.flag_whole_file == 1
+ if (!pedantic
|| ((gfc_option.warn_std & GFC_STD_LEGACY)
&& !(gfc_option.warn_std & GFC_STD_GNU)))
gfc_errors_to_warnings (1);
diff --git a/gcc/fortran/trans-decl.c b/gcc/fortran/trans-decl.c
index 7806bbb..0e853ba 100644
--- a/gcc/fortran/trans-decl.c
+++ b/gcc/fortran/trans-decl.c
@@ -1341,15 +1341,14 @@ gfc_get_symbol_decl (gfc_symbol * sym)
&& sym->attr.flavor == FL_PARAMETER)
intrinsic_array_parameter = true;
- /* If use associated and whole file compilation, use the module
+ /* If use associated compilation, use the module
declaration. */
- if (gfc_option.flag_whole_file
- && (sym->attr.flavor == FL_VARIABLE
- || sym->attr.flavor == FL_PARAMETER)
- && sym->attr.use_assoc
- && !intrinsic_array_parameter
- && sym->module
- && gfc_get_module_backend_decl (sym))
+ if ((sym->attr.flavor == FL_VARIABLE
+ || sym->attr.flavor == FL_PARAMETER)
+ && sym->attr.use_assoc
+ && !intrinsic_array_parameter
+ && sym->module
+ && gfc_get_module_backend_decl (sym))
{
if (sym->ts.type == BT_CLASS && sym->backend_decl)
GFC_DECL_CLASS(sym->backend_decl) = 1;
@@ -1646,12 +1645,11 @@ gfc_get_extern_function_decl (gfc_symbol * sym)
return the backend_decl. */
gsym = gfc_find_gsymbol (gfc_gsym_root, sym->name);
- if (gfc_option.flag_whole_file
- && (!sym->attr.use_assoc || sym->attr.if_source != IFSRC_DECL)
- && !sym->backend_decl
- && gsym && gsym->ns
- && ((gsym->type == GSYM_SUBROUTINE) || (gsym->type == GSYM_FUNCTION))
- && (gsym->ns->proc_name->backend_decl || !sym->attr.intrinsic))
+ if ((!sym->attr.use_assoc || sym->attr.if_source != IFSRC_DECL)
+ && !sym->backend_decl
+ && gsym && gsym->ns
+ && ((gsym->type == GSYM_SUBROUTINE) || (gsym->type == GSYM_FUNCTION))
+ && (gsym->ns->proc_name->backend_decl || !sym->attr.intrinsic))
{
if (!gsym->ns->proc_name->backend_decl)
{
@@ -1703,9 +1701,7 @@ gfc_get_extern_function_decl (gfc_symbol * sym)
if (sym->module)
gsym = gfc_find_gsymbol (gfc_gsym_root, sym->module);
- if (gfc_option.flag_whole_file
- && gsym && gsym->ns
- && gsym->type == GSYM_MODULE)
+ if (gsym && gsym->ns && gsym->type == GSYM_MODULE)
{
gfc_symbol *s;
@@ -4047,8 +4043,7 @@ gfc_create_module_variable (gfc_symbol * sym)
decl = sym->backend_decl;
gcc_assert (sym->ns->proc_name->attr.flavor == FL_MODULE);
- /* -fwhole-file mixes up the contexts so these asserts are unnecessary. */
- if (!(gfc_option.flag_whole_file && sym->attr.use_assoc))
+ if (!sym->attr.use_assoc)
{
gcc_assert (TYPE_CONTEXT (decl) == NULL_TREE
|| TYPE_CONTEXT (decl) == sym->ns->proc_name->backend_decl);
diff --git a/gcc/fortran/trans-types.c b/gcc/fortran/trans-types.c
index 30561ee..cdac0da 100644
--- a/gcc/fortran/trans-types.c
+++ b/gcc/fortran/trans-types.c
@@ -2370,19 +2370,16 @@ gfc_get_derived_type (gfc_symbol * derived)
}
/* If use associated, use the module type for this one. */
- if (gfc_option.flag_whole_file
- && derived->backend_decl == NULL
- && derived->attr.use_assoc
- && derived->module
- && gfc_get_module_backend_decl (derived))
+ if (derived->backend_decl == NULL
+ && derived->attr.use_assoc
+ && derived->module
+ && gfc_get_module_backend_decl (derived))
goto copy_derived_types;
- /* If a whole file compilation, the derived types from an earlier
- namespace can be used as the canonical type. */
- if (gfc_option.flag_whole_file
- && derived->backend_decl == NULL
- && !derived->attr.use_assoc
- && gfc_global_ns_list)
+ /* The derived types from an earlier namespace can be used as the
+ canonical type. */
+ if (derived->backend_decl == NULL && !derived->attr.use_assoc
+ && gfc_global_ns_list)
{
for (ns = gfc_global_ns_list;
ns->translated && !got_canonical;