diff options
author | Harald Anlauf <anlauf@gmx.de> | 2023-11-30 21:53:21 +0100 |
---|---|---|
committer | Harald Anlauf <anlauf@gmx.de> | 2023-12-01 22:21:16 +0100 |
commit | 7317275497e10c4a0fb3fbaa6ca87f3463ac124d (patch) | |
tree | 9601639883a961eeb173446eb95c25e30b6effcc /gcc/fortran | |
parent | 37e6c9bd99575752b7122c5d76aa2cf021deb93c (diff) | |
download | gcc-7317275497e10c4a0fb3fbaa6ca87f3463ac124d.zip gcc-7317275497e10c4a0fb3fbaa6ca87f3463ac124d.tar.gz gcc-7317275497e10c4a0fb3fbaa6ca87f3463ac124d.tar.bz2 |
Fortran: copy-out for possibly missing OPTIONAL CLASS arguments [PR112772]
gcc/fortran/ChangeLog:
PR fortran/112772
* trans-expr.cc (gfc_conv_class_to_class): Make copy-out conditional
on the presence of an OPTIONAL CLASS argument passed to an OPTIONAL
CLASS dummy.
gcc/testsuite/ChangeLog:
PR fortran/112772
* gfortran.dg/missing_optional_dummy_7.f90: New test.
Diffstat (limited to 'gcc/fortran')
-rw-r--r-- | gcc/fortran/trans-expr.cc | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/gcc/fortran/trans-expr.cc b/gcc/fortran/trans-expr.cc index bfe9996..6a47af3 100644 --- a/gcc/fortran/trans-expr.cc +++ b/gcc/fortran/trans-expr.cc @@ -1365,6 +1365,15 @@ gfc_conv_class_to_class (gfc_se *parmse, gfc_expr *e, gfc_typespec class_ts, tmp = build3_loc (input_location, COND_EXPR, void_type_node, cond, tmp, tmp2); gfc_add_expr_to_block (&parmse->pre, tmp); + + if (!elemental && full_array && copyback) + { + tmp2 = build_empty_stmt (input_location); + tmp = gfc_finish_block (&parmse->post); + tmp = build3_loc (input_location, COND_EXPR, void_type_node, + cond, tmp, tmp2); + gfc_add_expr_to_block (&parmse->post, tmp); + } } else gfc_add_block_to_block (&parmse->pre, &block); |