Message ID | 20160522185122.20972f20@vepi2 |
---|---|
State | New |
Headers | show |
Ping! On Sun, 22 May 2016 18:51:22 +0200 Andre Vehreschild <vehre@gmx.de> wrote: > Hi all, > > attached patch fixes a regression that occurred on some testcases when > doing a validation run with -frepack-arrays. The issue here was that > for class arrays the array descriptor is in the _data component and not > directly at the address of the class_array. The patch fixes this issue > for pr69659 on trunk 7 and gcc-6-branch. > > Ok for trunk and gcc-6? > > Bootstrapped and regtested on x86_64-linux-gnu. > > Regards, > Andre
Hi Andre, That's verging on 'obvious' and even does the job :-) OK for trunk and 6-branch. Thanks for the patch Paul On 5 June 2016 at 16:13, Andre Vehreschild <vehre@gmx.de> wrote: > Hi Paul, > > now with attachment. > > - Andre > > On Sun, 5 Jun 2016 16:06:09 +0200 > Paul Richard Thomas <paul.richard.thomas@gmail.com> wrote: > >> Hi Andre, >> >> There's no attachment. Get it posted tonight and I will take a look at it. >> >> Cheers >> >> Paul >> >> On 5 June 2016 at 14:04, Andre Vehreschild <vehre@gmx.de> wrote: >> > Ping! >> > >> > On Sun, 22 May 2016 18:51:22 +0200 >> > Andre Vehreschild <vehre@gmx.de> wrote: >> > >> >> Hi all, >> >> >> >> attached patch fixes a regression that occurred on some testcases when >> >> doing a validation run with -frepack-arrays. The issue here was that >> >> for class arrays the array descriptor is in the _data component and not >> >> directly at the address of the class_array. The patch fixes this issue >> >> for pr69659 on trunk 7 and gcc-6-branch. >> >> >> >> Ok for trunk and gcc-6? >> >> >> >> Bootstrapped and regtested on x86_64-linux-gnu. >> >> >> >> Regards, >> >> Andre >> > >> > >> > -- >> > Andre Vehreschild * Email: vehre ad gmx dot de >> >> >> > > > -- > Andre Vehreschild * Email: vehre ad gmx dot de
diff --git a/gcc/fortran/trans-array.c b/gcc/fortran/trans-array.c index 7be301d..403ce3a 100644 --- a/gcc/fortran/trans-array.c +++ b/gcc/fortran/trans-array.c @@ -6386,7 +6386,12 @@ gfc_trans_dummy_array_bias (gfc_symbol * sym, tree tmpdesc, stmtCleanup = gfc_finish_block (&cleanup); /* Only do the cleanup if the array was repacked. */ - tmp = build_fold_indirect_ref_loc (input_location, dumdesc); + if (is_classarray) + /* For a class array the dummy array descriptor is in the _class + component. */ + tmp = gfc_class_data_get (dumdesc); + else + tmp = build_fold_indirect_ref_loc (input_location, dumdesc); tmp = gfc_conv_descriptor_data_get (tmp); tmp = fold_build2_loc (input_location, NE_EXPR, boolean_type_node, tmp, tmpdesc); diff --git a/gcc/testsuite/gfortran.dg/class_array_22.f03 b/gcc/testsuite/gfortran.dg/class_array_22.f03 new file mode 100644 index 0000000..9410741 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/class_array_22.f03 @@ -0,0 +1,25 @@ +! { dg-do compile } +! { dg-options "-frepack-arrays " } +! +! Original class_array_11.f03 but with -frepack-arrays a new +! ICE was produced reported in +! PR fortran/69659 +! +! Original testcase by Ian Harvey <ian_harvey@bigpond.com> +! Reduced by Janus Weil <Janus@gcc.gnu.org> + + IMPLICIT NONE + + TYPE :: ParentVector + INTEGER :: a + END TYPE ParentVector + +CONTAINS + + SUBROUTINE vector_operation(pvec) + CLASS(ParentVector), INTENT(INOUT) :: pvec(:) + print *,pvec(1)%a + END SUBROUTINE + +END +