From: Steven G. Kargl Date: Sat, 17 Dec 2005 17:30:26 +0000 (+0000) Subject: re PR fortran/25458 ([4.1] Kind of constants in generic intrinsics) X-Git-Tag: releases/gcc-4.2.0~5266 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=ef98c52a44394a1f9e9d91662cace6294e0ba2db;p=thirdparty%2Fgcc.git re PR fortran/25458 ([4.1] Kind of constants in generic intrinsics) PR fortran/25458 * simplify.c (gfc_simplify_ibset, gfc_simplify_not): Add call to twos_complement. * gfortran.dg/chkbits.f90: New test. Co-Authored-By: Tobias Schlüter From-SVN: r108720 --- diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 882332dffa13..98e624a830ec 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,10 @@ +2005-12-17 Steven G. Kargl + Tobias Schlueter + + PR fortran/25458 + * simplify.c (gfc_simplify_ibset, gfc_simplify_not): Add call to + twos_complement. + 2005-12-17 Steven G. Kargl * decl.c (gfc_match_old_kind_spec,match_type_spec): Use gfc_std_notify diff --git a/gcc/fortran/simplify.c b/gcc/fortran/simplify.c index e6fbefcfe5ba..5b47e930db63 100644 --- a/gcc/fortran/simplify.c +++ b/gcc/fortran/simplify.c @@ -1348,6 +1348,9 @@ gfc_simplify_ibset (gfc_expr * x, gfc_expr * y) result = gfc_copy_expr (x); mpz_setbit (result->value.integer, pos); + + twos_complement (result->value.integer, gfc_integer_kinds[k].bit_size); + return range_check (result, "IBSET"); } @@ -2514,6 +2517,8 @@ gfc_simplify_not (gfc_expr * e) mpz_and (result->value.integer, result->value.integer, gfc_integer_kinds[i].max_int); + twos_complement (result->value.integer, gfc_integer_kinds[i].bit_size); + return range_check (result, "NOT"); } diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index a45284b7ecbb..b7e00b9046a7 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2005-12-17 Steven G. Kargl + + * PR fortran/25458 + * gfortran.dg/chkbits.f90: New test. + 2005-12-17 Steven G. Kargl *gfortran.dg/enum_5.f: Revert to previous version. diff --git a/gcc/testsuite/gfortran.dg/chkbits.f90 b/gcc/testsuite/gfortran.dg/chkbits.f90 new file mode 100644 index 000000000000..19ab5c722c6e --- /dev/null +++ b/gcc/testsuite/gfortran.dg/chkbits.f90 @@ -0,0 +1,26 @@ +! { dg-do run } +! NOT() was not return the two's complement value as reported by +! PR fortran/25458. In checking other bit manipulation intrinsics, +! IBSET was found to be in error. +program chkbits + + implicit none + + integer(kind=1) i1 + integer(kind=2) i2 + integer(kind=4) i4 + integer(kind=8) i8 + + i1 = ibset(2147483647,bit_size(i4)-1) + i2 = ibset(2147483647,bit_size(i4)-1) + i4 = ibset(2147483647,bit_size(i4)-1) + i8 = ibset(2147483647,bit_size(i4)-1) + if (i1 /= -1 .or. i2 /= -1 .or. i4 /= -1 .or. i8 /= -1) call abort + + i1 = not(0) + i2 = not(0) + i4 = not(0) + i8 = not(0) + if (i1 /= -1 .or. i2 /= -1 .or. i4 /= -1 .or. i8 /= -1) call abort + +end program chkbits