[Patch, fortran] PR29396 PR29606 PR30625 and PR30871 - subreference array pointers.

Paul Thomas paulthomas2@wanadoo.fr
Mon Sep 10 19:02:00 GMT 2007


Tobias,

Thanks for taking a look - Thomas, have you done likewise?
> I looked at the patch plus at the following, which I extracted from your
> follow up:
>   http://gcc.gnu.org/ml/fortran/2007-09/msg00175.html
>
> As the diff looks quite different, I'm not 100% sure that I got it right.
>   
The subsequent patch went much further, as a visit to gcc-cvs will confirm.
>
>
> Looking at all the failures I got, I'm almost positive that I have not got it right. :-(
>   
I committed the patch for the regression this morning.
>
> Now to the patch:
>
> @@ -206,7 +206,9 @@ gfc_get_expr_charlen (gfc_expr *e)
>         default:
>           /* We should never got substring references here.  These will be
>              broken down by the scalarizer.  */
> -         gcc_unreachable ();
> +         if (is_subref_array (e))
> +           length = e->symtree->n.sym->ts.cl->backend_decl;
> +         break;
>
>
> Shouldn't one update the comment?
>   
Yes indeed. Thanks.
>
> @@ -321,7 +323,28 @@ gfc_build_array_ref (tree base, tree off
> +  if (decl && (TREE_CODE (decl) == FIELD_DECL
> +                    || TREE_CODE (decl) == VAR_DECL
> +                    || TREE_CODE (decl) == PARM_DECL)
>
> The indenting looks wrong.
>   
I'll take a look :-)
>
> Otherwise, the patch seems to be ok. (It would great if someone else would also review the patch!)
>   
Thanks for your input.
>
> Note: I still get a ICE with the test case from PR29606:
>   
Oh bother - I'll check that too.
>
> gfortran.dg/alloc_comp_constructor_1.f90:102: internal compiler error: Segmentation fault
> ==31732== Invalid read of size 8
> ==31732==    at 0x49C380: gfc_trans_assignment (trans-expr.c:3824)
> ==31732==    by 0x47FE80: gfc_trans_code (trans.c:993)
> ==31732==    by 0x494E42: gfc_generate_function_code (trans-decl.c:3277)
>
> gfortran.dg/allocatable_dummy_1.f90:28: internal compiler error: Segmentation fault
> ==31752== Invalid read of size 8
> ==31752==    at 0x49C380: gfc_trans_assignment (trans-expr.c:3824)
> ==31752==    by 0x47FE80: gfc_trans_code (trans.c:993)
> ==31752==    by 0x494E42: gfc_generate_function_code (trans-decl.c:3277)
>
> etc.
>   
I saw none of that - I think that something bad has happened with your 
trying to apply the secondary patch.  Note that this latter has nothing 
to do with subref array pointers and is a regression due to the patch 
that uses memcpy in assignments, where possible.

Thanks

Paul



More information about the Fortran mailing list