public inbox for gcc-patches@gcc.gnu.org
 help / color / mirror / Atom feed
* Re: [Patch, fortran] ISO_Fortran_binding PRs 90093, 90352 & 90355
@ 2019-05-07  8:39 Dominique d'Humières
  2019-05-07 18:47 ` Paul Richard Thomas
  0 siblings, 1 reply; 7+ messages in thread
From: Dominique d'Humières @ 2019-05-07  8:39 UTC (permalink / raw)
  To: Paul Richard Thomas; +Cc: gfortran, gcc-patches

Hi Paul,

With your patch, I see

FAIL: gfortran.dg/iso_c_binding_char_1.f90   -O   (test for errors, line 8)
FAIL: gfortran.dg/iso_c_binding_char_1.f90   -O   (test for errors, line 9)
FAIL: gfortran.dg/iso_c_binding_char_1.f90   -O  (test for excess errors)

This is due to a bad location of the errors:

/opt/gcc/work/gcc/testsuite/gfortran.dg/iso_c_binding_char_1.f90:7:16:

    7 | subroutine bar(c,d) BIND(C)
      |                1
Error: Character argument 'c' at (1) must be length 1 because procedure 'bar' is BIND(C)
/opt/gcc/work/gcc/testsuite/gfortran.dg/iso_c_binding_char_1.f90:7:18:

    7 | subroutine bar(c,d) BIND(C)
      |                  1
Error: Character argument 'd' at (1) must be length 1 because procedure 'bar' is BIND(C)

TIA

Dominique

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [Patch, fortran] ISO_Fortran_binding PRs 90093, 90352 & 90355
  2019-05-07  8:39 [Patch, fortran] ISO_Fortran_binding PRs 90093, 90352 & 90355 Dominique d'Humières
@ 2019-05-07 18:47 ` Paul Richard Thomas
  0 siblings, 0 replies; 7+ messages in thread
From: Paul Richard Thomas @ 2019-05-07 18:47 UTC (permalink / raw)
  To: Dominique d'Humières; +Cc: gfortran, gcc-patches

Hi Dominique,

Many thanks - I had already found this after replenishing my tree and
regtesting. I don't quite know how it escaped but the fix is obvious.

Amicalement

Paul

On Tue, 7 May 2019 at 09:39, Dominique d'Humières <dominiq@lps.ens.fr> wrote:
>
> Hi Paul,
>
> With your patch, I see
>
> FAIL: gfortran.dg/iso_c_binding_char_1.f90   -O   (test for errors, line 8)
> FAIL: gfortran.dg/iso_c_binding_char_1.f90   -O   (test for errors, line 9)
> FAIL: gfortran.dg/iso_c_binding_char_1.f90   -O  (test for excess errors)
>
> This is due to a bad location of the errors:
>
> /opt/gcc/work/gcc/testsuite/gfortran.dg/iso_c_binding_char_1.f90:7:16:
>
>     7 | subroutine bar(c,d) BIND(C)
>       |                1
> Error: Character argument 'c' at (1) must be length 1 because procedure 'bar' is BIND(C)
> /opt/gcc/work/gcc/testsuite/gfortran.dg/iso_c_binding_char_1.f90:7:18:
>
>     7 | subroutine bar(c,d) BIND(C)
>       |                  1
> Error: Character argument 'd' at (1) must be length 1 because procedure 'bar' is BIND(C)
>
> TIA
>
> Dominique



-- 
"If you can't explain it simply, you don't understand it well enough"
- Albert Einstein

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [Patch, fortran] ISO_Fortran_binding PRs 90093, 90352 & 90355
  2019-05-10  8:01     ` Paul Richard Thomas
@ 2019-05-11  7:54       ` Paul Richard Thomas
  0 siblings, 0 replies; 7+ messages in thread
From: Paul Richard Thomas @ 2019-05-11  7:54 UTC (permalink / raw)
  To: fortran, gcc-patches

Committed to 9-branch as revision 271089.

Paul

On Fri, 10 May 2019 at 09:00, Paul Richard Thomas
<paul.richard.thomas@gmail.com> wrote:
>
> Committed to trunk as revision 271057.
>
> Will do likewise with 9-branch asap.
>
> Cheers
>
> Paul
>
> On Wed, 8 May 2019 at 19:40, Paul Richard Thomas
> <paul.richard.thomas@gmail.com> wrote:
> >
> > Unless there are any objections to this patch, I plan to commit to
> > trunk and 9-branch tomorrow night, with the change to the testcase
> > pointed out by Dominique.
> >
> > I sincerely hope that will be the end of CFI PRs for a little while,
> > at least. I have a load of pending patches and want to get on with
> > fixing PDTs.
> >
> > Cheers
> >
> > Paul
> >
> > On Mon, 6 May 2019 at 19:59, Paul Richard Thomas
> > <paul.richard.thomas@gmail.com> wrote:
> > >
> > > It helps to attach the patch!
> > >
> > > On Mon, 6 May 2019 at 19:57, Paul Richard Thomas
> > > <paul.richard.thomas@gmail.com> wrote:
> > > >
> > > > Unfortunately, this patch was still in the making at the release of
> > > > 9.1. It is more or less self explanatory with the ChangeLogs.
> > > >
> > > > It should be noted that gfc_conv_expr_present could not be used in the
> > > > fix for PR90093 because the passed descriptor is a CFI type. Instead,
> > > > the test is for a null pointer passed.
> > > >
> > > > The changes to trans-array.c(gfc_trans_create_temp_array) have an eye
> > > > on the future, as well as PR90355. I am progressing towards the point
> > > > where all descriptors have 'span' set correctly so that
> > > > trans.c(get_array_span) can be eliminated and much of the code in the
> > > > callers can be simplified.
> > > >
> > > > Bootstrapped and regtested on FC29/x86_64 - OK for trunk and 9-branch?
> > > >
> > > > Paul
> > > >
> > > > 2019-05-06  Paul Thomas  <pault@gcc.gnu.org>
> > > >
> > > >     PR fortran/90093
> > > >     * trans-decl.c (convert_CFI_desc): Test that the dummy is
> > > >     present before doing any of the conversions.
> > > >
> > > >     PR fortran/90352
> > > >     * decl.c (gfc_verify_c_interop_param): Restore the error for
> > > >     charlen > 1 actual arguments passed to bind(C) procs.
> > > >     Clean up trailing white space.
> > > >
> > > >     PR fortran/90355
> > > >     * trans-array.c (gfc_trans_create_temp_array): Set the 'span'
> > > >     field to the element length for all types.
> > > >     (gfc_conv_expr_descriptor): The force_no_tmp flag is used to
> > > >     prevent temporary creation, especially for substrings.
> > > >     * trans-decl.c (gfc_trans_deferred_vars): Rather than assert
> > > >     that the backend decl for the string length is non-null, use it
> > > >     as a condition before calling gfc_trans_vla_type_sizes.
> > > >     * trans-expr.c (gfc_conv_gfc_desc_to_cfi_desc): 'force_no_tmp'
> > > >     is set before calling gfc_conv_expr_descriptor.
> > > >     * trans.c (get_array_span): Move the code for extracting 'span'
> > > >     from gfc_build_array_ref to this function. This is specific to
> > > >     descriptors that are component and indirect references.
> > > >     * trans.h : Add the force_no_tmp flag bitfield to gfc_se.
> > > >
> > > > 2019-05-06  Paul Thomas  <pault@gcc.gnu.org>
> > > >
> > > >     PR fortran/90093
> > > >     * gfortran.dg/ISO_Fortran_binding_12.f90: New test.
> > > >     * gfortran.dg/ISO_Fortran_binding_12.c: Supplementary code.
> > > >
> > > >     PR fortran/90352
> > > >     * gfortran.dg/iso_c_binding_char_1.f90: New test.
> > > >
> > > >     PR fortran/90355
> > > >     * gfortran.dg/ISO_Fortran_binding_4.f90: Add 'substr' to test
> > > >     the direct passing of substrings as descriptors to bind(C).
> > > >     * gfortran.dg/assign_10.f90: Increase the tree_dump count of
> > > >     'atmp' to account for the setting of the 'span' field.
> > > >     * gfortran.dg/transpose_optimization_2.f90: Ditto.
> >
> >
> >
> > --
> > "If you can't explain it simply, you don't understand it well enough"
> > - Albert Einstein
>
>
>
> --
> "If you can't explain it simply, you don't understand it well enough"
> - Albert Einstein



-- 
"If you can't explain it simply, you don't understand it well enough"
- Albert Einstein

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [Patch, fortran] ISO_Fortran_binding PRs 90093, 90352 & 90355
  2019-05-08 18:41   ` Paul Richard Thomas
@ 2019-05-10  8:01     ` Paul Richard Thomas
  2019-05-11  7:54       ` Paul Richard Thomas
  0 siblings, 1 reply; 7+ messages in thread
From: Paul Richard Thomas @ 2019-05-10  8:01 UTC (permalink / raw)
  To: fortran, gcc-patches

Committed to trunk as revision 271057.

Will do likewise with 9-branch asap.

Cheers

Paul

On Wed, 8 May 2019 at 19:40, Paul Richard Thomas
<paul.richard.thomas@gmail.com> wrote:
>
> Unless there are any objections to this patch, I plan to commit to
> trunk and 9-branch tomorrow night, with the change to the testcase
> pointed out by Dominique.
>
> I sincerely hope that will be the end of CFI PRs for a little while,
> at least. I have a load of pending patches and want to get on with
> fixing PDTs.
>
> Cheers
>
> Paul
>
> On Mon, 6 May 2019 at 19:59, Paul Richard Thomas
> <paul.richard.thomas@gmail.com> wrote:
> >
> > It helps to attach the patch!
> >
> > On Mon, 6 May 2019 at 19:57, Paul Richard Thomas
> > <paul.richard.thomas@gmail.com> wrote:
> > >
> > > Unfortunately, this patch was still in the making at the release of
> > > 9.1. It is more or less self explanatory with the ChangeLogs.
> > >
> > > It should be noted that gfc_conv_expr_present could not be used in the
> > > fix for PR90093 because the passed descriptor is a CFI type. Instead,
> > > the test is for a null pointer passed.
> > >
> > > The changes to trans-array.c(gfc_trans_create_temp_array) have an eye
> > > on the future, as well as PR90355. I am progressing towards the point
> > > where all descriptors have 'span' set correctly so that
> > > trans.c(get_array_span) can be eliminated and much of the code in the
> > > callers can be simplified.
> > >
> > > Bootstrapped and regtested on FC29/x86_64 - OK for trunk and 9-branch?
> > >
> > > Paul
> > >
> > > 2019-05-06  Paul Thomas  <pault@gcc.gnu.org>
> > >
> > >     PR fortran/90093
> > >     * trans-decl.c (convert_CFI_desc): Test that the dummy is
> > >     present before doing any of the conversions.
> > >
> > >     PR fortran/90352
> > >     * decl.c (gfc_verify_c_interop_param): Restore the error for
> > >     charlen > 1 actual arguments passed to bind(C) procs.
> > >     Clean up trailing white space.
> > >
> > >     PR fortran/90355
> > >     * trans-array.c (gfc_trans_create_temp_array): Set the 'span'
> > >     field to the element length for all types.
> > >     (gfc_conv_expr_descriptor): The force_no_tmp flag is used to
> > >     prevent temporary creation, especially for substrings.
> > >     * trans-decl.c (gfc_trans_deferred_vars): Rather than assert
> > >     that the backend decl for the string length is non-null, use it
> > >     as a condition before calling gfc_trans_vla_type_sizes.
> > >     * trans-expr.c (gfc_conv_gfc_desc_to_cfi_desc): 'force_no_tmp'
> > >     is set before calling gfc_conv_expr_descriptor.
> > >     * trans.c (get_array_span): Move the code for extracting 'span'
> > >     from gfc_build_array_ref to this function. This is specific to
> > >     descriptors that are component and indirect references.
> > >     * trans.h : Add the force_no_tmp flag bitfield to gfc_se.
> > >
> > > 2019-05-06  Paul Thomas  <pault@gcc.gnu.org>
> > >
> > >     PR fortran/90093
> > >     * gfortran.dg/ISO_Fortran_binding_12.f90: New test.
> > >     * gfortran.dg/ISO_Fortran_binding_12.c: Supplementary code.
> > >
> > >     PR fortran/90352
> > >     * gfortran.dg/iso_c_binding_char_1.f90: New test.
> > >
> > >     PR fortran/90355
> > >     * gfortran.dg/ISO_Fortran_binding_4.f90: Add 'substr' to test
> > >     the direct passing of substrings as descriptors to bind(C).
> > >     * gfortran.dg/assign_10.f90: Increase the tree_dump count of
> > >     'atmp' to account for the setting of the 'span' field.
> > >     * gfortran.dg/transpose_optimization_2.f90: Ditto.
>
>
>
> --
> "If you can't explain it simply, you don't understand it well enough"
> - Albert Einstein



-- 
"If you can't explain it simply, you don't understand it well enough"
- Albert Einstein

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [Patch, fortran] ISO_Fortran_binding PRs 90093, 90352 & 90355
  2019-05-06 18:59 ` Paul Richard Thomas
@ 2019-05-08 18:41   ` Paul Richard Thomas
  2019-05-10  8:01     ` Paul Richard Thomas
  0 siblings, 1 reply; 7+ messages in thread
From: Paul Richard Thomas @ 2019-05-08 18:41 UTC (permalink / raw)
  To: fortran, gcc-patches

Unless there are any objections to this patch, I plan to commit to
trunk and 9-branch tomorrow night, with the change to the testcase
pointed out by Dominique.

I sincerely hope that will be the end of CFI PRs for a little while,
at least. I have a load of pending patches and want to get on with
fixing PDTs.

Cheers

Paul

On Mon, 6 May 2019 at 19:59, Paul Richard Thomas
<paul.richard.thomas@gmail.com> wrote:
>
> It helps to attach the patch!
>
> On Mon, 6 May 2019 at 19:57, Paul Richard Thomas
> <paul.richard.thomas@gmail.com> wrote:
> >
> > Unfortunately, this patch was still in the making at the release of
> > 9.1. It is more or less self explanatory with the ChangeLogs.
> >
> > It should be noted that gfc_conv_expr_present could not be used in the
> > fix for PR90093 because the passed descriptor is a CFI type. Instead,
> > the test is for a null pointer passed.
> >
> > The changes to trans-array.c(gfc_trans_create_temp_array) have an eye
> > on the future, as well as PR90355. I am progressing towards the point
> > where all descriptors have 'span' set correctly so that
> > trans.c(get_array_span) can be eliminated and much of the code in the
> > callers can be simplified.
> >
> > Bootstrapped and regtested on FC29/x86_64 - OK for trunk and 9-branch?
> >
> > Paul
> >
> > 2019-05-06  Paul Thomas  <pault@gcc.gnu.org>
> >
> >     PR fortran/90093
> >     * trans-decl.c (convert_CFI_desc): Test that the dummy is
> >     present before doing any of the conversions.
> >
> >     PR fortran/90352
> >     * decl.c (gfc_verify_c_interop_param): Restore the error for
> >     charlen > 1 actual arguments passed to bind(C) procs.
> >     Clean up trailing white space.
> >
> >     PR fortran/90355
> >     * trans-array.c (gfc_trans_create_temp_array): Set the 'span'
> >     field to the element length for all types.
> >     (gfc_conv_expr_descriptor): The force_no_tmp flag is used to
> >     prevent temporary creation, especially for substrings.
> >     * trans-decl.c (gfc_trans_deferred_vars): Rather than assert
> >     that the backend decl for the string length is non-null, use it
> >     as a condition before calling gfc_trans_vla_type_sizes.
> >     * trans-expr.c (gfc_conv_gfc_desc_to_cfi_desc): 'force_no_tmp'
> >     is set before calling gfc_conv_expr_descriptor.
> >     * trans.c (get_array_span): Move the code for extracting 'span'
> >     from gfc_build_array_ref to this function. This is specific to
> >     descriptors that are component and indirect references.
> >     * trans.h : Add the force_no_tmp flag bitfield to gfc_se.
> >
> > 2019-05-06  Paul Thomas  <pault@gcc.gnu.org>
> >
> >     PR fortran/90093
> >     * gfortran.dg/ISO_Fortran_binding_12.f90: New test.
> >     * gfortran.dg/ISO_Fortran_binding_12.c: Supplementary code.
> >
> >     PR fortran/90352
> >     * gfortran.dg/iso_c_binding_char_1.f90: New test.
> >
> >     PR fortran/90355
> >     * gfortran.dg/ISO_Fortran_binding_4.f90: Add 'substr' to test
> >     the direct passing of substrings as descriptors to bind(C).
> >     * gfortran.dg/assign_10.f90: Increase the tree_dump count of
> >     'atmp' to account for the setting of the 'span' field.
> >     * gfortran.dg/transpose_optimization_2.f90: Ditto.



-- 
"If you can't explain it simply, you don't understand it well enough"
- Albert Einstein

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [Patch, fortran] ISO_Fortran_binding PRs 90093, 90352 & 90355
  2019-05-06 18:57 Paul Richard Thomas
@ 2019-05-06 18:59 ` Paul Richard Thomas
  2019-05-08 18:41   ` Paul Richard Thomas
  0 siblings, 1 reply; 7+ messages in thread
From: Paul Richard Thomas @ 2019-05-06 18:59 UTC (permalink / raw)
  To: fortran, gcc-patches

[-- Attachment #1: Type: text/plain, Size: 2690 bytes --]

It helps to attach the patch!

On Mon, 6 May 2019 at 19:57, Paul Richard Thomas
<paul.richard.thomas@gmail.com> wrote:
>
> Unfortunately, this patch was still in the making at the release of
> 9.1. It is more or less self explanatory with the ChangeLogs.
>
> It should be noted that gfc_conv_expr_present could not be used in the
> fix for PR90093 because the passed descriptor is a CFI type. Instead,
> the test is for a null pointer passed.
>
> The changes to trans-array.c(gfc_trans_create_temp_array) have an eye
> on the future, as well as PR90355. I am progressing towards the point
> where all descriptors have 'span' set correctly so that
> trans.c(get_array_span) can be eliminated and much of the code in the
> callers can be simplified.
>
> Bootstrapped and regtested on FC29/x86_64 - OK for trunk and 9-branch?
>
> Paul
>
> 2019-05-06  Paul Thomas  <pault@gcc.gnu.org>
>
>     PR fortran/90093
>     * trans-decl.c (convert_CFI_desc): Test that the dummy is
>     present before doing any of the conversions.
>
>     PR fortran/90352
>     * decl.c (gfc_verify_c_interop_param): Restore the error for
>     charlen > 1 actual arguments passed to bind(C) procs.
>     Clean up trailing white space.
>
>     PR fortran/90355
>     * trans-array.c (gfc_trans_create_temp_array): Set the 'span'
>     field to the element length for all types.
>     (gfc_conv_expr_descriptor): The force_no_tmp flag is used to
>     prevent temporary creation, especially for substrings.
>     * trans-decl.c (gfc_trans_deferred_vars): Rather than assert
>     that the backend decl for the string length is non-null, use it
>     as a condition before calling gfc_trans_vla_type_sizes.
>     * trans-expr.c (gfc_conv_gfc_desc_to_cfi_desc): 'force_no_tmp'
>     is set before calling gfc_conv_expr_descriptor.
>     * trans.c (get_array_span): Move the code for extracting 'span'
>     from gfc_build_array_ref to this function. This is specific to
>     descriptors that are component and indirect references.
>     * trans.h : Add the force_no_tmp flag bitfield to gfc_se.
>
> 2019-05-06  Paul Thomas  <pault@gcc.gnu.org>
>
>     PR fortran/90093
>     * gfortran.dg/ISO_Fortran_binding_12.f90: New test.
>     * gfortran.dg/ISO_Fortran_binding_12.c: Supplementary code.
>
>     PR fortran/90352
>     * gfortran.dg/iso_c_binding_char_1.f90: New test.
>
>     PR fortran/90355
>     * gfortran.dg/ISO_Fortran_binding_4.f90: Add 'substr' to test
>     the direct passing of substrings as descriptors to bind(C).
>     * gfortran.dg/assign_10.f90: Increase the tree_dump count of
>     'atmp' to account for the setting of the 'span' field.
>     * gfortran.dg/transpose_optimization_2.f90: Ditto.

[-- Attachment #2: submit.diff --]
[-- Type: text/x-patch, Size: 22155 bytes --]

Index: gcc/fortran/decl.c
===================================================================
*** gcc/fortran/decl.c	(revision 270622)
--- gcc/fortran/decl.c	(working copy)
*************** match_data_constant (gfc_expr **result)
*** 406,412 ****
  	 contains the right constant expression.  Check here.  */
        if ((*result)->symtree == NULL
  	  && (*result)->expr_type == EXPR_CONSTANT
! 	  && ((*result)->ts.type == BT_INTEGER 
  	      || (*result)->ts.type == BT_REAL))
  	return m;
  
--- 406,412 ----
  	 contains the right constant expression.  Check here.  */
        if ((*result)->symtree == NULL
  	  && (*result)->expr_type == EXPR_CONSTANT
! 	  && ((*result)->ts.type == BT_INTEGER
  	      || (*result)->ts.type == BT_REAL))
  	return m;
  
*************** gfc_verify_c_interop_param (gfc_symbol *
*** 1493,1511 ****
  
            /* Character strings are only C interoperable if they have a
               length of 1.  */
!           if (sym->ts.type == BT_CHARACTER)
  	    {
  	      gfc_charlen *cl = sym->ts.u.cl;
  	      if (!cl || !cl->length || cl->length->expr_type != EXPR_CONSTANT
                    || mpz_cmp_si (cl->length->value.integer, 1) != 0)
  		{
! 		  if (!gfc_notify_std (GFC_STD_F2018,
! 				       "Character argument %qs at %L "
! 				       "must be length 1 because "
! 				       "procedure %qs is BIND(C)",
! 				       sym->name, &sym->declared_at,
! 				       sym->ns->proc_name->name))
! 		    retval = false;
  		}
  	    }
  
--- 1493,1510 ----
  
            /* Character strings are only C interoperable if they have a
               length of 1.  */
!           if (sym->ts.type == BT_CHARACTER && !sym->attr.dimension)
  	    {
  	      gfc_charlen *cl = sym->ts.u.cl;
  	      if (!cl || !cl->length || cl->length->expr_type != EXPR_CONSTANT
                    || mpz_cmp_si (cl->length->value.integer, 1) != 0)
  		{
! 		  gfc_error ("Character argument %qs at %L "
! 			     "must be length 1 because "
! 			     "procedure %qs is BIND(C)",
! 			     sym->name, &sym->declared_at,
! 			     sym->ns->proc_name->name);
! 		  retval = false;
  		}
  	    }
  
*************** static bool
*** 6074,6080 ****
  in_module_or_interface(void)
  {
    if (gfc_current_state () == COMP_MODULE
!       || gfc_current_state () == COMP_SUBMODULE 
        || gfc_current_state () == COMP_INTERFACE)
      return true;
  
--- 6073,6079 ----
  in_module_or_interface(void)
  {
    if (gfc_current_state () == COMP_MODULE
!       || gfc_current_state () == COMP_SUBMODULE
        || gfc_current_state () == COMP_INTERFACE)
      return true;
  
*************** in_module_or_interface(void)
*** 6085,6091 ****
        gfc_state_data *p;
        for (p = gfc_state_stack->previous; p ; p = p->previous)
  	{
! 	  if (p->state == COMP_MODULE || p->state == COMP_SUBMODULE 
  	      || p->state == COMP_INTERFACE)
  	    return true;
  	}
--- 6084,6090 ----
        gfc_state_data *p;
        for (p = gfc_state_stack->previous; p ; p = p->previous)
  	{
! 	  if (p->state == COMP_MODULE || p->state == COMP_SUBMODULE
  	      || p->state == COMP_INTERFACE)
  	    return true;
  	}
*************** gfc_match_formal_arglist (gfc_symbol *pr
*** 6304,6310 ****
      }
  
    if (gfc_match_char (')') == MATCH_YES)
!   {        
      if (typeparam)
        {
  	gfc_error_now ("A type parameter list is required at %C");
--- 6303,6309 ----
      }
  
    if (gfc_match_char (')') == MATCH_YES)
!   {
      if (typeparam)
        {
  	gfc_error_now ("A type parameter list is required at %C");
*************** gfc_match_entry (void)
*** 7489,7495 ****
  	  if (!gfc_add_is_bind_c (&(entry->attr), entry->name,
  				  &(entry->declared_at), 1))
  	    return MATCH_ERROR;
! 	
  	}
  
        if (!gfc_current_ns->parent
--- 7488,7494 ----
  	  if (!gfc_add_is_bind_c (&(entry->attr), entry->name,
  				  &(entry->declared_at), 1))
  	    return MATCH_ERROR;
! 
  	}
  
        if (!gfc_current_ns->parent
Index: gcc/fortran/trans-array.c
===================================================================
*** gcc/fortran/trans-array.c	(revision 270622)
--- gcc/fortran/trans-array.c	(working copy)
*************** gfc_trans_create_temp_array (stmtblock_t
*** 1239,1244 ****
--- 1239,1245 ----
    tree nelem;
    tree cond;
    tree or_expr;
+   tree elemsize;
    tree class_expr = NULL_TREE;
    int n, dim, tmp_dim;
    int total_dim = 0;
*************** gfc_trans_create_temp_array (stmtblock_t
*** 1333,1347 ****
    tmp = gfc_conv_descriptor_dtype (desc);
    gfc_add_modify (pre, tmp, gfc_get_dtype (TREE_TYPE (desc)));
  
-   /* Also set the span for derived types, since they can be used in
-      component references to arrays of this type.  */
-   if (TREE_CODE (eltype) == RECORD_TYPE)
-     {
-       tmp = TYPE_SIZE_UNIT (eltype);
-       tmp = fold_convert (gfc_array_index_type, tmp);
-       gfc_conv_descriptor_span_set (pre, desc, tmp);
-     }
- 
    /*
       Fill in the bounds and stride.  This is a packed array, so:
  
--- 1334,1339 ----
*************** gfc_trans_create_temp_array (stmtblock_t
*** 1413,1434 ****
  	}
      }
  
    /* Get the size of the array.  */
    if (size && !callee_alloc)
      {
-       tree elemsize;
        /* If or_expr is true, then the extent in at least one
  	 dimension is zero and the size is set to zero.  */
        size = fold_build3_loc (input_location, COND_EXPR, gfc_array_index_type,
  			      or_expr, gfc_index_zero_node, size);
  
        nelem = size;
-       if (class_expr == NULL_TREE)
- 	elemsize = fold_convert (gfc_array_index_type,
- 			TYPE_SIZE_UNIT (gfc_get_element_type (type)));
-       else
- 	elemsize = gfc_class_vtab_size_get (class_expr);
- 
        size = fold_build2_loc (input_location, MULT_EXPR, gfc_array_index_type,
  			      size, elemsize);
      }
--- 1405,1425 ----
  	}
      }
  
+   if (class_expr == NULL_TREE)
+     elemsize = fold_convert (gfc_array_index_type,
+ 			     TYPE_SIZE_UNIT (gfc_get_element_type (type)));
+   else
+     elemsize = gfc_class_vtab_size_get (class_expr);
+ 
    /* Get the size of the array.  */
    if (size && !callee_alloc)
      {
        /* If or_expr is true, then the extent in at least one
  	 dimension is zero and the size is set to zero.  */
        size = fold_build3_loc (input_location, COND_EXPR, gfc_array_index_type,
  			      or_expr, gfc_index_zero_node, size);
  
        nelem = size;
        size = fold_build2_loc (input_location, MULT_EXPR, gfc_array_index_type,
  			      size, elemsize);
      }
*************** gfc_trans_create_temp_array (stmtblock_t
*** 1438,1443 ****
--- 1429,1438 ----
        size = NULL_TREE;
      }
  
+   /* Set the span.  */
+   tmp = fold_convert (gfc_array_index_type, elemsize);
+   gfc_conv_descriptor_span_set (pre, desc, tmp);
+ 
    gfc_trans_allocate_array_storage (pre, post, info, size, nelem, initial,
  				    dynamic, dealloc);
  
*************** gfc_conv_expr_descriptor (gfc_se *se, gf
*** 7248,7253 ****
--- 7243,7250 ----
  
        if (se->force_tmp)
  	need_tmp = 1;
+       else if (se->force_no_tmp)
+ 	need_tmp = 0;
  
        if (need_tmp)
  	full = 0;
Index: gcc/fortran/trans-decl.c
===================================================================
*** gcc/fortran/trans-decl.c	(revision 270622)
--- gcc/fortran/trans-decl.c	(working copy)
*************** convert_CFI_desc (gfc_wrapped_block * bl
*** 4278,4285 ****
--- 4278,4287 ----
    tree CFI_desc_ptr;
    tree dummy_ptr;
    tree tmp;
+   tree present;
    tree incoming;
    tree outgoing;
+   stmtblock_t outer_block;
    stmtblock_t tmpblock;
  
    /* dummy_ptr will be the pointer to the passed array descriptor,
*************** convert_CFI_desc (gfc_wrapped_block * bl
*** 4303,4308 ****
--- 4305,4316 ----
        gfc_desc_ptr = gfc_create_var (tmp, "gfc_desc_ptr");
        CFI_desc_ptr = gfc_create_var (pvoid_type_node, "CFI_desc_ptr");
  
+       /* Fix the condition for the presence of the argument.  */
+       gfc_init_block (&outer_block);
+       present = fold_build2_loc (input_location, NE_EXPR,
+ 				 logical_type_node, dummy_ptr,
+ 				 build_int_cst (TREE_TYPE (dummy_ptr), 0));
+ 
        gfc_init_block (&tmpblock);
        /* Pointer to the gfc descriptor.  */
        gfc_add_modify (&tmpblock, gfc_desc_ptr,
*************** convert_CFI_desc (gfc_wrapped_block * bl
*** 4318,4333 ****
        /* Set the dummy pointer to point to the gfc_descriptor.  */
        gfc_add_modify (&tmpblock, dummy_ptr,
  		      fold_convert (TREE_TYPE (dummy_ptr), gfc_desc_ptr));
-       incoming = gfc_finish_block (&tmpblock);
  
!       gfc_init_block (&tmpblock);
        /* Convert the gfc descriptor back to the CFI type before going
! 	 out of scope.  */
        tmp = gfc_build_addr_expr (ppvoid_type_node, CFI_desc_ptr);
        outgoing = build_call_expr_loc (input_location,
  			gfor_fndecl_gfc_to_cfi, 2, tmp, gfc_desc_ptr);
        gfc_add_expr_to_block (&tmpblock, outgoing);
!       outgoing = gfc_finish_block (&tmpblock);
  
        /* Add the lot to the procedure init and finally blocks.  */
        gfc_add_init_cleanup (block, incoming, outgoing);
--- 4326,4368 ----
        /* Set the dummy pointer to point to the gfc_descriptor.  */
        gfc_add_modify (&tmpblock, dummy_ptr,
  		      fold_convert (TREE_TYPE (dummy_ptr), gfc_desc_ptr));
  
!       /* The hidden string length is not passed to bind(C) procedures so set
! 	 it from the descriptor element length.  */
!       if (sym->ts.type == BT_CHARACTER
! 	  && sym->ts.u.cl->backend_decl
! 	  && VAR_P (sym->ts.u.cl->backend_decl))
! 	{
! 	  tmp = build_fold_indirect_ref_loc (input_location, dummy_ptr);
! 	  tmp = gfc_conv_descriptor_elem_len (tmp);
! 	  gfc_add_modify (&tmpblock, sym->ts.u.cl->backend_decl,
! 			  fold_convert (TREE_TYPE (sym->ts.u.cl->backend_decl),
! 				        tmp));
! 	}
! 
!       /* Check that the argument is present before executing the above.  */
!       incoming = build3_v (COND_EXPR, present,
! 			   gfc_finish_block (&tmpblock),
! 			   build_empty_stmt (input_location));
!       gfc_add_expr_to_block (&outer_block, incoming);
!       incoming = gfc_finish_block (&outer_block);
! 
! 
        /* Convert the gfc descriptor back to the CFI type before going
! 	 out of scope, if the CFI type was present at entry.  */
!       gfc_init_block (&outer_block);
!       gfc_init_block (&tmpblock);
! 
        tmp = gfc_build_addr_expr (ppvoid_type_node, CFI_desc_ptr);
        outgoing = build_call_expr_loc (input_location,
  			gfor_fndecl_gfc_to_cfi, 2, tmp, gfc_desc_ptr);
        gfc_add_expr_to_block (&tmpblock, outgoing);
! 
!       outgoing = build3_v (COND_EXPR, present,
! 			   gfc_finish_block (&tmpblock),
! 			   build_empty_stmt (input_location));
!       gfc_add_expr_to_block (&outer_block, outgoing);
!       outgoing = gfc_finish_block (&outer_block);
  
        /* Add the lot to the procedure init and finally blocks.  */
        gfc_add_init_cleanup (block, incoming, outgoing);
*************** gfc_trans_deferred_vars (gfc_symbol * pr
*** 4923,4931 ****
  
    for (f = gfc_sym_get_dummy_args (proc_sym); f; f = f->next)
      {
!       if (f->sym && f->sym->tlink == NULL && f->sym->ts.type == BT_CHARACTER)
  	{
- 	  gcc_assert (f->sym->ts.u.cl->backend_decl != NULL);
  	  if (TREE_CODE (f->sym->ts.u.cl->backend_decl) == PARM_DECL)
  	    gfc_trans_vla_type_sizes (f->sym, &tmpblock);
  	}
--- 4958,4966 ----
  
    for (f = gfc_sym_get_dummy_args (proc_sym); f; f = f->next)
      {
!       if (f->sym && f->sym->tlink == NULL && f->sym->ts.type == BT_CHARACTER
! 	  && f->sym->ts.u.cl->backend_decl)
  	{
  	  if (TREE_CODE (f->sym->ts.u.cl->backend_decl) == PARM_DECL)
  	    gfc_trans_vla_type_sizes (f->sym, &tmpblock);
  	}
Index: gcc/fortran/trans-expr.c
===================================================================
*** gcc/fortran/trans-expr.c	(revision 270622)
--- gcc/fortran/trans-expr.c	(working copy)
*************** gfc_conv_gfc_desc_to_cfi_desc (gfc_se *p
*** 5006,5011 ****
--- 5006,5012 ----
  
    if (e->rank != 0)
      {
+       parmse->force_no_tmp = 1;
        if (fsym->attr.contiguous
  	  && !gfc_is_simply_contiguous (e, false, true))
  	gfc_conv_subref_array_arg (parmse, e, false, fsym->attr.intent,
Index: gcc/fortran/trans.c
===================================================================
*** gcc/fortran/trans.c	(revision 270622)
--- gcc/fortran/trans.c	(working copy)
*************** get_array_span (tree type, tree decl)
*** 290,297 ****
  {
    tree span;
  
    /* Return the span for deferred character length array references.  */
!   if (type && TREE_CODE (type) == ARRAY_TYPE
        && TYPE_MAX_VALUE (TYPE_DOMAIN (type)) != NULL_TREE
        && (VAR_P (TYPE_MAX_VALUE (TYPE_DOMAIN (type)))
  	  || TREE_CODE (TYPE_MAX_VALUE (TYPE_DOMAIN (type))) == INDIRECT_REF)
--- 290,305 ----
  {
    tree span;
  
+   if (TREE_CODE (decl) == COMPONENT_REF
+       && GFC_DESCRIPTOR_TYPE_P (TREE_TYPE (decl)))
+     return gfc_conv_descriptor_span_get (decl);
+   else if (TREE_CODE (decl) == INDIRECT_REF
+ 	   && GFC_DESCRIPTOR_TYPE_P (TREE_TYPE (decl)))
+     return gfc_conv_descriptor_span_get (decl);
+ 
    /* Return the span for deferred character length array references.  */
!   if (TREE_CODE (decl) != INDIRECT_REF
!       && type && TREE_CODE (type) == ARRAY_TYPE
        && TYPE_MAX_VALUE (TYPE_DOMAIN (type)) != NULL_TREE
        && (VAR_P (TYPE_MAX_VALUE (TYPE_DOMAIN (type)))
  	  || TREE_CODE (TYPE_MAX_VALUE (TYPE_DOMAIN (type))) == INDIRECT_REF)
*************** get_array_span (tree type, tree decl)
*** 307,313 ****
  					TYPE_SIZE_UNIT (TREE_TYPE (type))),
  			  span);
      }
!   else if (type && TREE_CODE (type) == ARRAY_TYPE
  	   && TYPE_MAX_VALUE (TYPE_DOMAIN (type)) != NULL_TREE
  	   && integer_zerop (TYPE_MAX_VALUE (TYPE_DOMAIN (type))))
      {
--- 315,322 ----
  					TYPE_SIZE_UNIT (TREE_TYPE (type))),
  			  span);
      }
!   else if (TREE_CODE (decl) != INDIRECT_REF
! 	   && type && TREE_CODE (type) == ARRAY_TYPE
  	   && TYPE_MAX_VALUE (TYPE_DOMAIN (type)) != NULL_TREE
  	   && integer_zerop (TYPE_MAX_VALUE (TYPE_DOMAIN (type))))
      {
*************** gfc_build_array_ref (tree base, tree off
*** 399,410 ****
    if (vptr)
      span = gfc_vptr_size_get (vptr);
    else if (decl)
!     {
!       if (TREE_CODE (decl) == COMPONENT_REF)
! 	span = gfc_conv_descriptor_span_get (decl);
!       else
! 	span = get_array_span (type, decl);
!     }
  
    /* If a non-null span has been generated reference the element with
       pointer arithmetic.  */
--- 408,414 ----
    if (vptr)
      span = gfc_vptr_size_get (vptr);
    else if (decl)
!     span = get_array_span (type, decl);
  
    /* If a non-null span has been generated reference the element with
       pointer arithmetic.  */
Index: gcc/fortran/trans.h
===================================================================
*** gcc/fortran/trans.h	(revision 270622)
--- gcc/fortran/trans.h	(working copy)
*************** typedef struct gfc_se
*** 91,96 ****
--- 91,99 ----
       args alias.  */
    unsigned force_tmp:1;
  
+   /* If set, will pass subref descriptors without a temporary.  */
+   unsigned force_no_tmp:1;
+ 
    /* Unconditionally calculate offset for array segments and constant
       arrays in gfc_conv_expr_descriptor.  */
    unsigned use_offset:1;
Index: gcc/testsuite/gfortran.dg/ISO_Fortran_binding_12.c
===================================================================
*** gcc/testsuite/gfortran.dg/ISO_Fortran_binding_12.c	(nonexistent)
--- gcc/testsuite/gfortran.dg/ISO_Fortran_binding_12.c	(working copy)
***************
*** 0 ****
--- 1,29 ----
+ /* Test the fix for PR90093.  */
+ 
+ #include <stdio.h>
+ #include <math.h>
+ #include "../../../libgfortran/ISO_Fortran_binding.h"
+ 
+ /* Contributed by Reinhold Bader  <Bader@lrz.de>  */
+ 
+ void foo_opt(CFI_cdesc_t *, float *, int *, int);
+ void write_res();
+ 
+ float x[34];
+ 
+ int main() {
+     CFI_CDESC_T(1) xd;
+     CFI_index_t ext[] = {34};
+     int sz;
+ 
+     CFI_establish((CFI_cdesc_t *) &xd, &x, CFI_attribute_other,
+ 		  CFI_type_float, 0, 1, ext);
+ 
+     foo_opt((CFI_cdesc_t *) &xd, NULL, NULL, 0);
+     sz = 12;
+     foo_opt(NULL, &x[11], &sz, 1);
+ 
+     write_res();
+ 
+     return 0;
+ }
Index: gcc/testsuite/gfortran.dg/ISO_Fortran_binding_12.f90
===================================================================
*** gcc/testsuite/gfortran.dg/ISO_Fortran_binding_12.f90	(nonexistent)
--- gcc/testsuite/gfortran.dg/ISO_Fortran_binding_12.f90	(working copy)
***************
*** 0 ****
--- 1,53 ----
+ ! { dg-do run { target c99_runtime } }
+ ! { dg-additional-sources ISO_Fortran_binding_12.c }
+ !
+ ! Test the fix for PR90093. The additional source is the main program.
+ !
+ ! Contributed by Reinhold Bader  <Bader@lrz.de>
+ !
+ module mod_optional
+   use, intrinsic :: iso_c_binding
+   implicit none
+   integer :: status = 0
+ 
+ contains
+ 
+   subroutine foo_opt(this, that, sz, flag) bind(c)
+     real(c_float), optional :: this(:)
+     real(c_float), optional :: that(*)
+     integer(c_int), optional :: sz
+     integer(c_int), value :: flag
+     if (flag == 0) then
+        if (.not. present(this) .or. present(that) .or. present(sz)) then
+           write(*,*) 'FAIL 1', present(this), present(that), present(sz)
+           status = status + 1
+        end if
+     else if (flag == 1) then
+        if (present(this) .or. .not. present(that) .or. .not. present(sz)) then
+           write(*,*) 'FAIL 2', present(this), present(that), present(sz)
+           status = status + 1
+        end if
+        if (sz /= 12) then
+           write(*,*) 'FAIL 3'
+           status = status + 1
+        end if
+     else if (flag == 2) then
+        if (present(this) .or. present(that) .or. present(sz)) then
+           write(*,*) 'FAIL 4', present(this), present(that), present(sz)
+           status = status + 1
+        end if
+     end if
+   end subroutine foo_opt
+ 
+   subroutine write_res() BIND(C)
+ ! Add a check that the fortran missing optional is accepted by the
+ ! bind(C) procedure.
+     call foo_opt (flag = 2)
+     if (status == 0) then
+        write(*,*) 'OK'
+     else
+        stop 1
+     end if
+   end subroutine
+ 
+ end module mod_optional
Index: gcc/testsuite/gfortran.dg/ISO_Fortran_binding_4.f90
===================================================================
*** gcc/testsuite/gfortran.dg/ISO_Fortran_binding_4.f90	(revision 270622)
--- gcc/testsuite/gfortran.dg/ISO_Fortran_binding_4.f90	(working copy)
***************
*** 1,29 ****
  ! { dg-do  run }
  ! PR fortran/89384 - this used to give a wrong results
  ! with contiguous.
  ! Test case by Reinhold Bader.
  module mod_ctg
    implicit none
  contains
    subroutine ctg(x) BIND(C)
      real, contiguous :: x(:)
! 
!     if (any(abs(x - [2.,4.,6.]) > 1.e-6)) then
!        write(*,*) 'FAIL'
!        stop 1
!     else
!        write(*,*) 'OK'
!     end if
      x = [2.,4.,6.]*10.0
    end subroutine
  end module
  program p
    use mod_ctg
    implicit none
    real :: x(6)
    integer :: i
  
    x = [ (real(i), i=1, size(x)) ]
    call ctg(x(2::2))
!   if (any (abs (x - [1.,20.,3.,40.,5.,60.]) > 1.e-6)) stop 2
  end program
--- 1,41 ----
  ! { dg-do  run }
  ! PR fortran/89384 - this used to give a wrong results
  ! with contiguous.
+ ! The subroutine substr is a test to check a problem found while
+ ! debugging PR90355.
+ !
  ! Test case by Reinhold Bader.
+ !
  module mod_ctg
    implicit none
+ 
  contains
+ 
    subroutine ctg(x) BIND(C)
      real, contiguous :: x(:)
!     if (any(abs(x - [2.,4.,6.]) > 1.e-6)) stop 1
      x = [2.,4.,6.]*10.0
    end subroutine
+ 
+   subroutine substr(str) BIND(C)
+     character(*) :: str(:)
+     if (str(2) .ne. "ghi") stop 2
+     str = ['uvw','xyz']
+   end subroutine
+ 
  end module
+ 
  program p
    use mod_ctg
    implicit none
    real :: x(6)
+   character(5) :: str(2) = ['abcde','fghij']
    integer :: i
  
    x = [ (real(i), i=1, size(x)) ]
    call ctg(x(2::2))
!   if (any (abs (x - [1.,20.,3.,40.,5.,60.]) > 1.e-6)) stop 3
! 
!   call substr(str(:)(2:4))
!   if (any (str .ne. ['auvwe','fxyzj'])) stop 4
  end program
Index: gcc/testsuite/gfortran.dg/assign_10.f90
===================================================================
*** gcc/testsuite/gfortran.dg/assign_10.f90	(revision 270622)
--- gcc/testsuite/gfortran.dg/assign_10.f90	(working copy)
*************** end
*** 24,27 ****
  ! Note that it is the kind conversion that generates the temp.
  !
  ! { dg-final { scan-tree-dump-times "parm" 20 "original" } }
! ! { dg-final { scan-tree-dump-times "atmp" 18 "original" } }
--- 24,27 ----
  ! Note that it is the kind conversion that generates the temp.
  !
  ! { dg-final { scan-tree-dump-times "parm" 20 "original" } }
! ! { dg-final { scan-tree-dump-times "atmp" 20 "original" } }
Index: gcc/testsuite/gfortran.dg/iso_c_binding_char_1.f90
===================================================================
*** gcc/testsuite/gfortran.dg/iso_c_binding_char_1.f90	(nonexistent)
--- gcc/testsuite/gfortran.dg/iso_c_binding_char_1.f90	(working copy)
***************
*** 0 ****
--- 1,10 ----
+ ! { dg-do compile }
+ !
+ ! Test the fix for PR90352.
+ !
+ ! Contributed by Thomas Koenig  <tkoenig@gcc.gnu.org>
+ !
+ subroutine bar(c,d) BIND(C)
+   character (len=*) c ! { dg-error "must be length 1" }
+   character (len=2) d ! { dg-error "must be length 1" }
+ end
Index: gcc/testsuite/gfortran.dg/transpose_optimization_2.f90
===================================================================
*** gcc/testsuite/gfortran.dg/transpose_optimization_2.f90	(revision 270622)
--- gcc/testsuite/gfortran.dg/transpose_optimization_2.f90	(working copy)
*************** end
*** 61,64 ****
  ! The check below for temporaries gave 14 and 33 for "parm" and "atmp".
  !
  ! { dg-final { scan-tree-dump-times "parm" 72 "original" } }
! ! { dg-final { scan-tree-dump-times "atmp" 12 "original" } }
--- 61,64 ----
  ! The check below for temporaries gave 14 and 33 for "parm" and "atmp".
  !
  ! { dg-final { scan-tree-dump-times "parm" 72 "original" } }
! ! { dg-final { scan-tree-dump-times "atmp" 13 "original" } }

^ permalink raw reply	[flat|nested] 7+ messages in thread

* [Patch, fortran] ISO_Fortran_binding PRs 90093, 90352 & 90355
@ 2019-05-06 18:57 Paul Richard Thomas
  2019-05-06 18:59 ` Paul Richard Thomas
  0 siblings, 1 reply; 7+ messages in thread
From: Paul Richard Thomas @ 2019-05-06 18:57 UTC (permalink / raw)
  To: fortran, gcc-patches

Unfortunately, this patch was still in the making at the release of
9.1. It is more or less self explanatory with the ChangeLogs.

It should be noted that gfc_conv_expr_present could not be used in the
fix for PR90093 because the passed descriptor is a CFI type. Instead,
the test is for a null pointer passed.

The changes to trans-array.c(gfc_trans_create_temp_array) have an eye
on the future, as well as PR90355. I am progressing towards the point
where all descriptors have 'span' set correctly so that
trans.c(get_array_span) can be eliminated and much of the code in the
callers can be simplified.

Bootstrapped and regtested on FC29/x86_64 - OK for trunk and 9-branch?

Paul

2019-05-06  Paul Thomas  <pault@gcc.gnu.org>

    PR fortran/90093
    * trans-decl.c (convert_CFI_desc): Test that the dummy is
    present before doing any of the conversions.

    PR fortran/90352
    * decl.c (gfc_verify_c_interop_param): Restore the error for
    charlen > 1 actual arguments passed to bind(C) procs.
    Clean up trailing white space.

    PR fortran/90355
    * trans-array.c (gfc_trans_create_temp_array): Set the 'span'
    field to the element length for all types.
    (gfc_conv_expr_descriptor): The force_no_tmp flag is used to
    prevent temporary creation, especially for substrings.
    * trans-decl.c (gfc_trans_deferred_vars): Rather than assert
    that the backend decl for the string length is non-null, use it
    as a condition before calling gfc_trans_vla_type_sizes.
    * trans-expr.c (gfc_conv_gfc_desc_to_cfi_desc): 'force_no_tmp'
    is set before calling gfc_conv_expr_descriptor.
    * trans.c (get_array_span): Move the code for extracting 'span'
    from gfc_build_array_ref to this function. This is specific to
    descriptors that are component and indirect references.
    * trans.h : Add the force_no_tmp flag bitfield to gfc_se.

2019-05-06  Paul Thomas  <pault@gcc.gnu.org>

    PR fortran/90093
    * gfortran.dg/ISO_Fortran_binding_12.f90: New test.
    * gfortran.dg/ISO_Fortran_binding_12.c: Supplementary code.

    PR fortran/90352
    * gfortran.dg/iso_c_binding_char_1.f90: New test.

    PR fortran/90355
    * gfortran.dg/ISO_Fortran_binding_4.f90: Add 'substr' to test
    the direct passing of substrings as descriptors to bind(C).
    * gfortran.dg/assign_10.f90: Increase the tree_dump count of
    'atmp' to account for the setting of the 'span' field.
    * gfortran.dg/transpose_optimization_2.f90: Ditto.

^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2019-05-11  7:54 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-05-07  8:39 [Patch, fortran] ISO_Fortran_binding PRs 90093, 90352 & 90355 Dominique d'Humières
2019-05-07 18:47 ` Paul Richard Thomas
  -- strict thread matches above, loose matches on Subject: below --
2019-05-06 18:57 Paul Richard Thomas
2019-05-06 18:59 ` Paul Richard Thomas
2019-05-08 18:41   ` Paul Richard Thomas
2019-05-10  8:01     ` Paul Richard Thomas
2019-05-11  7:54       ` Paul Richard Thomas

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).