This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
Other format: | [Raw text] |
See the attached patch. It's self explanatory. 2008-05-13 Steven G. Kargl, <kargl@comcast.net> * gfortran.dg/and_or_xor.f90: New test * fortran/simplify.c (gfc_simplify_and, gfc_simplify_or, gfc_simplify_xor): Don't range check logical results. -- Steve
Index: intrinsic.texi =================================================================== --- intrinsic.texi (revision 135271) +++ intrinsic.texi (working copy) @@ -1000,13 +1000,16 @@ Function @item @emph{Arguments}: @multitable @columnfractions .15 .70 -@item @var{I} @tab The type shall be either @code{INTEGER(*)} or @code{LOGICAL}. -@item @var{J} @tab The type shall be either @code{INTEGER(*)} or @code{LOGICAL}. +@item @var{I} @tab The type shall be either a scalar @code{INTEGER(*)} +type or a scalar @code{LOGICAL} type. +@item @var{J} @tab The type shall be the same as the type of @var{I}. @end multitable @item @emph{Return value}: -The return type is either @code{INTEGER(*)} or @code{LOGICAL} after -cross-promotion of the arguments. +The return type is either a scalar @code{INTEGER(*)} or a scalar +@code{LOGICAL}. If the kind type parameters differ, then the +smaller kind type is implicitly converted to larger kind, and the +return has the larger kind. @item @emph{Example}: @smallexample @@ -8250,13 +8253,16 @@ Function @item @emph{Arguments}: @multitable @columnfractions .15 .70 -@item @var{X} @tab The type shall be either @code{INTEGER(*)} or @code{LOGICAL}. -@item @var{Y} @tab The type shall be either @code{INTEGER(*)} or @code{LOGICAL}. +@item @var{X} @tab The type shall be either a scalar @code{INTEGER(*)} +type or a scalar @code{LOGICAL} type. +@item @var{Y} @tab The type shall be the same as the type of @var{X}. @end multitable @item @emph{Return value}: -The return type is either @code{INTEGER(*)} or @code{LOGICAL} -after cross-promotion of the arguments. +The return type is either a scalar @code{INTEGER(*)} or a scalar +@code{LOGICAL}. If the kind type parameters differ, then the +smaller kind type is implicitly converted to larger kind, and the +return has the larger kind. @item @emph{Example}: @smallexample @@ -10990,13 +10996,16 @@ Function @item @emph{Arguments}: @multitable @columnfractions .15 .70 -@item @var{X} @tab The type shall be either @code{INTEGER(*)} or @code{LOGICAL}. -@item @var{Y} @tab The type shall be either @code{INTEGER(*)} or @code{LOGICAL}. +@item @var{X} @tab The type shall be either a scalar @code{INTEGER(*)} +type or a scalar @code{LOGICAL} type. +@item @var{Y} @tab The type shall be the same as the type of @var{I}. @end multitable @item @emph{Return value}: -The return type is either @code{INTEGER(*)} or @code{LOGICAL} -after cross-promotion of the arguments. +The return type is either a scalar @code{INTEGER(*)} or a scalar +@code{LOGICAL}. If the kind type parameters differ, then the +smaller kind type is implicitly converted to larger kind, and the +return has the larger kind. @item @emph{Example}: @smallexample Index: simplify.c =================================================================== --- simplify.c (revision 135271) +++ simplify.c (working copy) @@ -505,14 +505,15 @@ gfc_simplify_and (gfc_expr *x, gfc_expr { result = gfc_constant_result (BT_INTEGER, kind, &x->where); mpz_and (result->value.integer, x->value.integer, y->value.integer); + return range_check (result, "AND"); } else /* BT_LOGICAL */ { result = gfc_constant_result (BT_LOGICAL, kind, &x->where); result->value.logical = x->value.logical && y->value.logical; + return result; } - return range_check (result, "AND"); } @@ -3079,14 +3080,14 @@ gfc_simplify_or (gfc_expr *x, gfc_expr * { result = gfc_constant_result (BT_INTEGER, kind, &x->where); mpz_ior (result->value.integer, x->value.integer, y->value.integer); + return range_check (result, "OR"); } else /* BT_LOGICAL */ { result = gfc_constant_result (BT_LOGICAL, kind, &x->where); result->value.logical = x->value.logical || y->value.logical; + return result; } - - return range_check (result, "OR"); } @@ -4582,15 +4583,16 @@ gfc_simplify_xor (gfc_expr *x, gfc_expr { result = gfc_constant_result (BT_INTEGER, kind, &x->where); mpz_xor (result->value.integer, x->value.integer, y->value.integer); + return range_check (result, "XOR"); } else /* BT_LOGICAL */ { result = gfc_constant_result (BT_LOGICAL, kind, &x->where); result->value.logical = (x->value.logical && !y->value.logical) || (!x->value.logical && y->value.logical); + return result; } - return range_check (result, "XOR"); }
Attachment:
and_or_xor.f90
Description: Text document
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |