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

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
This commit is contained in:
Tobias Burnus 2014-07-25 21:09:56 +02:00 committed by Tobias Burnus
parent a4b0388b24
commit a634323ae0
4 changed files with 54 additions and 3 deletions

View 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

View 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");

View 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

View File

@ -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" } }