I have committed the attached patch to the Fortran-dev branch (Rev. 198513).

Dump scan: Using scan-tree-dump-times does not seem to handle patterns; thus, scan-tree-dump is now used.

runtime/iso_ts29113.c: Correctly set lower_bound for CFI_establish and CFI_select_part, I think it should now match the standard. For CFI_is_contiguous, I missed to handle negative strides.

Tobias
Index: gcc/testsuite/ChangeLog.fortran-dev
===================================================================
--- gcc/testsuite/ChangeLog.fortran-dev	(Revision 198512)
+++ gcc/testsuite/ChangeLog.fortran-dev	(Arbeitskopie)
@@ -1,3 +1,7 @@
+2013-05-02  Tobias Burnus  <bur...@net-b.de>
+
+	* gfortran.dg/iso-ts-29113_2.f90: Update scan-dump.
+
 2013-04-30  Tobias Burnus  <bur...@net-b.de>
 
 	* gfortran.dg/iso-ts-29113_2.f90: New.
Index: gcc/testsuite/gfortran.dg/iso-ts-29113_2.f90
===================================================================
--- gcc/testsuite/gfortran.dg/iso-ts-29113_2.f90	(Revision 198512)
+++ gcc/testsuite/gfortran.dg/iso-ts-29113_2.f90	(Arbeitskopie)
@@ -125,8 +125,8 @@
 ! { dg-final { scan-tree-dump-times "x_str1b.type = 261;" 1 "original" } }
 ! { dg-final { scan-tree-dump-times "x_str4a.type = 1029;" 1 "original" } }
 ! { dg-final { scan-tree-dump-times "x_str4b.type = 1029;" 1 "original" } }
-! { dg-final { scan-tree-dump-times "x_cptr.type = (1025|2049);" 1 "original" } }
-! { dg-final { scan-tree-dump-times "x_funcptr.type = (1025|2049);" 1 "original" } }
+! { dg-final { scan-tree-dump       "x_cptr.type = (1025|2049);"  "original" } }
+! { dg-final { scan-tree-dump       "x_funcptr.type = (1025|2049);" "original" } }
 ! { dg-final { scan-tree-dump-times "x_seq.type = 6;" 1 "original" } }
 ! { dg-final { scan-tree-dump-times "x_bindc.type = 6;" 1 "original" } }
 ! { dg-final { scan-tree-dump-times "x_ext.type = -1;" 1 "original" } }
Index: libgfortran/ChangeLog.fortran-dev
===================================================================
--- libgfortran/ChangeLog.fortran-dev	(Revision 198512)
+++ libgfortran/ChangeLog.fortran-dev	(Arbeitskopie)
@@ -1,3 +1,9 @@
+2013-05-02  Tobias Burnus  <bur...@net-b.de>
+
+	* runtime/iso_ts29113.c (CFI_establish, CFI_select_part):
+	Correctly set lower_bound.
+	(CFI_is_contiguous): Handle negative strides.
+
 2013-04-30  Tobias Burnus  <bur...@net-b.de>
 
 	* ISO_Fortran_binding.h.tmpl (CFI_cdesc_t): Change order
Index: libgfortran/runtime/iso_ts29113.c
===================================================================
--- libgfortran/runtime/iso_ts29113.c	(Revision 198512)
+++ libgfortran/runtime/iso_ts29113.c	(Arbeitskopie)
@@ -169,7 +169,7 @@
   sm = dv->elem_len;
   for (i = 0; i < rank; i++)
     {
-      dv->dim[i].lower_bound = 0; /* Note: Only required for pointers.  */
+      dv->dim[i].lower_bound = 0;
       dv->dim[i].extent = extents[i];
       dv->dim[i].sm = sm;
       sm *= extents[i];
@@ -196,7 +196,7 @@
   size = dv->elem_len;
   for (i = 1; i < dv->rank; i++)
     {
-      if (size < dv->dim[i].sm)
+      if (size < dv->dim[i].sm || dv->dim[i].sm < 0)
 	return 0;
       size *= dv->dim[i].sm;
     }
@@ -314,8 +314,7 @@
 
   for (i = 1; i < result->rank; i++)
    {
-      result->dim[i].lower_bound = result->attribute == CFI_attribute_other
-				   ? 0 : source->dim[i].lower_bound;
+      result->dim[i].lower_bound = source->dim[i].lower_bound;
       result->dim[i].extent = source->dim[i].extent;
       result->dim[i].sm = source->dim[i].sm;
     }

Reply via email to