diff options
author | Paul Thomas <pault@gcc.gnu.org> | 2017-03-18 11:53:53 +0000 |
---|---|---|
committer | Paul Thomas <pault@gcc.gnu.org> | 2017-03-18 11:53:53 +0000 |
commit | c7e4107b537c31cbbd22720935073bb4787e9773 (patch) | |
tree | ffd3ab1e79cf8deb0d35156af127f11439be1faa /gcc/fortran | |
parent | 251daa19a4d046491e7803c32fd46ae24750d4ba (diff) | |
download | gcc-c7e4107b537c31cbbd22720935073bb4787e9773.zip gcc-c7e4107b537c31cbbd22720935073bb4787e9773.tar.gz gcc-c7e4107b537c31cbbd22720935073bb4787e9773.tar.bz2 |
re PR fortran/71838 (ICE with OpenCoarrays on submodule)
2017-03-18 Paul Thomas <pault@gcc.gnu.org>
PR fortran/71838
* symbol.c (check_conflict): A dummy procedure in a submodule,
module procedure is not an error.
(gfc_add_flavor): Ditto.
2017-03-18 Paul Thomas <pault@gcc.gnu.org>
PR fortran/71838
* gfortran.dg/submodule_26.f08 : New test.
* gfortran.dg/submodule_27.f08 : New test.
From-SVN: r246255
Diffstat (limited to 'gcc/fortran')
-rw-r--r-- | gcc/fortran/ChangeLog | 9 | ||||
-rw-r--r-- | gcc/fortran/symbol.c | 16 |
2 files changed, 22 insertions, 3 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 55dc649..e8d6296 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,10 @@ +2017-03-18 Paul Thomas <pault@gcc.gnu.org> + + PR fortran/71838 + * symbol.c (check_conflict): A dummy procedure in a submodule, + module procedure is not an error. + (gfc_add_flavor): Ditto. + 2017-03-17 Jerry DeLisle <jvdelisle@gcc.gnu.org> PR fortran/79841 @@ -46,7 +53,7 @@ * gfortran.texi: Added description for the new API functions. Updated coverage of gfortran of TS18508. * intrinsic.c (add_functions): Added symbols to resolve new intrinsic - functions. + functions. * intrinsic.h: Added prototypes. * iresolve.c (gfc_resolve_failed_images): Resolve the failed_images intrinsic. diff --git a/gcc/fortran/symbol.c b/gcc/fortran/symbol.c index 9afa6d0..fc79d99 100644 --- a/gcc/fortran/symbol.c +++ b/gcc/fortran/symbol.c @@ -474,8 +474,13 @@ check_conflict (symbol_attribute *attr, const char *name, locus *where) } } - if (attr->dummy && ((attr->function || attr->subroutine) && - gfc_current_state () == COMP_CONTAINS)) + /* The copying of procedure dummy arguments for module procedures in + a submodule occur whilst the current state is COMP_CONTAINS. It + is necessary, therefore, to let this through. */ + if (attr->dummy + && (attr->function || attr->subroutine) + && gfc_current_state () == COMP_CONTAINS + && !(gfc_new_block && gfc_new_block->abr_modproc_decl)) gfc_error_now ("internal procedure %qs at %L conflicts with " "DUMMY argument", name, where); @@ -1646,6 +1651,13 @@ gfc_add_flavor (symbol_attribute *attr, sym_flavor f, const char *name, if (attr->flavor == f && f == FL_VARIABLE) return true; + /* Copying a procedure dummy argument for a module procedure in a + submodule results in the flavor being copied and would result in + an error without this. */ + if (gfc_new_block && gfc_new_block->abr_modproc_decl + && attr->flavor == f && f == FL_PROCEDURE) + return true; + if (attr->flavor != FL_UNKNOWN) { if (where == NULL) |