[Patch, fortran] PR40011 - Problems with -fwhole-file

Tobias Burnus burnus@net-b.de
Mon Jul 27 11:36:00 GMT 2009


Paul Richard Thomas schrieb:
> Here is the latest version of the whole file patch.  I have checked it
> out reasobaly thoroughly for the logic around the clean-up.
>   
Thanks for your effort!

+gfc_errors_to_warnings (int f)
+{
+  warnings_not_errors = (f == 1) ? 1 : 0;


I somewhat would prefer a "bool" instead of an integer. (When I read it
first, I was wondering whether other values than 0 and 1 would be passed
as e.g. 2 gives false, contrary to the standard C convention.) But you
can also leave it as is, if you want.

> Bootstrapped and regtested on x86_64/FC9 - OK for trunk?
>   
Yes. (I also tested it successfully with Fleur, octopus, and CP2K
[multi-file version].)

 * * *

As follow up - after the check in-, one should find out why the test in
PR 40011 (comment 40) still ICEs. And address the points risen by Richard.

(Afterwards, one could consider adding more inconsistency checks for the
interfaces - I think there a couple of PRs about these. And one should
consider to enable -fwhole-file by default, which means fixing the
testsuite to either use -fno-whole-file, adding dg-warning or fixing
invalid tests.
Regarding enabling it by default: I think the performance of some
benchmark tests [e.g. one of polyhedron] regresses, one should try to
address those ME optimization issues this as well.)

Tobias

> 2009-07-26  Paul Thomas  <pault@gcc.gnu.org>
>
> 	PR fortran/40011
> 	* error.c : Add static flag 'warnings_not_errors'.
> 	(gfc_error): If 'warnings_not_errors' is set, branch to code
> 	from gfc_warning.
> 	(gfc_clear_error): Reset 'warnings_not_errors'.
> 	(gfc_errors_to_warnings): New function.
> 	* options.c (gfc_post_options): If pedantic and flag_whole_file
> 	change the latter to a value of 2.
> 	* parse.c (parse_module): Add module namespace to gsymbol.
> 	(resolve_all_program_units): New function.
> 	(clean_up_modules): New function.
> 	(translate_all_program_units): New function.
> 	(gfc_parse_file): If whole_file, do not clean up module right
> 	away and add derived types to namespace derived types. In
> 	addition, call the three new functions above.
> 	* resolve.c (not_in_recursive): New function.
> 	(not_entry_self_reference): New function.
> 	(resolve_global_procedure): Symbol must not be IFSRC_UNKNOWN,
> 	procedure must not be in the course of being resolved and
> 	must return false for the two new functions. Pack away the
> 	current derived type list before calling gfc_resolve for the
> 	gsymbol namespace.  It is unconditionally an error if the ranks
> 	of the reference and ther procedure do not match. Convert
> 	errors to warnings during call to gfc_procedure_use if not
> 	pedantic or legacy.
> 	(gfc_resolve): Set namespace resolved flag to -1 during
> 	resolution and store current cs_base.
> 	* trans-decl.c (gfc_get_symbol_decl): If whole_file compilation
> 	substitute a use associated variable, if it is available in a
> 	gsymbolnamespace.
> 	(gfc_get_extern_function_decl): If the procedure is use assoc,
> 	do not attempt to find it in a gsymbol because it could be an
> 	interface. If the symbol exists in a modulnamespace, return
> 	its backend_decl.
> 	* trans-expr.c (gfc_trans_scalar_assign): If a derived type
> 	assignment, set the rhs TYPE_MAIN_VARIANT to that of the rhs.
> 	* trans-types.c (copy_dt_decls_ifequal): Add 'from_gsym' as a
> 	boolean argument. Copy component backend_decls directly if the
> 	components are derived types and from_gsym is true.
> 	(gfc_get_derived_type): If whole_file copy the derived type from
> 	the module if it is use associated, otherwise, if can be found
> 	in another gsymbol namespace, use the existing derived type as
> 	the TYPE_CANONICAL and build normally.
> 	* gfortran.h : Add derived_types and resolved fields to
> 	gfc_namespace. Include prototype for gfc_errors_to_warnings.
> 	
> 2009-07-26  Paul Thomas  <pault@gcc.gnu.org>
>
> 	PR fortran/40011
> 	* gfortran.dg/whole_file_7.f90: New test.
> 	* gfortran.dg/whole_file_8.f90: New test.
> 	* gfortran.dg/whole_file_9.f90: New test.
> 	* gfortran.dg/whole_file_10.f90: New test.
> 	* gfortran.dg/whole_file_11.f90: New test.
> 	* gfortran.dg/whole_file_12.f90: New test.
> 	* gfortran.dg/whole_file_13.f90: New test.
> 	* gfortran.dg/whole_file_14.f90: New test.



More information about the Gcc-patches mailing list