simplify.c (gfc_simplify_storage_size): Use proper integer kind for the returned...
authorTobias Burnus <burnus@net-b.de>
Fri, 25 Jul 2014 19:09:56 +0000 (21:09 +0200)
committerTobias Burnus <burnus@gcc.gnu.org>
Fri, 25 Jul 2014 19:09:56 +0000 (21:09 +0200)
2014-07-25  Tobias Burnus  <burnus@net-b.de>

        * simplify.c (gfc_simplify_storage_size): Use proper
        integer kind for the returned value.

2014-07-25  Tobias Burnus  <burnus@net-b.de>

        * gfortran.dg/storage_size_5.f90: New.

From-SVN: r213060

gcc/fortran/ChangeLog
gcc/fortran/simplify.c
gcc/testsuite/ChangeLog
gcc/testsuite/gfortran.dg/storage_size_5.f90 [new file with mode: 0644]

index e95369805ab69bb0ecf31da6714ac01aa4ac4639..8071e117e56749d1bf3b6d65f0c15553d165687f 100644 (file)
@@ -1,3 +1,8 @@
+2014-07-25  Tobias Burnus  <burnus@net-b.de>
+
+       * simplify.c (gfc_simplify_storage_size): Use proper
+       integer kind for the returned value.
+
 2014-07-24  Uros Bizjak  <ubizjak@gmail.com>
 
        * intrinsic.texi (Intrinsic Procedures) <ATOMIC_DEFINE>: Move to
index 60d85934b72d62366710db047d9dcfbb71d7171b..d4a67ada3dab1656c85bd788fa0e6f3eb35d90c9 100644 (file)
@@ -5841,11 +5841,9 @@ gfc_simplify_storage_size (gfc_expr *x,
   if (k == -1)
     return &gfc_bad_expr;
 
-  result = gfc_get_constant_expr (BT_INTEGER, gfc_index_integer_kind,
-                                 &x->where);
+  result = gfc_get_constant_expr (BT_INTEGER, k, &x->where);
 
   mpz_set_si (result->value.integer, gfc_element_size (x));
-
   mpz_mul_ui (result->value.integer, result->value.integer, BITS_PER_UNIT);
 
   return range_check (result, "STORAGE_SIZE");
index 72ba8a7a8a85ae90ed43fc9cc8aa1148a7f84656..ebf7badad8272993bb0fa00344c2d85cf14737a0 100644 (file)
@@ -1,3 +1,7 @@
+2014-07-25  Tobias Burnus  <burnus@net-b.de>
+
+       * gfortran.dg/storage_size_5.f90: New.
+
 2014-07-25  Richard Biener  <rguenther@suse.de>
 
        PR middle-end/61762
diff --git a/gcc/testsuite/gfortran.dg/storage_size_5.f90 b/gcc/testsuite/gfortran.dg/storage_size_5.f90
new file mode 100644 (file)
index 0000000..ae0f126
--- /dev/null
@@ -0,0 +1,44 @@
+! { dg-do compile }
+! { dg-options "-fdump-tree-original" }
+!
+subroutine test()
+  implicit none
+  integer :: i0, i1, i2, i3, i4
+  i0 = kind(STORAGE_SIZE(5))
+  i1 = kind(STORAGE_SIZE(5, kind=1))
+  i2 = kind(STORAGE_SIZE(5, kind=2))
+  i3 = kind(STORAGE_SIZE(5, kind=4))
+  i4 = kind(STORAGE_SIZE(5, kind=8))
+end subroutine test
+
+subroutine test2(x)
+  implicit none
+  class(*) :: x
+  integer :: j0, j1, j2, j3, j4
+  integer(1) :: k1
+  integer(2) :: k2
+  j0 = kind(STORAGE_SIZE(x))
+  j1 = kind(STORAGE_SIZE(x, kind=1))
+  j2 = kind(STORAGE_SIZE(x, kind=2))
+  j3 = kind(STORAGE_SIZE(x, kind=4))
+  j4 = kind(STORAGE_SIZE(x, kind=8))
+
+  k1 = STORAGE_SIZE(x, kind=1)
+  k2 = STORAGE_SIZE(x, kind=2)
+end subroutine test2
+
+! { dg-final { scan-tree-dump-times "i0 = 4;" 1 "original" } }
+! { dg-final { scan-tree-dump-times "i1 = 1;" 1 "original" } }
+! { dg-final { scan-tree-dump-times "i2 = 2;" 1 "original" } }
+! { dg-final { scan-tree-dump-times "i3 = 4;" 1 "original" } }
+! { dg-final { scan-tree-dump-times "i4 = 8;" 1 "original" } }
+! { dg-final { scan-tree-dump-times "j0 = 4;" 1 "original" } }
+
+! { dg-final { scan-tree-dump-times "j1 = 1;" 1 "original" } }
+! { dg-final { scan-tree-dump-times "j2 = 2;" 1 "original" } }
+! { dg-final { scan-tree-dump-times "j3 = 4;" 1 "original" } }
+! { dg-final { scan-tree-dump-times "j4 = 8;" 1 "original" } }
+
+! { dg-final { scan-tree-dump-times "k1 = \\(integer\\(kind=1\\)\\)" 1 "original" } }
+! { dg-final { scan-tree-dump-times "k2 = \\(integer\\(kind=2\\)\\)" 1 "original" } }
+! { dg-final { cleanup-tree-dump "original" } }