aboutsummaryrefslogtreecommitdiff
path: root/gcc/fortran/trans-expr.c
diff options
context:
space:
mode:
authorHarald Anlauf <anlauf@gmx.de>2021-05-23 20:51:14 +0200
committerHarald Anlauf <anlauf@gmx.de>2021-05-23 20:51:14 +0200
commitfe03f4fc9548b3fdbff3c8284a994feaa7d6307d (patch)
tree0bfbd5616997e2a502a6dc32f0a545fb434087da /gcc/fortran/trans-expr.c
parenta4dbd5cffa6acb100dd75017ef95dadc3d8a136f (diff)
downloadgcc-fe03f4fc9548b3fdbff3c8284a994feaa7d6307d.zip
gcc-fe03f4fc9548b3fdbff3c8284a994feaa7d6307d.tar.gz
gcc-fe03f4fc9548b3fdbff3c8284a994feaa7d6307d.tar.bz2
Fortran: fix passing return value to class(*) dummy argument
gcc/fortran/ChangeLog: PR fortran/100551 * trans-expr.c (gfc_conv_procedure_call): Adjust check for implicit conversion of actual argument to an unlimited polymorphic procedure argument. gcc/testsuite/ChangeLog: PR fortran/100551 * gfortran.dg/pr100551.f90: New test.
Diffstat (limited to 'gcc/fortran/trans-expr.c')
-rw-r--r--gcc/fortran/trans-expr.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/gcc/fortran/trans-expr.c b/gcc/fortran/trans-expr.c
index cce18d0..3432cd4 100644
--- a/gcc/fortran/trans-expr.c
+++ b/gcc/fortran/trans-expr.c
@@ -5826,7 +5826,9 @@ gfc_conv_procedure_call (gfc_se * se, gfc_symbol * sym,
&derived_array);
}
else if (UNLIMITED_POLY (fsym) && e->ts.type != BT_CLASS
- && gfc_expr_attr (e).flavor != FL_PROCEDURE)
+ && e->ts.type != BT_PROCEDURE
+ && (gfc_expr_attr (e).flavor != FL_PROCEDURE
+ || gfc_expr_attr (e).proc != PROC_UNKNOWN))
{
/* The intrinsic type needs to be converted to a temporary
CLASS object for the unlimited polymorphic formal. */