diff options
author | Janus Weil <janus@gcc.gnu.org> | 2011-03-29 11:39:10 +0200 |
---|---|---|
committer | Janus Weil <janus@gcc.gnu.org> | 2011-03-29 11:39:10 +0200 |
commit | d91909c0133554d00379f0ef41fe2d2ff6ab9968 (patch) | |
tree | 5cbc71797224538781afa1e8370fcb01a020856b /gcc/fortran | |
parent | 23360fe40929b6f731db12007a7b262e72e5e336 (diff) | |
download | gcc-d91909c0133554d00379f0ef41fe2d2ff6ab9968.zip gcc-d91909c0133554d00379f0ef41fe2d2ff6ab9968.tar.gz gcc-d91909c0133554d00379f0ef41fe2d2ff6ab9968.tar.bz2 |
re PR fortran/48095 ([OOP] Invalid assignment to procedure pointer component not rejected)
2011-03-29 Janus Weil <janus@gcc.gnu.org>
PR fortran/48095
* decl.c (match_procedure_decl,match_ppc_decl): Set flavor of interface.
* module.c (MOD_VERSION): Bump.
(mio_typespec): Read/write 'interface' field.
* primary.c (match_string_constant,match_logical_constant): Remove
unneeded code.
(match_complex_constant): Make sure to clear the typespec.
2011-03-29 Janus Weil <janus@gcc.gnu.org>
PR fortran/48095
* gfortran.dg/module_md5_1.f90: Modified MD5 sum.
* gfortran.dg/proc_ptr_comp_32.f90: New.
From-SVN: r171654
Diffstat (limited to 'gcc/fortran')
-rw-r--r-- | gcc/fortran/ChangeLog | 10 | ||||
-rw-r--r-- | gcc/fortran/decl.c | 6 | ||||
-rw-r--r-- | gcc/fortran/module.c | 4 | ||||
-rw-r--r-- | gcc/fortran/primary.c | 8 |
4 files changed, 18 insertions, 10 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 4bb344d..3ebca54 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,13 @@ +2011-03-29 Janus Weil <janus@gcc.gnu.org> + + PR fortran/48095 + * decl.c (match_procedure_decl,match_ppc_decl): Set flavor of interface. + * module.c (MOD_VERSION): Bump. + (mio_typespec): Read/write 'interface' field. + * primary.c (match_string_constant,match_logical_constant): Remove + unneeded code. + (match_complex_constant): Make sure to clear the typespec. + 2011-03-29 Thomas Koenig <tkoenig@gcc.gnu.org> * frontend-passes.c (create_var): Warn about creating an diff --git a/gcc/fortran/decl.c b/gcc/fortran/decl.c index 8b5f92b..f7a704f 100644 --- a/gcc/fortran/decl.c +++ b/gcc/fortran/decl.c @@ -4737,8 +4737,9 @@ match_procedure_decl (void) return MATCH_ERROR; sym->ts.interface = gfc_new_symbol ("", gfc_current_ns); sym->ts.interface->ts = current_ts; + sym->ts.interface->attr.flavor = FL_PROCEDURE; sym->ts.interface->attr.function = 1; - sym->attr.function = sym->ts.interface->attr.function; + sym->attr.function = 1; sym->attr.if_source = IFSRC_UNKNOWN; } @@ -4871,8 +4872,9 @@ match_ppc_decl (void) c->ts = ts; c->ts.interface = gfc_new_symbol ("", gfc_current_ns); c->ts.interface->ts = ts; + c->ts.interface->attr.flavor = FL_PROCEDURE; c->ts.interface->attr.function = 1; - c->attr.function = c->ts.interface->attr.function; + c->attr.function = 1; c->attr.if_source = IFSRC_UNKNOWN; } diff --git a/gcc/fortran/module.c b/gcc/fortran/module.c index 923f8c6..36701b4 100644 --- a/gcc/fortran/module.c +++ b/gcc/fortran/module.c @@ -80,7 +80,7 @@ along with GCC; see the file COPYING3. If not see /* Don't put any single quote (') in MOD_VERSION, if yout want it to be recognized. */ -#define MOD_VERSION "6" +#define MOD_VERSION "7" /* Structure that describes a position within a module file. */ @@ -2124,6 +2124,8 @@ mio_typespec (gfc_typespec *ts) else mio_symbol_ref (&ts->u.derived); + mio_symbol_ref (&ts->interface); + /* Add info for C interop and is_iso_c. */ mio_integer (&ts->is_c_interop); mio_integer (&ts->is_iso_c); diff --git a/gcc/fortran/primary.c b/gcc/fortran/primary.c index 4cda7a1..a121999 100644 --- a/gcc/fortran/primary.c +++ b/gcc/fortran/primary.c @@ -980,9 +980,6 @@ got_delim: goto no_match; e = gfc_get_character_expr (kind, &start_locus, NULL, length); - e->ref = NULL; - e->ts.is_c_interop = 0; - e->ts.is_iso_c = 0; gfc_current_locus = start_locus; @@ -1086,8 +1083,6 @@ match_logical_constant (gfc_expr **result) } e = gfc_get_logical_expr (kind, &gfc_current_locus, i); - e->ts.is_c_interop = 0; - e->ts.is_iso_c = 0; *result = e; return MATCH_YES; @@ -1269,10 +1264,9 @@ match_complex_constant (gfc_expr **result) else kind = gfc_default_real_kind; } + gfc_clear_ts (&target); target.type = BT_REAL; target.kind = kind; - target.is_c_interop = 0; - target.is_iso_c = 0; if (real->ts.type != BT_REAL || kind != real->ts.kind) gfc_convert_type (real, &target, 2); |