From: Paul Thomas Date: Tue, 15 Jan 2019 19:52:08 +0000 (+0000) Subject: trans-expr.c (gfc_conv_gfc_desc_to_cfi_desc): Deal with exprs that are indirect refer... X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=92f3a180aaf6f3cd0b06e282632fc320445e3c01;p=gcc.git trans-expr.c (gfc_conv_gfc_desc_to_cfi_desc): Deal with exprs that are indirect references; ie. 2019-01-15 Paul Thomas * trans-expr.c (gfc_conv_gfc_desc_to_cfi_desc): Deal with exprs that are indirect references; ie. dummy arguments. 2019-01-15 Paul Thomas * gfortran.dg/ISO_Fortran_binding_2.c : Change reference to ISO_Fortran_binding_2.h. From-SVN: r267946 --- diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 7ea2749a414..a8cb6dd505f 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,8 @@ +2019-01-15 Paul Thomas + + * trans-expr.c (gfc_conv_gfc_desc_to_cfi_desc): Deal with exprs + that are indirect references; ie. dummy arguments. + 2019-01-13 Dominique d'Humieres PR fortran/88803 diff --git a/gcc/fortran/trans-expr.c b/gcc/fortran/trans-expr.c index c3388d7eb27..b38d784bc0c 100644 --- a/gcc/fortran/trans-expr.c +++ b/gcc/fortran/trans-expr.c @@ -4919,6 +4919,10 @@ gfc_conv_gfc_desc_to_cfi_desc (gfc_se *parmse, gfc_expr *e, gfc_symbol *fsym) { gfc_conv_expr_descriptor (parmse, e); + if (POINTER_TYPE_P (TREE_TYPE (parmse->expr))) + parmse->expr = build_fold_indirect_ref_loc (input_location, + parmse->expr); + /* All the temporary descriptors are marked as DECL_ARTIFICIAL. If the expression type is different from the descriptor type, then the offset must be found (eg. to a component ref or substring) @@ -4949,6 +4953,11 @@ gfc_conv_gfc_desc_to_cfi_desc (gfc_se *parmse, gfc_expr *e, gfc_symbol *fsym) else { gfc_conv_expr (parmse, e); + + if (POINTER_TYPE_P (TREE_TYPE (parmse->expr))) + parmse->expr = build_fold_indirect_ref_loc (input_location, + parmse->expr); + /* Copy the scalar for INTENT_IN. */ if (e->expr_type == EXPR_VARIABLE && fsym->attr.intent == INTENT_IN) parmse->expr = gfc_evaluate_now (parmse->expr, &parmse->pre); @@ -5875,7 +5884,7 @@ gfc_conv_procedure_call (gfc_se * se, gfc_symbol * sym, array-descriptor actual to array-descriptor dummy, see PR 41911 for why a check has to be inserted. fsym == NULL is checked as intrinsics required the descriptor - but do not always set fsym. + but do not always set fsym. Also, it is necessary to pass a NULL pointer to library routines which usually ignore optional arguments, so they can handle these themselves. */ diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 141cf602abb..d38a5783686 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2019-01-15 Paul Thomas + + * gfortran.dg/ISO_Fortran_binding_2.c : Change reference to + ISO_Fortran_binding_2.h. + 2019-01-15 Marek Polacek PR c++/88866 diff --git a/gcc/testsuite/gfortran.dg/ISO_Fortran_binding_1.c b/gcc/testsuite/gfortran.dg/ISO_Fortran_binding_1.c index 3bf5c3d4950..d3eb9a4938a 100644 --- a/gcc/testsuite/gfortran.dg/ISO_Fortran_binding_1.c +++ b/gcc/testsuite/gfortran.dg/ISO_Fortran_binding_1.c @@ -1,6 +1,6 @@ /* Test F2008 18.5: ISO_Fortran_binding.h functions. */ -#include +#include "../../../libgfortran/ISO_Fortran_binding.h" #include #include #include