From 7bee49dcaa2b662f6f1bad736d4d5d0cf142a123 Mon Sep 17 00:00:00 2001 From: "Steven G. Kargl" Date: Thu, 7 Sep 2006 16:48:18 +0000 Subject: data_1.f90: Fix integer oveflow in integer literal constant. 2006-09-07 Steven G. Kargl * gfortran.fortran-torture/compile/data_1.f90: Fix integer oveflow in integer literal constant. * gfortran.dg/enum_8.f90: Ditto. * gfortran.dg/g77/20030326-1.f: Ditto. 2006-09-07 Steven G. Kargl * gfortran.h (gfc_integer_info): Eliminate max_int. * arith.c (gfc_arith_init_1): Remove initialization of max_int. (gfc_arith_done_1): Remove clearing of max_int. (gfc_check_integer_range): Fix range chekcing of overflow. * simplify.c (gfc_simplify_not): Construct mask that was max_int. From-SVN: r116753 --- gcc/fortran/arith.c | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) (limited to 'gcc/fortran/arith.c') diff --git a/gcc/fortran/arith.c b/gcc/fortran/arith.c index 884d810..766169f 100644 --- a/gcc/fortran/arith.c +++ b/gcc/fortran/arith.c @@ -195,7 +195,7 @@ gfc_arith_init_1 (void) /* These are the numbers that are actually representable by the target. For bases other than two, this needs to be changed. */ if (int_info->radix != 2) - gfc_internal_error ("Fix min_int, max_int calculation"); + gfc_internal_error ("Fix min_int calculation"); /* See PRs 13490 and 17912, related to integer ranges. The pedantic_min_int exists for range checking when a program @@ -210,10 +210,6 @@ gfc_arith_init_1 (void) mpz_init (int_info->min_int); mpz_sub_ui (int_info->min_int, int_info->pedantic_min_int, 1); - mpz_init (int_info->max_int); - mpz_add (int_info->max_int, int_info->huge, int_info->huge); - mpz_add_ui (int_info->max_int, int_info->max_int, 1); - /* Range */ mpfr_set_z (a, int_info->huge, GFC_RND_MODE); mpfr_log10 (a, a, GFC_RND_MODE); @@ -321,7 +317,6 @@ gfc_arith_done_1 (void) for (ip = gfc_integer_kinds; ip->kind; ip++) { mpz_clear (ip->min_int); - mpz_clear (ip->max_int); mpz_clear (ip->pedantic_min_int); mpz_clear (ip->huge); } @@ -356,7 +351,7 @@ gfc_check_integer_range (mpz_t p, int kind) } if (mpz_cmp (p, gfc_integer_kinds[i].min_int) < 0 - || mpz_cmp (p, gfc_integer_kinds[i].max_int) > 0) + || mpz_cmp (p, gfc_integer_kinds[i].huge) > 0) result = ARITH_OVERFLOW; return result; -- cgit v1.1