From: Tobias Burnus Date: Fri, 25 Jul 2014 19:09:56 +0000 (+0200) Subject: simplify.c (gfc_simplify_storage_size): Use proper integer kind for the returned... X-Git-Tag: releases/gcc-5.1.0~6076 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=a634323ae02c99a5a7e2b7c9674109ed2af6c969;p=thirdparty%2Fgcc.git simplify.c (gfc_simplify_storage_size): Use proper integer kind for the returned value. 2014-07-25 Tobias Burnus * simplify.c (gfc_simplify_storage_size): Use proper integer kind for the returned value. 2014-07-25 Tobias Burnus * gfortran.dg/storage_size_5.f90: New. From-SVN: r213060 --- diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index e95369805ab6..8071e117e567 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,8 @@ +2014-07-25 Tobias Burnus + + * simplify.c (gfc_simplify_storage_size): Use proper + integer kind for the returned value. + 2014-07-24 Uros Bizjak * intrinsic.texi (Intrinsic Procedures) : Move to diff --git a/gcc/fortran/simplify.c b/gcc/fortran/simplify.c index 60d85934b72d..d4a67ada3dab 100644 --- a/gcc/fortran/simplify.c +++ b/gcc/fortran/simplify.c @@ -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"); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 72ba8a7a8a85..ebf7badad827 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2014-07-25 Tobias Burnus + + * gfortran.dg/storage_size_5.f90: New. + 2014-07-25 Richard Biener 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 index 000000000000..ae0f12661f08 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/storage_size_5.f90 @@ -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" } }