diff options
author | Paul Thomas <pault@gcc.gnu.org> | 2006-10-13 12:51:07 +0000 |
---|---|---|
committer | Paul Thomas <pault@gcc.gnu.org> | 2006-10-13 12:51:07 +0000 |
commit | 982186b1be20337cd4101495a9b0cbab937fd74f (patch) | |
tree | 1d53d33e42e171e630c8781c3fdee5e851cb8967 /gcc/fortran/module.c | |
parent | ac677cc88956d8b2022022610eb79112136267f3 (diff) | |
download | gcc-982186b1be20337cd4101495a9b0cbab937fd74f.zip gcc-982186b1be20337cd4101495a9b0cbab937fd74f.tar.gz gcc-982186b1be20337cd4101495a9b0cbab937fd74f.tar.bz2 |
re PR fortran/29373 (implicit type declaration and contained function clash)
2006-10-13 Paul Thomas <pault@gcc.gnu.org>
PR fortran/29373
* decl.c (get_proc_name, gfc_match_function_decl): Add
attr.implicit_type to conditions that throw error for
existing explicit interface and that allow new type-
spec to be applied.
PR fortran/29407
* resolve.c (resolve_fl_namelist): Do not check for
namelist/procedure conflict, if the symbol corresponds
to a good local variable declaration.
PR fortran/27701
* decl.c (get_proc_name): Replace the detection of a declared
procedure by the presence of a formal argument list by the
attributes of the symbol and the presence of an explicit
interface.
PR fortran/29232
* resolve.c (resolve_fl_variable): See if the host association
of a derived type is blocked by the presence of another type I
object in the current namespace.
PR fortran/29364
* resolve.c (resolve_fl_derived): Check for the presence of
the derived type for a derived type component.
PR fortran/24398
* module.c (gfc_use_module): Check that the first words in a
module file are 'GFORTRAN module'.
PR fortran/29422
* resolve.c (resolve_transfer): Test functions for suitability
for IO, as well as variables.
PR fortran/29428
* trans-expr.c (gfc_trans_scalar_assign): Remove nullify of
rhs expression.
2006-10-13 Paul Thomas <pault@gcc.gnu.org>
PR fortran/29373
* gfortran.dg/implicit_9.f90: New test.
PR fortran/29407
* gfortran.dg/namelist_25.f90: New test.
PR fortran/27701
* gfortran.dg/same_name_2.f90: New test.
PR fortran/29232
* gfortran.dg/host_assoc_types_1.f90: New test.
PR fortran/29364
* gfortran.dg/missing_derived_type_1.f90: New test.
* gfortran.dg/implicit_actual.f90: Comment out USE GLOBAL.
PR fortran/29422
* gfortran.dg/alloc_comp_constraint_4.f90: New test.
PR fortran/29428
* gfortran.dg/alloc_comp_assign_5.f90: New test.
From-SVN: r117692
Diffstat (limited to 'gcc/fortran/module.c')
-rw-r--r-- | gcc/fortran/module.c | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/gcc/fortran/module.c b/gcc/fortran/module.c index 599342e..f525ab6 100644 --- a/gcc/fortran/module.c +++ b/gcc/fortran/module.c @@ -3790,7 +3790,7 @@ gfc_use_module (void) { char *filename; gfc_state_data *p; - int c, line; + int c, line, start; filename = (char *) alloca(strlen(module_name) + strlen(MODULE_EXTENSION) + 1); @@ -3805,15 +3805,23 @@ gfc_use_module (void) iomode = IO_INPUT; module_line = 1; module_column = 1; + start = 0; - /* Skip the first two lines of the module. */ - /* FIXME: Could also check for valid two lines here, instead. */ + /* Skip the first two lines of the module, after checking that this is + a gfortran module file. */ line = 0; while (line < 2) { c = module_char (); if (c == EOF) bad_module ("Unexpected end of module"); + if (start++ < 2) + parse_name (c); + if ((start == 1 && strcmp (atom_name, "GFORTRAN") != 0) + || (start == 2 && strcmp (atom_name, " module") != 0)) + gfc_fatal_error ("File '%s' opened at %C is not a GFORTRAN module " + "file", filename); + if (c == '\n') line++; } |