]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR fortran/38887 (run-time abort for MVBITS with run-time zero sized array arguments)
authorDaniel Kraft <d@domob.eu>
Wed, 21 Jan 2009 13:34:55 +0000 (14:34 +0100)
committerDaniel Kraft <domob@gcc.gnu.org>
Wed, 21 Jan 2009 13:34:55 +0000 (14:34 +0100)
2009-01-21  Daniel Kraft  <d@domob.eu>

* trans-stmt.c (gfc_conv_elemental_dependencies):  Cleaned up comment.

2009-01-21  Daniel Kraft  <d@domob.eu>

PR fortran/38887
* runtime/in_unpack_generic.c (internal_unpack):  Return instead of
abort when called with empty array.
* m4/in_unpack.m4:  Ditto.
* generated/in_unpack_i1.c:  Regenerated.
* generated/in_unpack_i2.c:  Regenerated.
* generated/in_unpack_i4.c:  Regenerated.
* generated/in_unpack_i8.c:  Regenerated.
* generated/in_unpack_i16.c: Regenerated.
* generated/in_unpack_r4.c:  Regenerated.
* generated/in_unpack_r8.c:  Regenerated.
* generated/in_unpack_r10.c: Regenerated.
* generated/in_unpack_r16.c: Regenerated.
* generated/in_unpack_c4.c:  Regenerated.
* generated/in_unpack_c8.c:  Regenerated.
* generated/in_unpack_c10.c: Regenerated.
* generated/in_unpack_c16.c: Regenerated.

2009-01-21  Daniel Kraft  <d@domob.eu>

PR fortran/38887
* gfortran.dg/mvbits_5.f90:  New test.

From-SVN: r143541

20 files changed:
gcc/fortran/ChangeLog
gcc/fortran/trans-stmt.c
gcc/testsuite/ChangeLog
gcc/testsuite/gfortran.dg/mvbits_5.f90 [new file with mode: 0644]
libgfortran/ChangeLog
libgfortran/generated/in_unpack_c10.c
libgfortran/generated/in_unpack_c16.c
libgfortran/generated/in_unpack_c4.c
libgfortran/generated/in_unpack_c8.c
libgfortran/generated/in_unpack_i1.c
libgfortran/generated/in_unpack_i16.c
libgfortran/generated/in_unpack_i2.c
libgfortran/generated/in_unpack_i4.c
libgfortran/generated/in_unpack_i8.c
libgfortran/generated/in_unpack_r10.c
libgfortran/generated/in_unpack_r16.c
libgfortran/generated/in_unpack_r4.c
libgfortran/generated/in_unpack_r8.c
libgfortran/m4/in_unpack.m4
libgfortran/runtime/in_unpack_generic.c

index 7c56c004cd6c760bcb968b03de3151f499ed2061..a744290e67d64e65da39009f895a9f2bba3bedba 100644 (file)
@@ -1,3 +1,7 @@
+2009-01-21  Daniel Kraft  <d@domob.eu>
+
+       * trans-stmt.c (gfc_conv_elemental_dependencies):  Cleaned up comment.
+
 2009-01-20  Paul Thomas  <pault@gcc.gnu.org>
 
        PR fortran/38907
index 031fe88a4960ba13eb618533770dc1bcbb4b959a..82ecca80ac249604d56fbd480d840355065f01c8 100644 (file)
@@ -311,14 +311,11 @@ gfc_conv_elemental_dependencies (gfc_se * se, gfc_se * loopse,
          info->offset = gfc_create_var (gfc_array_index_type, NULL);     
          gfc_add_modify (&se->pre, info->offset, offset);
 
-
          /* Copy the result back using unpack.  */
          tmp = build_call_expr (gfor_fndecl_in_unpack, 2, parmse.expr, data);
          gfc_add_expr_to_block (&se->post, tmp);
 
-         /* XXX: This is possibly not needed; but isn't it cleaner this way? */
          gfc_add_block_to_block (&se->pre, &parmse.pre);
-
          gfc_add_block_to_block (&se->post, &parmse.post);
          gfc_add_block_to_block (&se->post, &temp_post);
        }
index 4bf0f2fc8563886c9bf9c1157cb38e5f163cf32e..cffbad4c9498639e9ab437463ea3601f4f9d492a 100644 (file)
@@ -1,3 +1,8 @@
+2009-01-21  Daniel Kraft  <d@domob.eu>
+
+       PR fortran/38887
+       * gfortran.dg/mvbits_5.f90:  New test.
+
 2009-01-21  Bingfeng Mei  <bmei@broadcom.com>
 
        * gcc.dg/sms-6.c: New test.
diff --git a/gcc/testsuite/gfortran.dg/mvbits_5.f90 b/gcc/testsuite/gfortran.dg/mvbits_5.f90
new file mode 100644 (file)
index 0000000..42d8346
--- /dev/null
@@ -0,0 +1,17 @@
+! { dg-do run }
+
+! PR fortran/38887
+! This aborted at runtime for the runtime zero-sized array arguments.
+
+! Contributed by Dick Hendrickson <dick.hendrickson@gmail.com>
+
+program try_ya0013
+  integer ida(9)
+  call ya0013(ida,1,5,6)
+end program
+
+SUBROUTINE YA0013(IDA,nf1,nf5,nf6)
+  INTEGER IDA(9)
+  IDA = 1
+  CALL MVBITS(IDA(NF5:NF1), 0, 1, IDA(NF6:NF1),2)
+END SUBROUTINE
index 7b1241d5fee55a164798ec1ca6f8c2c90fa12baf..96fd675bf0e6223128d3eabf5ac7fbd724c13861 100644 (file)
@@ -1,3 +1,23 @@
+2009-01-21  Daniel Kraft  <d@domob.eu>
+
+       PR fortran/38887
+       * runtime/in_unpack_generic.c (internal_unpack):  Return instead of
+       abort when called with empty array.
+       * m4/in_unpack.m4:  Ditto.
+       * generated/in_unpack_i1.c:  Regenerated.
+       * generated/in_unpack_i2.c:  Regenerated.
+       * generated/in_unpack_i4.c:  Regenerated.
+       * generated/in_unpack_i8.c:  Regenerated.
+       * generated/in_unpack_i16.c: Regenerated.
+       * generated/in_unpack_r4.c:  Regenerated.
+       * generated/in_unpack_r8.c:  Regenerated.
+       * generated/in_unpack_r10.c: Regenerated.
+       * generated/in_unpack_r16.c: Regenerated.
+       * generated/in_unpack_c4.c:  Regenerated.
+       * generated/in_unpack_c8.c:  Regenerated.
+       * generated/in_unpack_c10.c: Regenerated.
+       * generated/in_unpack_c16.c: Regenerated.
+
 2009-01-12  Jerry DeLisle  <jvdelisle@gcc.gnu.org>
 
        PR libfortran/38772
index 2d971bf14cce1f9fed7edd00f72b9855705370a6..930cfae6dca716dd6fc0bff9b23912e0f92691a9 100644 (file)
@@ -60,12 +60,12 @@ internal_unpack_c10 (gfc_array_c10 * d, const GFC_COMPLEX_10 * src)
       stride[n] = d->dim[n].stride;
       extent[n] = d->dim[n].ubound + 1 - d->dim[n].lbound;
       if (extent[n] <= 0)
-        abort ();
+       return;
 
       if (dsize == stride[n])
-        dsize *= extent[n];
+       dsize *= extent[n];
       else
-        dsize = 0;
+       dsize = 0;
     }
 
   if (dsize != 0)
index f09b0b44faf8a93a981a5c06821393e1c0cf8fdf..45927b831f0bde9954eed7a93d4a9a43c1e26397 100644 (file)
@@ -60,12 +60,12 @@ internal_unpack_c16 (gfc_array_c16 * d, const GFC_COMPLEX_16 * src)
       stride[n] = d->dim[n].stride;
       extent[n] = d->dim[n].ubound + 1 - d->dim[n].lbound;
       if (extent[n] <= 0)
-        abort ();
+       return;
 
       if (dsize == stride[n])
-        dsize *= extent[n];
+       dsize *= extent[n];
       else
-        dsize = 0;
+       dsize = 0;
     }
 
   if (dsize != 0)
index ed77a700ebfd2cb574ff953ece0afe2465cb2342..1a7d707735e01d25c3a18ca4e6f2d2164ba34750 100644 (file)
@@ -60,12 +60,12 @@ internal_unpack_c4 (gfc_array_c4 * d, const GFC_COMPLEX_4 * src)
       stride[n] = d->dim[n].stride;
       extent[n] = d->dim[n].ubound + 1 - d->dim[n].lbound;
       if (extent[n] <= 0)
-        abort ();
+       return;
 
       if (dsize == stride[n])
-        dsize *= extent[n];
+       dsize *= extent[n];
       else
-        dsize = 0;
+       dsize = 0;
     }
 
   if (dsize != 0)
index e1fada33802e9944c5de5771ae5324d8fe19a16e..5dbfca0a6703b7b5b436a04848dfd425d0c58a5e 100644 (file)
@@ -60,12 +60,12 @@ internal_unpack_c8 (gfc_array_c8 * d, const GFC_COMPLEX_8 * src)
       stride[n] = d->dim[n].stride;
       extent[n] = d->dim[n].ubound + 1 - d->dim[n].lbound;
       if (extent[n] <= 0)
-        abort ();
+       return;
 
       if (dsize == stride[n])
-        dsize *= extent[n];
+       dsize *= extent[n];
       else
-        dsize = 0;
+       dsize = 0;
     }
 
   if (dsize != 0)
index 0e7ab1161256a02a062ddc58f0ef881050e7c86c..ccaa0d2cb062536565ff18e96cf61695a81ad4da 100644 (file)
@@ -60,12 +60,12 @@ internal_unpack_1 (gfc_array_i1 * d, const GFC_INTEGER_1 * src)
       stride[n] = d->dim[n].stride;
       extent[n] = d->dim[n].ubound + 1 - d->dim[n].lbound;
       if (extent[n] <= 0)
-        abort ();
+       return;
 
       if (dsize == stride[n])
-        dsize *= extent[n];
+       dsize *= extent[n];
       else
-        dsize = 0;
+       dsize = 0;
     }
 
   if (dsize != 0)
index 36584859dbefdd82b44bd66d681d459c605d9674..8d0ddf56fdcade18f0b6cce9bbfc1f441b2d7b3b 100644 (file)
@@ -60,12 +60,12 @@ internal_unpack_16 (gfc_array_i16 * d, const GFC_INTEGER_16 * src)
       stride[n] = d->dim[n].stride;
       extent[n] = d->dim[n].ubound + 1 - d->dim[n].lbound;
       if (extent[n] <= 0)
-        abort ();
+       return;
 
       if (dsize == stride[n])
-        dsize *= extent[n];
+       dsize *= extent[n];
       else
-        dsize = 0;
+       dsize = 0;
     }
 
   if (dsize != 0)
index 246c3f3999d6d58ef17c73e2959e15495b130089..cb5048fd53dde2d59a4b8db3088499f47b7b6e26 100644 (file)
@@ -60,12 +60,12 @@ internal_unpack_2 (gfc_array_i2 * d, const GFC_INTEGER_2 * src)
       stride[n] = d->dim[n].stride;
       extent[n] = d->dim[n].ubound + 1 - d->dim[n].lbound;
       if (extent[n] <= 0)
-        abort ();
+       return;
 
       if (dsize == stride[n])
-        dsize *= extent[n];
+       dsize *= extent[n];
       else
-        dsize = 0;
+       dsize = 0;
     }
 
   if (dsize != 0)
index d0c0f15640ed0330ed17aecf565ef7ff30404225..1295644c418ff194c9a0b691324d3be9b9aa615c 100644 (file)
@@ -60,12 +60,12 @@ internal_unpack_4 (gfc_array_i4 * d, const GFC_INTEGER_4 * src)
       stride[n] = d->dim[n].stride;
       extent[n] = d->dim[n].ubound + 1 - d->dim[n].lbound;
       if (extent[n] <= 0)
-        abort ();
+       return;
 
       if (dsize == stride[n])
-        dsize *= extent[n];
+       dsize *= extent[n];
       else
-        dsize = 0;
+       dsize = 0;
     }
 
   if (dsize != 0)
index 5f2975e74324b47cd6c02ef62e1356ffaabe2b78..a228ded244c8f181bc852d66acf87c35bc3f0232 100644 (file)
@@ -60,12 +60,12 @@ internal_unpack_8 (gfc_array_i8 * d, const GFC_INTEGER_8 * src)
       stride[n] = d->dim[n].stride;
       extent[n] = d->dim[n].ubound + 1 - d->dim[n].lbound;
       if (extent[n] <= 0)
-        abort ();
+       return;
 
       if (dsize == stride[n])
-        dsize *= extent[n];
+       dsize *= extent[n];
       else
-        dsize = 0;
+       dsize = 0;
     }
 
   if (dsize != 0)
index 66ebe82663dd3a6f6452247daef18502ae540d69..5099b9a4bb92fc98c35d531d5c0ec2ad8bd6d21e 100644 (file)
@@ -60,12 +60,12 @@ internal_unpack_r10 (gfc_array_r10 * d, const GFC_REAL_10 * src)
       stride[n] = d->dim[n].stride;
       extent[n] = d->dim[n].ubound + 1 - d->dim[n].lbound;
       if (extent[n] <= 0)
-        abort ();
+       return;
 
       if (dsize == stride[n])
-        dsize *= extent[n];
+       dsize *= extent[n];
       else
-        dsize = 0;
+       dsize = 0;
     }
 
   if (dsize != 0)
index 722dee76af587b1b32156a323b4c1860de502388..d2e557909cbbf931e5efa8a6eb6706793bfc4546 100644 (file)
@@ -60,12 +60,12 @@ internal_unpack_r16 (gfc_array_r16 * d, const GFC_REAL_16 * src)
       stride[n] = d->dim[n].stride;
       extent[n] = d->dim[n].ubound + 1 - d->dim[n].lbound;
       if (extent[n] <= 0)
-        abort ();
+       return;
 
       if (dsize == stride[n])
-        dsize *= extent[n];
+       dsize *= extent[n];
       else
-        dsize = 0;
+       dsize = 0;
     }
 
   if (dsize != 0)
index 65bdb078c9673512e9c7c7a6d796cddb51c9163e..2c374592129f424dd0b8e5c6c219b27dbe06bb26 100644 (file)
@@ -60,12 +60,12 @@ internal_unpack_r4 (gfc_array_r4 * d, const GFC_REAL_4 * src)
       stride[n] = d->dim[n].stride;
       extent[n] = d->dim[n].ubound + 1 - d->dim[n].lbound;
       if (extent[n] <= 0)
-        abort ();
+       return;
 
       if (dsize == stride[n])
-        dsize *= extent[n];
+       dsize *= extent[n];
       else
-        dsize = 0;
+       dsize = 0;
     }
 
   if (dsize != 0)
index 70c11b5f54f434b005033bb70aa04ef3ee32742f..e0e91e909da58a88b355d641db8147a45814e7e7 100644 (file)
@@ -60,12 +60,12 @@ internal_unpack_r8 (gfc_array_r8 * d, const GFC_REAL_8 * src)
       stride[n] = d->dim[n].stride;
       extent[n] = d->dim[n].ubound + 1 - d->dim[n].lbound;
       if (extent[n] <= 0)
-        abort ();
+       return;
 
       if (dsize == stride[n])
-        dsize *= extent[n];
+       dsize *= extent[n];
       else
-        dsize = 0;
+       dsize = 0;
     }
 
   if (dsize != 0)
index 5c5b5b12a1bc52412b7f5f2919753f7940a46f7a..a2a92d0e4e487aca090305372324c52519b09e2e 100644 (file)
@@ -63,12 +63,12 @@ internal_unpack_'rtype_ccode` ('rtype` * d, const 'rtype_name` * src)
       stride[n] = d->dim[n].stride;
       extent[n] = d->dim[n].ubound + 1 - d->dim[n].lbound;
       if (extent[n] <= 0)
-        abort ();
+       return;
 
       if (dsize == stride[n])
-        dsize *= extent[n];
+       dsize *= extent[n];
       else
-        dsize = 0;
+       dsize = 0;
     }
 
   if (dsize != 0)
index 81d1f0485eca5e44e610e3a400846827231562be..b15f4dd990340298e117efe7ba2589cae20d45b5 100644 (file)
@@ -178,12 +178,12 @@ internal_unpack (gfc_array_char * d, const void * s)
       stride[n] = d->dim[n].stride;
       extent[n] = d->dim[n].ubound + 1 - d->dim[n].lbound;
       if (extent[n] <= 0)
-        abort ();
+       return;
 
       if (dsize == stride[n])
-        dsize *= extent[n];
+       dsize *= extent[n];
       else
-        dsize = 0;
+       dsize = 0;
     }
 
   src = s;