trans-expr.c (gfc_conv_gfc_desc_to_cfi_desc): Deal with exprs that are indirect refer...
authorPaul Thomas <pault@gcc.gnu.org>
Tue, 15 Jan 2019 19:52:08 +0000 (19:52 +0000)
committerPaul Thomas <pault@gcc.gnu.org>
Tue, 15 Jan 2019 19:52:08 +0000 (19:52 +0000)
2019-01-15  Paul Thomas  <pault@gcc.gnu.org>

* 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  <pault@gcc.gnu.org>

* gfortran.dg/ISO_Fortran_binding_2.c : Change reference to
ISO_Fortran_binding_2.h.

From-SVN: r267946

gcc/fortran/ChangeLog
gcc/fortran/trans-expr.c
gcc/testsuite/ChangeLog
gcc/testsuite/gfortran.dg/ISO_Fortran_binding_1.c

index 7ea2749a414cab2051272d621c1921604d430e7d..a8cb6dd505f2dffcb0061b4834dc32ecb06f6c4c 100644 (file)
@@ -1,3 +1,8 @@
+2019-01-15  Paul Thomas  <pault@gcc.gnu.org>
+
+       * 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  <dominiq@gcc.gnu.org>
 
        PR fortran/88803
index c3388d7eb272c702020c59063d4f11e9936dd4ac..b38d784bc0c5e939dd302561ff87b170957edc9f 100644 (file)
@@ -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.  */
index 141cf602abbfcb5969867ba961467148de0d0dea..d38a5783686e874d190cfbb14301e454c3e7facd 100644 (file)
@@ -1,3 +1,8 @@
+2019-01-15  Paul Thomas  <pault@gcc.gnu.org>
+
+       * gfortran.dg/ISO_Fortran_binding_2.c : Change reference to
+       ISO_Fortran_binding_2.h.
+
 2019-01-15  Marek Polacek  <polacek@redhat.com>
 
        PR c++/88866
index 3bf5c3d4950c7f7bb14a4afd6d0287fd96d929c1..d3eb9a4938a3d41edffc09eb6448a82acb99a421 100644 (file)
@@ -1,6 +1,6 @@
 /* Test F2008 18.5: ISO_Fortran_binding.h functions.  */
 
-#include <ISO_Fortran_binding.h>
+#include "../../../libgfortran/ISO_Fortran_binding.h"
 #include <stdio.h>
 #include <stdlib.h>
 #include <complex.h>