re PR fortran/28094 (Modulo of real(kind=10) variables doesn't work)
PR fortran/28094 * trans-intrinsic.c (gfc_conv_intrinsic_mod): Support cases where there is no integer kind equal to the resulting real kind. * intrinsic.c (add_functions): MODULO is not allowed as an actual argument. * Makefile.am: Add _mod_r10.F90 and _mod_r16.F90. * Makefile.in: Regenerate. * generated/_mod_r10.F90: New file. * generated/_mod_r16.F90: New file. From-SVN: r114961
This commit is contained in:
parent
35157c5e55
commit
3e7cb1c7e7
@ -1,3 +1,11 @@
|
||||
2006-06-24 Francois-Xavier Coudert <coudert@clipper.ens.fr>
|
||||
|
||||
PR fortran/28094
|
||||
* trans-intrinsic.c (gfc_conv_intrinsic_mod): Support cases where
|
||||
there is no integer kind equal to the resulting real kind.
|
||||
* intrinsic.c (add_functions): MODULO is not allowed as an actual
|
||||
argument.
|
||||
|
||||
2006-06-23 Steven G. Kargl <kargls@comcast.net>
|
||||
|
||||
PR fortran/27981
|
||||
|
@ -1809,7 +1809,7 @@ add_functions (void)
|
||||
|
||||
make_generic ("mod", GFC_ISYM_MOD, GFC_STD_F77);
|
||||
|
||||
add_sym_2 ("modulo", 1, 1, BT_REAL, di, GFC_STD_F95,
|
||||
add_sym_2 ("modulo", 1, 0, BT_REAL, di, GFC_STD_F95,
|
||||
gfc_check_a_p, gfc_simplify_modulo, gfc_resolve_modulo,
|
||||
a, BT_REAL, di, REQUIRED, p, BT_REAL, di, REQUIRED);
|
||||
|
||||
|
@ -860,7 +860,7 @@ gfc_conv_intrinsic_mod (gfc_se * se, gfc_expr * expr, int modulo)
|
||||
tree test;
|
||||
tree test2;
|
||||
mpfr_t huge;
|
||||
int n;
|
||||
int n, ikind;
|
||||
|
||||
arg = gfc_conv_intrinsic_function_args (se, expr);
|
||||
arg2 = TREE_VALUE (TREE_CHAIN (arg));
|
||||
@ -886,7 +886,13 @@ gfc_conv_intrinsic_mod (gfc_se * se, gfc_expr * expr, int modulo)
|
||||
/* Test if the value is too large to handle sensibly. */
|
||||
gfc_set_model_kind (expr->ts.kind);
|
||||
mpfr_init (huge);
|
||||
n = gfc_validate_kind (BT_INTEGER, expr->ts.kind, false);
|
||||
n = gfc_validate_kind (BT_INTEGER, expr->ts.kind, true);
|
||||
ikind = expr->ts.kind;
|
||||
if (n < 0)
|
||||
{
|
||||
n = gfc_validate_kind (BT_INTEGER, gfc_max_integer_kind, false);
|
||||
ikind = gfc_max_integer_kind;
|
||||
}
|
||||
mpfr_set_z (huge, gfc_integer_kinds[n].huge, GFC_RND_MODE);
|
||||
test = gfc_conv_mpfr_to_tree (huge, expr->ts.kind);
|
||||
test2 = build2 (LT_EXPR, boolean_type_node, tmp, test);
|
||||
@ -896,7 +902,7 @@ gfc_conv_intrinsic_mod (gfc_se * se, gfc_expr * expr, int modulo)
|
||||
test = build2 (GT_EXPR, boolean_type_node, tmp, test);
|
||||
test2 = build2 (TRUTH_AND_EXPR, boolean_type_node, test, test2);
|
||||
|
||||
itype = gfc_get_int_type (expr->ts.kind);
|
||||
itype = gfc_get_int_type (ikind);
|
||||
if (modulo)
|
||||
tmp = build_fix_expr (&se->pre, tmp, itype, FIX_FLOOR_EXPR);
|
||||
else
|
||||
|
@ -1,3 +1,11 @@
|
||||
2006-06-24 Francois-Xavier Coudert <coudert@clipper.ens.fr>
|
||||
|
||||
PR fortran/28094
|
||||
* Makefile.am: Add _mod_r10.F90 and _mod_r16.F90.
|
||||
* Makefile.in: Regenerate.
|
||||
* generated/_mod_r10.F90: New file.
|
||||
* generated/_mod_r16.F90: New file.
|
||||
|
||||
2006-06-22 Francois-Xavier Coudert <coudert@clipper.ens.fr>
|
||||
|
||||
PR libfortran/26769
|
||||
|
@ -571,11 +571,9 @@ generated/_mod_i4.F90 \
|
||||
generated/_mod_i8.F90 \
|
||||
generated/_mod_i16.F90 \
|
||||
generated/_mod_r4.F90 \
|
||||
generated/_mod_r8.F90
|
||||
# There are commented out due to a bug in the way the front-end
|
||||
# handles MOD
|
||||
#generated/_mod_r10.F90
|
||||
#generated/_mod_r16.F90
|
||||
generated/_mod_r8.F90 \
|
||||
generated/_mod_r10.F90 \
|
||||
generated/_mod_r16.F90
|
||||
|
||||
gfor_specific_src= \
|
||||
$(gfor_built_specific_src) \
|
||||
|
@ -205,7 +205,8 @@ am__objects_36 = _sign_i4.lo _sign_i8.lo _sign_i16.lo _sign_r4.lo \
|
||||
_sign_r8.lo _sign_r10.lo _sign_r16.lo _dim_i4.lo _dim_i8.lo \
|
||||
_dim_i16.lo _dim_r4.lo _dim_r8.lo _dim_r10.lo _dim_r16.lo \
|
||||
_atan2_r4.lo _atan2_r8.lo _atan2_r10.lo _atan2_r16.lo \
|
||||
_mod_i4.lo _mod_i8.lo _mod_i16.lo _mod_r4.lo _mod_r8.lo
|
||||
_mod_i4.lo _mod_i8.lo _mod_i16.lo _mod_r4.lo _mod_r8.lo \
|
||||
_mod_r10.lo _mod_r16.lo
|
||||
am__objects_37 = $(am__objects_35) $(am__objects_36) dprod_r8.lo \
|
||||
f2c_specifics.lo
|
||||
am_libgfortran_la_OBJECTS = $(am__objects_1) $(am__objects_31) \
|
||||
@ -920,12 +921,10 @@ generated/_mod_i4.F90 \
|
||||
generated/_mod_i8.F90 \
|
||||
generated/_mod_i16.F90 \
|
||||
generated/_mod_r4.F90 \
|
||||
generated/_mod_r8.F90
|
||||
generated/_mod_r8.F90 \
|
||||
generated/_mod_r10.F90 \
|
||||
generated/_mod_r16.F90
|
||||
|
||||
# There are commented out due to a bug in the way the front-end
|
||||
# handles MOD
|
||||
#generated/_mod_r10.F90
|
||||
#generated/_mod_r16.F90
|
||||
gfor_specific_src = \
|
||||
$(gfor_built_specific_src) \
|
||||
$(gfor_built_specific2_src) \
|
||||
@ -1398,6 +1397,12 @@ _mod_r4.lo: generated/_mod_r4.F90
|
||||
_mod_r8.lo: generated/_mod_r8.F90
|
||||
$(LIBTOOL) --mode=compile $(FC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_FCFLAGS) $(FCFLAGS) -c -o _mod_r8.lo `test -f 'generated/_mod_r8.F90' || echo '$(srcdir)/'`generated/_mod_r8.F90
|
||||
|
||||
_mod_r10.lo: generated/_mod_r10.F90
|
||||
$(LIBTOOL) --mode=compile $(FC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_FCFLAGS) $(FCFLAGS) -c -o _mod_r10.lo `test -f 'generated/_mod_r10.F90' || echo '$(srcdir)/'`generated/_mod_r10.F90
|
||||
|
||||
_mod_r16.lo: generated/_mod_r16.F90
|
||||
$(LIBTOOL) --mode=compile $(FC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_FCFLAGS) $(FCFLAGS) -c -o _mod_r16.lo `test -f 'generated/_mod_r16.F90' || echo '$(srcdir)/'`generated/_mod_r16.F90
|
||||
|
||||
f2c_specifics.lo: intrinsics/f2c_specifics.F90
|
||||
$(LIBTOOL) --mode=compile $(FC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_FCFLAGS) $(FCFLAGS) -c -o f2c_specifics.lo `test -f 'intrinsics/f2c_specifics.F90' || echo '$(srcdir)/'`intrinsics/f2c_specifics.F90
|
||||
|
||||
|
51
libgfortran/generated/_mod_r10.F90
Normal file
51
libgfortran/generated/_mod_r10.F90
Normal file
@ -0,0 +1,51 @@
|
||||
! Copyright 2002 Free Software Foundation, Inc.
|
||||
! Contributed by Paul Brook <paul@nowt.org>
|
||||
!
|
||||
!This file is part of the GNU Fortran 95 runtime library (libgfortran).
|
||||
!
|
||||
!GNU libgfortran is free software; you can redistribute it and/or
|
||||
!modify it under the terms of the GNU General Public
|
||||
!License as published by the Free Software Foundation; either
|
||||
!version 2 of the License, or (at your option) any later version.
|
||||
|
||||
!In addition to the permissions in the GNU General Public License, the
|
||||
!Free Software Foundation gives you unlimited permission to link the
|
||||
!compiled version of this file into combinations with other programs,
|
||||
!and to distribute those combinations without any restriction coming
|
||||
!from the use of this file. (The General Public License restrictions
|
||||
!do apply in other respects; for example, they cover modification of
|
||||
!the file, and distribution when not linked into a combine
|
||||
!executable.)
|
||||
!
|
||||
!GNU libgfortran is distributed in the hope that it will be useful,
|
||||
!but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
!MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
!GNU General Public License for more details.
|
||||
!
|
||||
!You should have received a copy of the GNU General Public
|
||||
!License along with libgfortran; see the file COPYING. If not,
|
||||
!write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
||||
!Boston, MA 02110-1301, USA.
|
||||
!
|
||||
!This file is machine generated.
|
||||
|
||||
|
||||
|
||||
#include "config.h"
|
||||
#include "kinds.inc"
|
||||
#include "c99_protos.inc"
|
||||
|
||||
#if defined (HAVE_GFC_REAL_10)
|
||||
|
||||
|
||||
|
||||
elemental function specific__mod_r10 (p1, p2)
|
||||
real (kind=10), intent (in) :: p1, p2
|
||||
real (kind=10) :: specific__mod_r10
|
||||
|
||||
specific__mod_r10 = mod (p1, p2)
|
||||
end function
|
||||
|
||||
|
||||
|
||||
#endif
|
51
libgfortran/generated/_mod_r16.F90
Normal file
51
libgfortran/generated/_mod_r16.F90
Normal file
@ -0,0 +1,51 @@
|
||||
! Copyright 2002 Free Software Foundation, Inc.
|
||||
! Contributed by Paul Brook <paul@nowt.org>
|
||||
!
|
||||
!This file is part of the GNU Fortran 95 runtime library (libgfortran).
|
||||
!
|
||||
!GNU libgfortran is free software; you can redistribute it and/or
|
||||
!modify it under the terms of the GNU General Public
|
||||
!License as published by the Free Software Foundation; either
|
||||
!version 2 of the License, or (at your option) any later version.
|
||||
|
||||
!In addition to the permissions in the GNU General Public License, the
|
||||
!Free Software Foundation gives you unlimited permission to link the
|
||||
!compiled version of this file into combinations with other programs,
|
||||
!and to distribute those combinations without any restriction coming
|
||||
!from the use of this file. (The General Public License restrictions
|
||||
!do apply in other respects; for example, they cover modification of
|
||||
!the file, and distribution when not linked into a combine
|
||||
!executable.)
|
||||
!
|
||||
!GNU libgfortran is distributed in the hope that it will be useful,
|
||||
!but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
!MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
!GNU General Public License for more details.
|
||||
!
|
||||
!You should have received a copy of the GNU General Public
|
||||
!License along with libgfortran; see the file COPYING. If not,
|
||||
!write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
||||
!Boston, MA 02110-1301, USA.
|
||||
!
|
||||
!This file is machine generated.
|
||||
|
||||
|
||||
|
||||
#include "config.h"
|
||||
#include "kinds.inc"
|
||||
#include "c99_protos.inc"
|
||||
|
||||
#if defined (HAVE_GFC_REAL_16)
|
||||
|
||||
|
||||
|
||||
elemental function specific__mod_r16 (p1, p2)
|
||||
real (kind=16), intent (in) :: p1, p2
|
||||
real (kind=16) :: specific__mod_r16
|
||||
|
||||
specific__mod_r16 = mod (p1, p2)
|
||||
end function
|
||||
|
||||
|
||||
|
||||
#endif
|
Loading…
Reference in New Issue
Block a user