diff mbox

[fortran,pr69659,v1,6/7,Regression] ICE on using option -frepack-arrays, in gfc_conv_descriptor_data_get

Message ID 20160522185122.20972f20@vepi2
State New
Headers show

Commit Message

Andre Vehreschild May 22, 2016, 4:51 p.m. UTC
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

Comments

Andre Vehreschild June 5, 2016, 12:04 p.m. UTC | #1
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
Paul Richard Thomas June 5, 2016, 3:44 p.m. UTC | #2
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 mbox

Patch

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
+