2 Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007
3 Free Software Foundation, Inc.
4 Contributed by Andy Vaught
6 This file is part of GCC.
8 GCC is free software; you can redistribute it and/or modify it under
9 the terms of the GNU General Public License as published by the Free
10 Software Foundation; either version 2, or (at your option) any later
13 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
14 WARRANTY; without even the implied warranty of MERCHANTABILITY or
15 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
18 You should have received a copy of the GNU General Public License
19 along with GCC; see the file COPYING. If not, write to the Free
20 Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA
23 /* Since target arithmetic must be done on the host, there has to
24 be some way of evaluating arithmetic expressions as the host
25 would evaluate them. We use the GNU MP library and the MPFR
26 library to do arithmetic, and this file provides the interface. */
34 /* MPFR does not have a direct replacement for mpz_set_f() from GMP.
35 It's easily implemented with a few calls though. */
38 gfc_mpfr_to_mpz (mpz_t z, mpfr_t x)
42 e = mpfr_get_z_exp (z, x);
43 /* MPFR 2.0.1 (included with GMP 4.1) has a bug whereby mpfr_get_z_exp
44 may set the sign of z incorrectly. Work around that here. */
45 if (mpfr_sgn (x) != mpz_sgn (z))
49 mpz_mul_2exp (z, z, e);
51 mpz_tdiv_q_2exp (z, z, -e);
55 /* Set the model number precision by the requested KIND. */
58 gfc_set_model_kind (int kind)
60 int index = gfc_validate_kind (BT_REAL, kind, false);
63 base2prec = gfc_real_kinds[index].digits;
64 if (gfc_real_kinds[index].radix != 2)
65 base2prec *= gfc_real_kinds[index].radix / 2;
66 mpfr_set_default_prec (base2prec);
70 /* Set the model number precision from mpfr_t x. */
73 gfc_set_model (mpfr_t x)
75 mpfr_set_default_prec (mpfr_get_prec (x));
79 /* Given an arithmetic error code, return a pointer to a string that
80 explains the error. */
83 gfc_arith_error (arith code)
90 p = _("Arithmetic OK at %L");
93 p = _("Arithmetic overflow at %L");
96 p = _("Arithmetic underflow at %L");
99 p = _("Arithmetic NaN at %L");
102 p = _("Division by zero at %L");
104 case ARITH_INCOMMENSURATE:
105 p = _("Array operands are incommensurate at %L");
107 case ARITH_ASYMMETRIC:
109 _("Integer outside symmetric range implied by Standard Fortran at %L");
112 gfc_internal_error ("gfc_arith_error(): Bad error code");
119 /* Get things ready to do math. */
122 gfc_arith_init_1 (void)
124 gfc_integer_info *int_info;
125 gfc_real_info *real_info;
130 mpfr_set_default_prec (128);
134 /* Convert the minimum and maximum values for each kind into their
135 GNU MP representation. */
136 for (int_info = gfc_integer_kinds; int_info->kind != 0; int_info++)
139 mpz_set_ui (r, int_info->radix);
140 mpz_pow_ui (r, r, int_info->digits);
142 mpz_init (int_info->huge);
143 mpz_sub_ui (int_info->huge, r, 1);
145 /* These are the numbers that are actually representable by the
146 target. For bases other than two, this needs to be changed. */
147 if (int_info->radix != 2)
148 gfc_internal_error ("Fix min_int calculation");
150 /* See PRs 13490 and 17912, related to integer ranges.
151 The pedantic_min_int exists for range checking when a program
152 is compiled with -pedantic, and reflects the belief that
153 Standard Fortran requires integers to be symmetrical, i.e.
154 every negative integer must have a representable positive
155 absolute value, and vice versa. */
157 mpz_init (int_info->pedantic_min_int);
158 mpz_neg (int_info->pedantic_min_int, int_info->huge);
160 mpz_init (int_info->min_int);
161 mpz_sub_ui (int_info->min_int, int_info->pedantic_min_int, 1);
164 mpfr_set_z (a, int_info->huge, GFC_RND_MODE);
165 mpfr_log10 (a, a, GFC_RND_MODE);
167 gfc_mpfr_to_mpz (r, a);
168 int_info->range = mpz_get_si (r);
173 for (real_info = gfc_real_kinds; real_info->kind != 0; real_info++)
175 gfc_set_model_kind (real_info->kind);
181 /* huge(x) = (1 - b**(-p)) * b**(emax-1) * b */
182 /* a = 1 - b**(-p) */
183 mpfr_set_ui (a, 1, GFC_RND_MODE);
184 mpfr_set_ui (b, real_info->radix, GFC_RND_MODE);
185 mpfr_pow_si (b, b, -real_info->digits, GFC_RND_MODE);
186 mpfr_sub (a, a, b, GFC_RND_MODE);
188 /* c = b**(emax-1) */
189 mpfr_set_ui (b, real_info->radix, GFC_RND_MODE);
190 mpfr_pow_ui (c, b, real_info->max_exponent - 1, GFC_RND_MODE);
192 /* a = a * c = (1 - b**(-p)) * b**(emax-1) */
193 mpfr_mul (a, a, c, GFC_RND_MODE);
195 /* a = (1 - b**(-p)) * b**(emax-1) * b */
196 mpfr_mul_ui (a, a, real_info->radix, GFC_RND_MODE);
198 mpfr_init (real_info->huge);
199 mpfr_set (real_info->huge, a, GFC_RND_MODE);
201 /* tiny(x) = b**(emin-1) */
202 mpfr_set_ui (b, real_info->radix, GFC_RND_MODE);
203 mpfr_pow_si (b, b, real_info->min_exponent - 1, GFC_RND_MODE);
205 mpfr_init (real_info->tiny);
206 mpfr_set (real_info->tiny, b, GFC_RND_MODE);
208 /* subnormal (x) = b**(emin - digit) */
209 mpfr_set_ui (b, real_info->radix, GFC_RND_MODE);
210 mpfr_pow_si (b, b, real_info->min_exponent - real_info->digits,
213 mpfr_init (real_info->subnormal);
214 mpfr_set (real_info->subnormal, b, GFC_RND_MODE);
216 /* epsilon(x) = b**(1-p) */
217 mpfr_set_ui (b, real_info->radix, GFC_RND_MODE);
218 mpfr_pow_si (b, b, 1 - real_info->digits, GFC_RND_MODE);
220 mpfr_init (real_info->epsilon);
221 mpfr_set (real_info->epsilon, b, GFC_RND_MODE);
223 /* range(x) = int(min(log10(huge(x)), -log10(tiny)) */
224 mpfr_log10 (a, real_info->huge, GFC_RND_MODE);
225 mpfr_log10 (b, real_info->tiny, GFC_RND_MODE);
226 mpfr_neg (b, b, GFC_RND_MODE);
229 if (mpfr_cmp (a, b) > 0)
230 mpfr_set (a, b, GFC_RND_MODE);
233 gfc_mpfr_to_mpz (r, a);
234 real_info->range = mpz_get_si (r);
236 /* precision(x) = int((p - 1) * log10(b)) + k */
237 mpfr_set_ui (a, real_info->radix, GFC_RND_MODE);
238 mpfr_log10 (a, a, GFC_RND_MODE);
240 mpfr_mul_ui (a, a, real_info->digits - 1, GFC_RND_MODE);
242 gfc_mpfr_to_mpz (r, a);
243 real_info->precision = mpz_get_si (r);
245 /* If the radix is an integral power of 10, add one to the precision. */
246 for (i = 10; i <= real_info->radix; i *= 10)
247 if (i == real_info->radix)
248 real_info->precision++;
259 /* Clean up, get rid of numeric constants. */
262 gfc_arith_done_1 (void)
264 gfc_integer_info *ip;
267 for (ip = gfc_integer_kinds; ip->kind; ip++)
269 mpz_clear (ip->min_int);
270 mpz_clear (ip->pedantic_min_int);
271 mpz_clear (ip->huge);
274 for (rp = gfc_real_kinds; rp->kind; rp++)
276 mpfr_clear (rp->epsilon);
277 mpfr_clear (rp->huge);
278 mpfr_clear (rp->tiny);
279 mpfr_clear (rp->subnormal);
284 /* Given an integer and a kind, make sure that the integer lies within
285 the range of the kind. Returns ARITH_OK, ARITH_ASYMMETRIC or
289 gfc_check_integer_range (mpz_t p, int kind)
294 i = gfc_validate_kind (BT_INTEGER, kind, false);
299 if (mpz_cmp (p, gfc_integer_kinds[i].pedantic_min_int) < 0)
300 result = ARITH_ASYMMETRIC;
304 if (gfc_option.flag_range_check == 0)
307 if (mpz_cmp (p, gfc_integer_kinds[i].min_int) < 0
308 || mpz_cmp (p, gfc_integer_kinds[i].huge) > 0)
309 result = ARITH_OVERFLOW;
315 /* Given a real and a kind, make sure that the real lies within the
316 range of the kind. Returns ARITH_OK, ARITH_OVERFLOW or
320 gfc_check_real_range (mpfr_t p, int kind)
326 i = gfc_validate_kind (BT_REAL, kind, false);
330 mpfr_abs (q, p, GFC_RND_MODE);
334 if (gfc_option.flag_range_check == 0)
337 retval = ARITH_OVERFLOW;
339 else if (mpfr_nan_p (p))
341 if (gfc_option.flag_range_check == 0)
346 else if (mpfr_sgn (q) == 0)
348 else if (mpfr_cmp (q, gfc_real_kinds[i].huge) > 0)
350 if (gfc_option.flag_range_check == 0)
353 retval = ARITH_OVERFLOW;
355 else if (mpfr_cmp (q, gfc_real_kinds[i].subnormal) < 0)
357 if (gfc_option.flag_range_check == 0)
360 retval = ARITH_UNDERFLOW;
362 else if (mpfr_cmp (q, gfc_real_kinds[i].tiny) < 0)
367 /* Save current values of emin and emax. */
368 emin = mpfr_get_emin ();
369 emax = mpfr_get_emax ();
371 /* Set emin and emax for the current model number. */
372 en = gfc_real_kinds[i].min_exponent - gfc_real_kinds[i].digits + 1;
373 mpfr_set_emin ((mp_exp_t) en);
374 mpfr_set_emax ((mp_exp_t) gfc_real_kinds[i].max_exponent);
375 mpfr_subnormalize (q, 0, GFC_RND_MODE);
377 /* Reset emin and emax. */
378 mpfr_set_emin (emin);
379 mpfr_set_emax (emax);
381 /* Copy sign if needed. */
382 if (mpfr_sgn (p) < 0)
383 mpfr_neg (p, q, GMP_RNDN);
385 mpfr_set (p, q, GMP_RNDN);
398 /* Function to return a constant expression node of a given type and kind. */
401 gfc_constant_result (bt type, int kind, locus *where)
406 gfc_internal_error ("gfc_constant_result(): locus 'where' cannot be NULL");
408 result = gfc_get_expr ();
410 result->expr_type = EXPR_CONSTANT;
411 result->ts.type = type;
412 result->ts.kind = kind;
413 result->where = *where;
418 mpz_init (result->value.integer);
422 gfc_set_model_kind (kind);
423 mpfr_init (result->value.real);
427 gfc_set_model_kind (kind);
428 mpfr_init (result->value.complex.r);
429 mpfr_init (result->value.complex.i);
440 /* Low-level arithmetic functions. All of these subroutines assume
441 that all operands are of the same type and return an operand of the
442 same type. The other thing about these subroutines is that they
443 can fail in various ways -- overflow, underflow, division by zero,
444 zero raised to the zero, etc. */
447 gfc_arith_not (gfc_expr *op1, gfc_expr **resultp)
451 result = gfc_constant_result (BT_LOGICAL, op1->ts.kind, &op1->where);
452 result->value.logical = !op1->value.logical;
460 gfc_arith_and (gfc_expr *op1, gfc_expr *op2, gfc_expr **resultp)
464 result = gfc_constant_result (BT_LOGICAL, gfc_kind_max (op1, op2),
466 result->value.logical = op1->value.logical && op2->value.logical;
474 gfc_arith_or (gfc_expr *op1, gfc_expr *op2, gfc_expr **resultp)
478 result = gfc_constant_result (BT_LOGICAL, gfc_kind_max (op1, op2),
480 result->value.logical = op1->value.logical || op2->value.logical;
488 gfc_arith_eqv (gfc_expr *op1, gfc_expr *op2, gfc_expr **resultp)
492 result = gfc_constant_result (BT_LOGICAL, gfc_kind_max (op1, op2),
494 result->value.logical = op1->value.logical == op2->value.logical;
502 gfc_arith_neqv (gfc_expr *op1, gfc_expr *op2, gfc_expr **resultp)
506 result = gfc_constant_result (BT_LOGICAL, gfc_kind_max (op1, op2),
508 result->value.logical = op1->value.logical != op2->value.logical;
515 /* Make sure a constant numeric expression is within the range for
516 its type and kind. Note that there's also a gfc_check_range(),
517 but that one deals with the intrinsic RANGE function. */
520 gfc_range_check (gfc_expr *e)
527 rc = gfc_check_integer_range (e->value.integer, e->ts.kind);
531 rc = gfc_check_real_range (e->value.real, e->ts.kind);
532 if (rc == ARITH_UNDERFLOW)
533 mpfr_set_ui (e->value.real, 0, GFC_RND_MODE);
534 if (rc == ARITH_OVERFLOW)
535 mpfr_set_inf (e->value.real, mpfr_sgn (e->value.real));
537 mpfr_set_nan (e->value.real);
541 rc = gfc_check_real_range (e->value.complex.r, e->ts.kind);
542 if (rc == ARITH_UNDERFLOW)
543 mpfr_set_ui (e->value.complex.r, 0, GFC_RND_MODE);
544 if (rc == ARITH_OVERFLOW)
545 mpfr_set_inf (e->value.complex.r, mpfr_sgn (e->value.complex.r));
547 mpfr_set_nan (e->value.complex.r);
549 rc = gfc_check_real_range (e->value.complex.i, e->ts.kind);
550 if (rc == ARITH_UNDERFLOW)
551 mpfr_set_ui (e->value.complex.i, 0, GFC_RND_MODE);
552 if (rc == ARITH_OVERFLOW)
553 mpfr_set_inf (e->value.complex.i, mpfr_sgn (e->value.complex.i));
555 mpfr_set_nan (e->value.complex.i);
559 gfc_internal_error ("gfc_range_check(): Bad type");
566 /* Several of the following routines use the same set of statements to
567 check the validity of the result. Encapsulate the checking here. */
570 check_result (arith rc, gfc_expr *x, gfc_expr *r, gfc_expr **rp)
574 if (val == ARITH_UNDERFLOW)
576 if (gfc_option.warn_underflow)
577 gfc_warning (gfc_arith_error (val), &x->where);
581 if (val == ARITH_ASYMMETRIC)
583 gfc_warning (gfc_arith_error (val), &x->where);
596 /* It may seem silly to have a subroutine that actually computes the
597 unary plus of a constant, but it prevents us from making exceptions
598 in the code elsewhere. */
601 gfc_arith_uplus (gfc_expr *op1, gfc_expr **resultp)
603 *resultp = gfc_copy_expr (op1);
609 gfc_arith_uminus (gfc_expr *op1, gfc_expr **resultp)
614 result = gfc_constant_result (op1->ts.type, op1->ts.kind, &op1->where);
616 switch (op1->ts.type)
619 mpz_neg (result->value.integer, op1->value.integer);
623 mpfr_neg (result->value.real, op1->value.real, GFC_RND_MODE);
627 mpfr_neg (result->value.complex.r, op1->value.complex.r, GFC_RND_MODE);
628 mpfr_neg (result->value.complex.i, op1->value.complex.i, GFC_RND_MODE);
632 gfc_internal_error ("gfc_arith_uminus(): Bad basic type");
635 rc = gfc_range_check (result);
637 return check_result (rc, op1, result, resultp);
642 gfc_arith_plus (gfc_expr *op1, gfc_expr *op2, gfc_expr **resultp)
647 result = gfc_constant_result (op1->ts.type, op1->ts.kind, &op1->where);
649 switch (op1->ts.type)
652 mpz_add (result->value.integer, op1->value.integer, op2->value.integer);
656 mpfr_add (result->value.real, op1->value.real, op2->value.real,
661 mpfr_add (result->value.complex.r, op1->value.complex.r,
662 op2->value.complex.r, GFC_RND_MODE);
664 mpfr_add (result->value.complex.i, op1->value.complex.i,
665 op2->value.complex.i, GFC_RND_MODE);
669 gfc_internal_error ("gfc_arith_plus(): Bad basic type");
672 rc = gfc_range_check (result);
674 return check_result (rc, op1, result, resultp);
679 gfc_arith_minus (gfc_expr *op1, gfc_expr *op2, gfc_expr **resultp)
684 result = gfc_constant_result (op1->ts.type, op1->ts.kind, &op1->where);
686 switch (op1->ts.type)
689 mpz_sub (result->value.integer, op1->value.integer, op2->value.integer);
693 mpfr_sub (result->value.real, op1->value.real, op2->value.real,
698 mpfr_sub (result->value.complex.r, op1->value.complex.r,
699 op2->value.complex.r, GFC_RND_MODE);
701 mpfr_sub (result->value.complex.i, op1->value.complex.i,
702 op2->value.complex.i, GFC_RND_MODE);
706 gfc_internal_error ("gfc_arith_minus(): Bad basic type");
709 rc = gfc_range_check (result);
711 return check_result (rc, op1, result, resultp);
716 gfc_arith_times (gfc_expr *op1, gfc_expr *op2, gfc_expr **resultp)
722 result = gfc_constant_result (op1->ts.type, op1->ts.kind, &op1->where);
724 switch (op1->ts.type)
727 mpz_mul (result->value.integer, op1->value.integer, op2->value.integer);
731 mpfr_mul (result->value.real, op1->value.real, op2->value.real,
736 gfc_set_model (op1->value.complex.r);
740 mpfr_mul (x, op1->value.complex.r, op2->value.complex.r, GFC_RND_MODE);
741 mpfr_mul (y, op1->value.complex.i, op2->value.complex.i, GFC_RND_MODE);
742 mpfr_sub (result->value.complex.r, x, y, GFC_RND_MODE);
744 mpfr_mul (x, op1->value.complex.r, op2->value.complex.i, GFC_RND_MODE);
745 mpfr_mul (y, op1->value.complex.i, op2->value.complex.r, GFC_RND_MODE);
746 mpfr_add (result->value.complex.i, x, y, GFC_RND_MODE);
753 gfc_internal_error ("gfc_arith_times(): Bad basic type");
756 rc = gfc_range_check (result);
758 return check_result (rc, op1, result, resultp);
763 gfc_arith_divide (gfc_expr *op1, gfc_expr *op2, gfc_expr **resultp)
771 result = gfc_constant_result (op1->ts.type, op1->ts.kind, &op1->where);
773 switch (op1->ts.type)
776 if (mpz_sgn (op2->value.integer) == 0)
782 mpz_tdiv_q (result->value.integer, op1->value.integer,
787 if (mpfr_sgn (op2->value.real) == 0 && gfc_option.flag_range_check == 1)
793 mpfr_div (result->value.real, op1->value.real, op2->value.real,
798 if (mpfr_sgn (op2->value.complex.r) == 0
799 && mpfr_sgn (op2->value.complex.i) == 0
800 && gfc_option.flag_range_check == 1)
806 gfc_set_model (op1->value.complex.r);
811 mpfr_mul (x, op2->value.complex.r, op2->value.complex.r, GFC_RND_MODE);
812 mpfr_mul (y, op2->value.complex.i, op2->value.complex.i, GFC_RND_MODE);
813 mpfr_add (div, x, y, GFC_RND_MODE);
815 mpfr_mul (x, op1->value.complex.r, op2->value.complex.r, GFC_RND_MODE);
816 mpfr_mul (y, op1->value.complex.i, op2->value.complex.i, GFC_RND_MODE);
817 mpfr_add (result->value.complex.r, x, y, GFC_RND_MODE);
818 mpfr_div (result->value.complex.r, result->value.complex.r, div,
821 mpfr_mul (x, op1->value.complex.i, op2->value.complex.r, GFC_RND_MODE);
822 mpfr_mul (y, op1->value.complex.r, op2->value.complex.i, GFC_RND_MODE);
823 mpfr_sub (result->value.complex.i, x, y, GFC_RND_MODE);
824 mpfr_div (result->value.complex.i, result->value.complex.i, div,
833 gfc_internal_error ("gfc_arith_divide(): Bad basic type");
837 rc = gfc_range_check (result);
839 return check_result (rc, op1, result, resultp);
843 /* Compute the reciprocal of a complex number (guaranteed nonzero). */
846 complex_reciprocal (gfc_expr *op)
848 mpfr_t mod, a, re, im;
850 gfc_set_model (op->value.complex.r);
856 mpfr_mul (mod, op->value.complex.r, op->value.complex.r, GFC_RND_MODE);
857 mpfr_mul (a, op->value.complex.i, op->value.complex.i, GFC_RND_MODE);
858 mpfr_add (mod, mod, a, GFC_RND_MODE);
860 mpfr_div (re, op->value.complex.r, mod, GFC_RND_MODE);
862 mpfr_neg (im, op->value.complex.i, GFC_RND_MODE);
863 mpfr_div (im, im, mod, GFC_RND_MODE);
865 mpfr_set (op->value.complex.r, re, GFC_RND_MODE);
866 mpfr_set (op->value.complex.i, im, GFC_RND_MODE);
875 /* Raise a complex number to positive power (power > 0).
876 This function will modify the content of power.
878 Use Binary Method, which is not an optimal but a simple and reasonable
879 arithmetic. See section 4.6.3, "Evaluation of Powers" of Donald E. Knuth,
880 "Seminumerical Algorithms", Vol. 2, "The Art of Computer Programming",
881 3rd Edition, 1998. */
884 complex_pow (gfc_expr *result, gfc_expr *base, mpz_t power)
886 mpfr_t x_r, x_i, tmp, re, im;
888 gfc_set_model (base->value.complex.r);
896 mpfr_set_ui (result->value.complex.r, 1, GFC_RND_MODE);
897 mpfr_set_ui (result->value.complex.i, 0, GFC_RND_MODE);
900 mpfr_set (x_r, base->value.complex.r, GFC_RND_MODE);
901 mpfr_set (x_i, base->value.complex.i, GFC_RND_MODE);
903 /* Macro for complex multiplication. We have to take care that
904 res_r/res_i and a_r/a_i can (and will) be the same variable. */
905 #define CMULT(res_r,res_i,a_r,a_i,b_r,b_i) \
906 mpfr_mul (re, a_r, b_r, GFC_RND_MODE), \
907 mpfr_mul (tmp, a_i, b_i, GFC_RND_MODE), \
908 mpfr_sub (re, re, tmp, GFC_RND_MODE), \
910 mpfr_mul (im, a_r, b_i, GFC_RND_MODE), \
911 mpfr_mul (tmp, a_i, b_r, GFC_RND_MODE), \
912 mpfr_add (res_i, im, tmp, GFC_RND_MODE), \
913 mpfr_set (res_r, re, GFC_RND_MODE)
915 #define res_r result->value.complex.r
916 #define res_i result->value.complex.i
918 /* for (; power > 0; x *= x) */
919 for (; mpz_cmp_si (power, 0) > 0; CMULT(x_r,x_i,x_r,x_i,x_r,x_i))
921 /* if (power & 1) res = res * x; */
922 if (mpz_congruent_ui_p (power, 1, 2))
923 CMULT(res_r,res_i,res_r,res_i,x_r,x_i);
926 mpz_fdiv_q_ui (power, power, 2);
941 /* Raise a number to an integer power. */
944 gfc_arith_power (gfc_expr *op1, gfc_expr *op2, gfc_expr **resultp)
950 gcc_assert (op2->expr_type == EXPR_CONSTANT && op2->ts.type == BT_INTEGER);
953 result = gfc_constant_result (op1->ts.type, op1->ts.kind, &op1->where);
954 power_sign = mpz_sgn (op2->value.integer);
958 /* Handle something to the zeroth power. Since we're dealing
959 with integral exponents, there is no ambiguity in the
960 limiting procedure used to determine the value of 0**0. */
961 switch (op1->ts.type)
964 mpz_set_ui (result->value.integer, 1);
968 mpfr_set_ui (result->value.real, 1, GFC_RND_MODE);
972 mpfr_set_ui (result->value.complex.r, 1, GFC_RND_MODE);
973 mpfr_set_ui (result->value.complex.i, 0, GFC_RND_MODE);
977 gfc_internal_error ("gfc_arith_power(): Bad base");
982 switch (op1->ts.type)
988 /* First, we simplify the cases of op1 == 1, 0 or -1. */
989 if (mpz_cmp_si (op1->value.integer, 1) == 0)
992 mpz_set_si (result->value.integer, 1);
994 else if (mpz_cmp_si (op1->value.integer, 0) == 0)
996 /* 0**op2 == 0, if op2 > 0
997 0**op2 overflow, if op2 < 0 ; in that case, we
998 set the result to 0 and return ARITH_DIV0. */
999 mpz_set_si (result->value.integer, 0);
1000 if (mpz_cmp_si (op2->value.integer, 0) < 0)
1003 else if (mpz_cmp_si (op1->value.integer, -1) == 0)
1005 /* (-1)**op2 == (-1)**(mod(op2,2)) */
1006 unsigned int odd = mpz_fdiv_ui (op2->value.integer, 2);
1008 mpz_set_si (result->value.integer, -1);
1010 mpz_set_si (result->value.integer, 1);
1012 /* Then, we take care of op2 < 0. */
1013 else if (mpz_cmp_si (op2->value.integer, 0) < 0)
1015 /* if op2 < 0, op1**op2 == 0 because abs(op1) > 1. */
1016 mpz_set_si (result->value.integer, 0);
1018 else if (gfc_extract_int (op2, &power) != NULL)
1020 /* If op2 doesn't fit in an int, the exponentiation will
1021 overflow, because op2 > 0 and abs(op1) > 1. */
1023 int i = gfc_validate_kind (BT_INTEGER, result->ts.kind, false);
1025 if (gfc_option.flag_range_check)
1026 rc = ARITH_OVERFLOW;
1028 /* Still, we want to give the same value as the processor. */
1030 mpz_add_ui (max, gfc_integer_kinds[i].huge, 1);
1031 mpz_mul_ui (max, max, 2);
1032 mpz_powm (result->value.integer, op1->value.integer,
1033 op2->value.integer, max);
1037 mpz_pow_ui (result->value.integer, op1->value.integer, power);
1042 mpfr_pow_z (result->value.real, op1->value.real, op2->value.integer,
1050 /* Compute op1**abs(op2) */
1052 mpz_abs (apower, op2->value.integer);
1053 complex_pow (result, op1, apower);
1056 /* If (op2 < 0), compute the inverse. */
1058 complex_reciprocal (result);
1069 rc = gfc_range_check (result);
1071 return check_result (rc, op1, result, resultp);
1075 /* Concatenate two string constants. */
1078 gfc_arith_concat (gfc_expr *op1, gfc_expr *op2, gfc_expr **resultp)
1083 result = gfc_constant_result (BT_CHARACTER, gfc_default_character_kind,
1086 len = op1->value.character.length + op2->value.character.length;
1088 result->value.character.string = gfc_getmem (len + 1);
1089 result->value.character.length = len;
1091 memcpy (result->value.character.string, op1->value.character.string,
1092 op1->value.character.length);
1094 memcpy (result->value.character.string + op1->value.character.length,
1095 op2->value.character.string, op2->value.character.length);
1097 result->value.character.string[len] = '\0';
1105 /* Comparison operators. Assumes that the two expression nodes
1106 contain two constants of the same type. */
1109 gfc_compare_expr (gfc_expr *op1, gfc_expr *op2)
1113 switch (op1->ts.type)
1116 rc = mpz_cmp (op1->value.integer, op2->value.integer);
1120 rc = mpfr_cmp (op1->value.real, op2->value.real);
1124 rc = gfc_compare_string (op1, op2);
1128 rc = ((!op1->value.logical && op2->value.logical)
1129 || (op1->value.logical && !op2->value.logical));
1133 gfc_internal_error ("gfc_compare_expr(): Bad basic type");
1140 /* Compare a pair of complex numbers. Naturally, this is only for
1141 equality and nonequality. */
1144 compare_complex (gfc_expr *op1, gfc_expr *op2)
1146 return (mpfr_cmp (op1->value.complex.r, op2->value.complex.r) == 0
1147 && mpfr_cmp (op1->value.complex.i, op2->value.complex.i) == 0);
1151 /* Given two constant strings and the inverse collating sequence, compare the
1152 strings. We return -1 for a < b, 0 for a == b and 1 for a > b.
1153 We use the processor's default collating sequence. */
1156 gfc_compare_string (gfc_expr *a, gfc_expr *b)
1158 int len, alen, blen, i, ac, bc;
1160 alen = a->value.character.length;
1161 blen = b->value.character.length;
1163 len = (alen > blen) ? alen : blen;
1165 for (i = 0; i < len; i++)
1167 /* We cast to unsigned char because default char, if it is signed,
1168 would lead to ac < 0 for string[i] > 127. */
1169 ac = (unsigned char) ((i < alen) ? a->value.character.string[i] : ' ');
1170 bc = (unsigned char) ((i < blen) ? b->value.character.string[i] : ' ');
1178 /* Strings are equal */
1184 /* Specific comparison subroutines. */
1187 gfc_arith_eq (gfc_expr *op1, gfc_expr *op2, gfc_expr **resultp)
1191 result = gfc_constant_result (BT_LOGICAL, gfc_default_logical_kind,
1193 result->value.logical = (op1->ts.type == BT_COMPLEX)
1194 ? compare_complex (op1, op2)
1195 : (gfc_compare_expr (op1, op2) == 0);
1203 gfc_arith_ne (gfc_expr *op1, gfc_expr *op2, gfc_expr **resultp)
1207 result = gfc_constant_result (BT_LOGICAL, gfc_default_logical_kind,
1209 result->value.logical = (op1->ts.type == BT_COMPLEX)
1210 ? !compare_complex (op1, op2)
1211 : (gfc_compare_expr (op1, op2) != 0);
1219 gfc_arith_gt (gfc_expr *op1, gfc_expr *op2, gfc_expr **resultp)
1223 result = gfc_constant_result (BT_LOGICAL, gfc_default_logical_kind,
1225 result->value.logical = (gfc_compare_expr (op1, op2) > 0);
1233 gfc_arith_ge (gfc_expr *op1, gfc_expr *op2, gfc_expr **resultp)
1237 result = gfc_constant_result (BT_LOGICAL, gfc_default_logical_kind,
1239 result->value.logical = (gfc_compare_expr (op1, op2) >= 0);
1247 gfc_arith_lt (gfc_expr *op1, gfc_expr *op2, gfc_expr **resultp)
1251 result = gfc_constant_result (BT_LOGICAL, gfc_default_logical_kind,
1253 result->value.logical = (gfc_compare_expr (op1, op2) < 0);
1261 gfc_arith_le (gfc_expr *op1, gfc_expr *op2, gfc_expr **resultp)
1265 result = gfc_constant_result (BT_LOGICAL, gfc_default_logical_kind,
1267 result->value.logical = (gfc_compare_expr (op1, op2) <= 0);
1275 reduce_unary (arith (*eval) (gfc_expr *, gfc_expr **), gfc_expr *op,
1278 gfc_constructor *c, *head;
1282 if (op->expr_type == EXPR_CONSTANT)
1283 return eval (op, result);
1286 head = gfc_copy_constructor (op->value.constructor);
1288 for (c = head; c; c = c->next)
1290 rc = eval (c->expr, &r);
1294 gfc_replace_expr (c->expr, r);
1298 gfc_free_constructor (head);
1301 r = gfc_get_expr ();
1302 r->expr_type = EXPR_ARRAY;
1303 r->value.constructor = head;
1304 r->shape = gfc_copy_shape (op->shape, op->rank);
1306 r->ts = head->expr->ts;
1307 r->where = op->where;
1318 reduce_binary_ac (arith (*eval) (gfc_expr *, gfc_expr *, gfc_expr **),
1319 gfc_expr *op1, gfc_expr *op2, gfc_expr **result)
1321 gfc_constructor *c, *head;
1325 head = gfc_copy_constructor (op1->value.constructor);
1328 for (c = head; c; c = c->next)
1330 rc = eval (c->expr, op2, &r);
1334 gfc_replace_expr (c->expr, r);
1338 gfc_free_constructor (head);
1341 r = gfc_get_expr ();
1342 r->expr_type = EXPR_ARRAY;
1343 r->value.constructor = head;
1344 r->shape = gfc_copy_shape (op1->shape, op1->rank);
1346 r->ts = head->expr->ts;
1347 r->where = op1->where;
1348 r->rank = op1->rank;
1358 reduce_binary_ca (arith (*eval) (gfc_expr *, gfc_expr *, gfc_expr **),
1359 gfc_expr *op1, gfc_expr *op2, gfc_expr **result)
1361 gfc_constructor *c, *head;
1365 head = gfc_copy_constructor (op2->value.constructor);
1368 for (c = head; c; c = c->next)
1370 rc = eval (op1, c->expr, &r);
1374 gfc_replace_expr (c->expr, r);
1378 gfc_free_constructor (head);
1381 r = gfc_get_expr ();
1382 r->expr_type = EXPR_ARRAY;
1383 r->value.constructor = head;
1384 r->shape = gfc_copy_shape (op2->shape, op2->rank);
1386 r->ts = head->expr->ts;
1387 r->where = op2->where;
1388 r->rank = op2->rank;
1398 reduce_binary_aa (arith (*eval) (gfc_expr *, gfc_expr *, gfc_expr **),
1399 gfc_expr *op1, gfc_expr *op2, gfc_expr **result)
1401 gfc_constructor *c, *d, *head;
1405 head = gfc_copy_constructor (op1->value.constructor);
1408 d = op2->value.constructor;
1410 if (gfc_check_conformance ("Elemental binary operation", op1, op2)
1412 rc = ARITH_INCOMMENSURATE;
1415 for (c = head; c; c = c->next, d = d->next)
1419 rc = ARITH_INCOMMENSURATE;
1423 rc = eval (c->expr, d->expr, &r);
1427 gfc_replace_expr (c->expr, r);
1431 rc = ARITH_INCOMMENSURATE;
1435 gfc_free_constructor (head);
1438 r = gfc_get_expr ();
1439 r->expr_type = EXPR_ARRAY;
1440 r->value.constructor = head;
1441 r->shape = gfc_copy_shape (op1->shape, op1->rank);
1443 r->ts = head->expr->ts;
1444 r->where = op1->where;
1445 r->rank = op1->rank;
1455 reduce_binary (arith (*eval) (gfc_expr *, gfc_expr *, gfc_expr **),
1456 gfc_expr *op1, gfc_expr *op2, gfc_expr **result)
1458 if (op1->expr_type == EXPR_CONSTANT && op2->expr_type == EXPR_CONSTANT)
1459 return eval (op1, op2, result);
1461 if (op1->expr_type == EXPR_CONSTANT && op2->expr_type == EXPR_ARRAY)
1462 return reduce_binary_ca (eval, op1, op2, result);
1464 if (op1->expr_type == EXPR_ARRAY && op2->expr_type == EXPR_CONSTANT)
1465 return reduce_binary_ac (eval, op1, op2, result);
1467 return reduce_binary_aa (eval, op1, op2, result);
1473 arith (*f2)(gfc_expr *, gfc_expr **);
1474 arith (*f3)(gfc_expr *, gfc_expr *, gfc_expr **);
1478 /* High level arithmetic subroutines. These subroutines go into
1479 eval_intrinsic(), which can do one of several things to its
1480 operands. If the operands are incompatible with the intrinsic
1481 operation, we return a node pointing to the operands and hope that
1482 an operator interface is found during resolution.
1484 If the operands are compatible and are constants, then we try doing
1485 the arithmetic. We also handle the cases where either or both
1486 operands are array constructors. */
1489 eval_intrinsic (gfc_intrinsic_op operator,
1490 eval_f eval, gfc_expr *op1, gfc_expr *op2)
1492 gfc_expr temp, *result;
1496 gfc_clear_ts (&temp.ts);
1502 if (op1->ts.type != BT_LOGICAL)
1505 temp.ts.type = BT_LOGICAL;
1506 temp.ts.kind = gfc_default_logical_kind;
1510 /* Logical binary operators */
1513 case INTRINSIC_NEQV:
1515 if (op1->ts.type != BT_LOGICAL || op2->ts.type != BT_LOGICAL)
1518 temp.ts.type = BT_LOGICAL;
1519 temp.ts.kind = gfc_default_logical_kind;
1524 case INTRINSIC_UPLUS:
1525 case INTRINSIC_UMINUS:
1526 if (!gfc_numeric_ts (&op1->ts))
1533 case INTRINSIC_PARENTHESES:
1538 /* Additional restrictions for ordering relations. */
1543 if (op1->ts.type == BT_COMPLEX || op2->ts.type == BT_COMPLEX)
1545 temp.ts.type = BT_LOGICAL;
1546 temp.ts.kind = gfc_default_logical_kind;
1553 if (op1->ts.type == BT_CHARACTER && op2->ts.type == BT_CHARACTER)
1556 temp.ts.type = BT_LOGICAL;
1557 temp.ts.kind = gfc_default_logical_kind;
1562 /* Numeric binary */
1563 case INTRINSIC_PLUS:
1564 case INTRINSIC_MINUS:
1565 case INTRINSIC_TIMES:
1566 case INTRINSIC_DIVIDE:
1567 case INTRINSIC_POWER:
1568 if (!gfc_numeric_ts (&op1->ts) || !gfc_numeric_ts (&op2->ts))
1571 /* Insert any necessary type conversions to make the operands
1574 temp.expr_type = EXPR_OP;
1575 gfc_clear_ts (&temp.ts);
1576 temp.value.op.operator = operator;
1578 temp.value.op.op1 = op1;
1579 temp.value.op.op2 = op2;
1581 gfc_type_convert_binary (&temp);
1583 if (operator == INTRINSIC_EQ || operator == INTRINSIC_NE
1584 || operator == INTRINSIC_GE || operator == INTRINSIC_GT
1585 || operator == INTRINSIC_LE || operator == INTRINSIC_LT)
1587 temp.ts.type = BT_LOGICAL;
1588 temp.ts.kind = gfc_default_logical_kind;
1594 /* Character binary */
1595 case INTRINSIC_CONCAT:
1596 if (op1->ts.type != BT_CHARACTER || op2->ts.type != BT_CHARACTER)
1599 temp.ts.type = BT_CHARACTER;
1600 temp.ts.kind = gfc_default_character_kind;
1604 case INTRINSIC_USER:
1608 gfc_internal_error ("eval_intrinsic(): Bad operator");
1611 /* Try to combine the operators. */
1612 if (operator == INTRINSIC_POWER && op2->ts.type != BT_INTEGER)
1616 || (op1->expr_type != EXPR_CONSTANT
1617 && (op1->expr_type != EXPR_ARRAY
1618 || !gfc_is_constant_expr (op1) || !gfc_expanded_ac (op1))))
1623 || (op2->expr_type != EXPR_CONSTANT
1624 && (op2->expr_type != EXPR_ARRAY
1625 || !gfc_is_constant_expr (op2) || !gfc_expanded_ac (op2)))))
1629 rc = reduce_unary (eval.f2, op1, &result);
1631 rc = reduce_binary (eval.f3, op1, op2, &result);
1634 { /* Something went wrong. */
1635 gfc_error (gfc_arith_error (rc), &op1->where);
1639 gfc_free_expr (op1);
1640 gfc_free_expr (op2);
1644 /* Create a run-time expression. */
1645 result = gfc_get_expr ();
1646 result->ts = temp.ts;
1648 result->expr_type = EXPR_OP;
1649 result->value.op.operator = operator;
1651 result->value.op.op1 = op1;
1652 result->value.op.op2 = op2;
1654 result->where = op1->where;
1660 /* Modify type of expression for zero size array. */
1663 eval_type_intrinsic0 (gfc_intrinsic_op operator, gfc_expr *op)
1666 gfc_internal_error ("eval_type_intrinsic0(): op NULL");
1676 op->ts.type = BT_LOGICAL;
1677 op->ts.kind = gfc_default_logical_kind;
1688 /* Return nonzero if the expression is a zero size array. */
1691 gfc_zero_size_array (gfc_expr *e)
1693 if (e->expr_type != EXPR_ARRAY)
1696 return e->value.constructor == NULL;
1700 /* Reduce a binary expression where at least one of the operands
1701 involves a zero-length array. Returns NULL if neither of the
1702 operands is a zero-length array. */
1705 reduce_binary0 (gfc_expr *op1, gfc_expr *op2)
1707 if (gfc_zero_size_array (op1))
1709 gfc_free_expr (op2);
1713 if (gfc_zero_size_array (op2))
1715 gfc_free_expr (op1);
1724 eval_intrinsic_f2 (gfc_intrinsic_op operator,
1725 arith (*eval) (gfc_expr *, gfc_expr **),
1726 gfc_expr *op1, gfc_expr *op2)
1733 if (gfc_zero_size_array (op1))
1734 return eval_type_intrinsic0 (operator, op1);
1738 result = reduce_binary0 (op1, op2);
1740 return eval_type_intrinsic0 (operator, result);
1744 return eval_intrinsic (operator, f, op1, op2);
1749 eval_intrinsic_f3 (gfc_intrinsic_op operator,
1750 arith (*eval) (gfc_expr *, gfc_expr *, gfc_expr **),
1751 gfc_expr *op1, gfc_expr *op2)
1756 result = reduce_binary0 (op1, op2);
1758 return eval_type_intrinsic0(operator, result);
1761 return eval_intrinsic (operator, f, op1, op2);
1766 gfc_uplus (gfc_expr *op)
1768 return eval_intrinsic_f2 (INTRINSIC_UPLUS, gfc_arith_uplus, op, NULL);
1773 gfc_uminus (gfc_expr *op)
1775 return eval_intrinsic_f2 (INTRINSIC_UMINUS, gfc_arith_uminus, op, NULL);
1780 gfc_add (gfc_expr *op1, gfc_expr *op2)
1782 return eval_intrinsic_f3 (INTRINSIC_PLUS, gfc_arith_plus, op1, op2);
1787 gfc_subtract (gfc_expr *op1, gfc_expr *op2)
1789 return eval_intrinsic_f3 (INTRINSIC_MINUS, gfc_arith_minus, op1, op2);
1794 gfc_multiply (gfc_expr *op1, gfc_expr *op2)
1796 return eval_intrinsic_f3 (INTRINSIC_TIMES, gfc_arith_times, op1, op2);
1801 gfc_divide (gfc_expr *op1, gfc_expr *op2)
1803 return eval_intrinsic_f3 (INTRINSIC_DIVIDE, gfc_arith_divide, op1, op2);
1808 gfc_power (gfc_expr *op1, gfc_expr *op2)
1810 return eval_intrinsic_f3 (INTRINSIC_POWER, gfc_arith_power, op1, op2);
1815 gfc_concat (gfc_expr *op1, gfc_expr *op2)
1817 return eval_intrinsic_f3 (INTRINSIC_CONCAT, gfc_arith_concat, op1, op2);
1822 gfc_and (gfc_expr *op1, gfc_expr *op2)
1824 return eval_intrinsic_f3 (INTRINSIC_AND, gfc_arith_and, op1, op2);
1829 gfc_or (gfc_expr *op1, gfc_expr *op2)
1831 return eval_intrinsic_f3 (INTRINSIC_OR, gfc_arith_or, op1, op2);
1836 gfc_not (gfc_expr *op1)
1838 return eval_intrinsic_f2 (INTRINSIC_NOT, gfc_arith_not, op1, NULL);
1843 gfc_eqv (gfc_expr *op1, gfc_expr *op2)
1845 return eval_intrinsic_f3 (INTRINSIC_EQV, gfc_arith_eqv, op1, op2);
1850 gfc_neqv (gfc_expr *op1, gfc_expr *op2)
1852 return eval_intrinsic_f3 (INTRINSIC_NEQV, gfc_arith_neqv, op1, op2);
1857 gfc_eq (gfc_expr *op1, gfc_expr *op2)
1859 return eval_intrinsic_f3 (INTRINSIC_EQ, gfc_arith_eq, op1, op2);
1864 gfc_ne (gfc_expr *op1, gfc_expr *op2)
1866 return eval_intrinsic_f3 (INTRINSIC_NE, gfc_arith_ne, op1, op2);
1871 gfc_gt (gfc_expr *op1, gfc_expr *op2)
1873 return eval_intrinsic_f3 (INTRINSIC_GT, gfc_arith_gt, op1, op2);
1878 gfc_ge (gfc_expr *op1, gfc_expr *op2)
1880 return eval_intrinsic_f3 (INTRINSIC_GE, gfc_arith_ge, op1, op2);
1885 gfc_lt (gfc_expr *op1, gfc_expr *op2)
1887 return eval_intrinsic_f3 (INTRINSIC_LT, gfc_arith_lt, op1, op2);
1892 gfc_le (gfc_expr *op1, gfc_expr *op2)
1894 return eval_intrinsic_f3 (INTRINSIC_LE, gfc_arith_le, op1, op2);
1898 /* Convert an integer string to an expression node. */
1901 gfc_convert_integer (const char *buffer, int kind, int radix, locus *where)
1906 e = gfc_constant_result (BT_INTEGER, kind, where);
1907 /* A leading plus is allowed, but not by mpz_set_str. */
1908 if (buffer[0] == '+')
1912 mpz_set_str (e->value.integer, t, radix);
1918 /* Convert a real string to an expression node. */
1921 gfc_convert_real (const char *buffer, int kind, locus *where)
1925 e = gfc_constant_result (BT_REAL, kind, where);
1926 mpfr_set_str (e->value.real, buffer, 10, GFC_RND_MODE);
1932 /* Convert a pair of real, constant expression nodes to a single
1933 complex expression node. */
1936 gfc_convert_complex (gfc_expr *real, gfc_expr *imag, int kind)
1940 e = gfc_constant_result (BT_COMPLEX, kind, &real->where);
1941 mpfr_set (e->value.complex.r, real->value.real, GFC_RND_MODE);
1942 mpfr_set (e->value.complex.i, imag->value.real, GFC_RND_MODE);
1948 /******* Simplification of intrinsic functions with constant arguments *****/
1951 /* Deal with an arithmetic error. */
1954 arith_error (arith rc, gfc_typespec *from, gfc_typespec *to, locus *where)
1959 gfc_error ("Arithmetic OK converting %s to %s at %L",
1960 gfc_typename (from), gfc_typename (to), where);
1962 case ARITH_OVERFLOW:
1963 gfc_error ("Arithmetic overflow converting %s to %s at %L",
1964 gfc_typename (from), gfc_typename (to), where);
1966 case ARITH_UNDERFLOW:
1967 gfc_error ("Arithmetic underflow converting %s to %s at %L",
1968 gfc_typename (from), gfc_typename (to), where);
1971 gfc_error ("Arithmetic NaN converting %s to %s at %L",
1972 gfc_typename (from), gfc_typename (to), where);
1975 gfc_error ("Division by zero converting %s to %s at %L",
1976 gfc_typename (from), gfc_typename (to), where);
1978 case ARITH_INCOMMENSURATE:
1979 gfc_error ("Array operands are incommensurate converting %s to %s at %L",
1980 gfc_typename (from), gfc_typename (to), where);
1982 case ARITH_ASYMMETRIC:
1983 gfc_error ("Integer outside symmetric range implied by Standard Fortran"
1984 " converting %s to %s at %L",
1985 gfc_typename (from), gfc_typename (to), where);
1988 gfc_internal_error ("gfc_arith_error(): Bad error code");
1991 /* TODO: Do something about the error, ie, throw exception, return
1996 /* Convert integers to integers. */
1999 gfc_int2int (gfc_expr *src, int kind)
2004 result = gfc_constant_result (BT_INTEGER, kind, &src->where);
2006 mpz_set (result->value.integer, src->value.integer);
2008 if ((rc = gfc_check_integer_range (result->value.integer, kind)) != ARITH_OK)
2010 if (rc == ARITH_ASYMMETRIC)
2012 gfc_warning (gfc_arith_error (rc), &src->where);
2016 arith_error (rc, &src->ts, &result->ts, &src->where);
2017 gfc_free_expr (result);
2026 /* Convert integers to reals. */
2029 gfc_int2real (gfc_expr *src, int kind)
2034 result = gfc_constant_result (BT_REAL, kind, &src->where);
2036 mpfr_set_z (result->value.real, src->value.integer, GFC_RND_MODE);
2038 if ((rc = gfc_check_real_range (result->value.real, kind)) != ARITH_OK)
2040 arith_error (rc, &src->ts, &result->ts, &src->where);
2041 gfc_free_expr (result);
2049 /* Convert default integer to default complex. */
2052 gfc_int2complex (gfc_expr *src, int kind)
2057 result = gfc_constant_result (BT_COMPLEX, kind, &src->where);
2059 mpfr_set_z (result->value.complex.r, src->value.integer, GFC_RND_MODE);
2060 mpfr_set_ui (result->value.complex.i, 0, GFC_RND_MODE);
2062 if ((rc = gfc_check_real_range (result->value.complex.r, kind)) != ARITH_OK)
2064 arith_error (rc, &src->ts, &result->ts, &src->where);
2065 gfc_free_expr (result);
2073 /* Convert default real to default integer. */
2076 gfc_real2int (gfc_expr *src, int kind)
2081 result = gfc_constant_result (BT_INTEGER, kind, &src->where);
2083 gfc_mpfr_to_mpz (result->value.integer, src->value.real);
2085 if ((rc = gfc_check_integer_range (result->value.integer, kind)) != ARITH_OK)
2087 arith_error (rc, &src->ts, &result->ts, &src->where);
2088 gfc_free_expr (result);
2096 /* Convert real to real. */
2099 gfc_real2real (gfc_expr *src, int kind)
2104 result = gfc_constant_result (BT_REAL, kind, &src->where);
2106 mpfr_set (result->value.real, src->value.real, GFC_RND_MODE);
2108 rc = gfc_check_real_range (result->value.real, kind);
2110 if (rc == ARITH_UNDERFLOW)
2112 if (gfc_option.warn_underflow)
2113 gfc_warning (gfc_arith_error (rc), &src->where);
2114 mpfr_set_ui (result->value.real, 0, GFC_RND_MODE);
2116 else if (rc != ARITH_OK)
2118 arith_error (rc, &src->ts, &result->ts, &src->where);
2119 gfc_free_expr (result);
2127 /* Convert real to complex. */
2130 gfc_real2complex (gfc_expr *src, int kind)
2135 result = gfc_constant_result (BT_COMPLEX, kind, &src->where);
2137 mpfr_set (result->value.complex.r, src->value.real, GFC_RND_MODE);
2138 mpfr_set_ui (result->value.complex.i, 0, GFC_RND_MODE);
2140 rc = gfc_check_real_range (result->value.complex.r, kind);
2142 if (rc == ARITH_UNDERFLOW)
2144 if (gfc_option.warn_underflow)
2145 gfc_warning (gfc_arith_error (rc), &src->where);
2146 mpfr_set_ui (result->value.complex.r, 0, GFC_RND_MODE);
2148 else if (rc != ARITH_OK)
2150 arith_error (rc, &src->ts, &result->ts, &src->where);
2151 gfc_free_expr (result);
2159 /* Convert complex to integer. */
2162 gfc_complex2int (gfc_expr *src, int kind)
2167 result = gfc_constant_result (BT_INTEGER, kind, &src->where);
2169 gfc_mpfr_to_mpz (result->value.integer, src->value.complex.r);
2171 if ((rc = gfc_check_integer_range (result->value.integer, kind)) != ARITH_OK)
2173 arith_error (rc, &src->ts, &result->ts, &src->where);
2174 gfc_free_expr (result);
2182 /* Convert complex to real. */
2185 gfc_complex2real (gfc_expr *src, int kind)
2190 result = gfc_constant_result (BT_REAL, kind, &src->where);
2192 mpfr_set (result->value.real, src->value.complex.r, GFC_RND_MODE);
2194 rc = gfc_check_real_range (result->value.real, kind);
2196 if (rc == ARITH_UNDERFLOW)
2198 if (gfc_option.warn_underflow)
2199 gfc_warning (gfc_arith_error (rc), &src->where);
2200 mpfr_set_ui (result->value.real, 0, GFC_RND_MODE);
2204 arith_error (rc, &src->ts, &result->ts, &src->where);
2205 gfc_free_expr (result);
2213 /* Convert complex to complex. */
2216 gfc_complex2complex (gfc_expr *src, int kind)
2221 result = gfc_constant_result (BT_COMPLEX, kind, &src->where);
2223 mpfr_set (result->value.complex.r, src->value.complex.r, GFC_RND_MODE);
2224 mpfr_set (result->value.complex.i, src->value.complex.i, GFC_RND_MODE);
2226 rc = gfc_check_real_range (result->value.complex.r, kind);
2228 if (rc == ARITH_UNDERFLOW)
2230 if (gfc_option.warn_underflow)
2231 gfc_warning (gfc_arith_error (rc), &src->where);
2232 mpfr_set_ui (result->value.complex.r, 0, GFC_RND_MODE);
2234 else if (rc != ARITH_OK)
2236 arith_error (rc, &src->ts, &result->ts, &src->where);
2237 gfc_free_expr (result);
2241 rc = gfc_check_real_range (result->value.complex.i, kind);
2243 if (rc == ARITH_UNDERFLOW)
2245 if (gfc_option.warn_underflow)
2246 gfc_warning (gfc_arith_error (rc), &src->where);
2247 mpfr_set_ui (result->value.complex.i, 0, GFC_RND_MODE);
2249 else if (rc != ARITH_OK)
2251 arith_error (rc, &src->ts, &result->ts, &src->where);
2252 gfc_free_expr (result);
2260 /* Logical kind conversion. */
2263 gfc_log2log (gfc_expr *src, int kind)
2267 result = gfc_constant_result (BT_LOGICAL, kind, &src->where);
2268 result->value.logical = src->value.logical;
2274 /* Convert logical to integer. */
2277 gfc_log2int (gfc_expr *src, int kind)
2281 result = gfc_constant_result (BT_INTEGER, kind, &src->where);
2282 mpz_set_si (result->value.integer, src->value.logical);
2288 /* Convert integer to logical. */
2291 gfc_int2log (gfc_expr *src, int kind)
2295 result = gfc_constant_result (BT_LOGICAL, kind, &src->where);
2296 result->value.logical = (mpz_cmp_si (src->value.integer, 0) != 0);
2302 /* Convert Hollerith to integer. The constant will be padded or truncated. */
2305 gfc_hollerith2int (gfc_expr *src, int kind)
2310 len = src->value.character.length;
2312 result = gfc_get_expr ();
2313 result->expr_type = EXPR_CONSTANT;
2314 result->ts.type = BT_INTEGER;
2315 result->ts.kind = kind;
2316 result->where = src->where;
2321 gfc_warning ("The Hollerith constant at %L is too long to convert to %s",
2322 &src->where, gfc_typename(&result->ts));
2324 result->value.character.string = gfc_getmem (kind + 1);
2325 memcpy (result->value.character.string, src->value.character.string,
2329 memset (&result->value.character.string[len], ' ', kind - len);
2331 result->value.character.string[kind] = '\0'; /* For debugger */
2332 result->value.character.length = kind;
2338 /* Convert Hollerith to real. The constant will be padded or truncated. */
2341 gfc_hollerith2real (gfc_expr *src, int kind)
2346 len = src->value.character.length;
2348 result = gfc_get_expr ();
2349 result->expr_type = EXPR_CONSTANT;
2350 result->ts.type = BT_REAL;
2351 result->ts.kind = kind;
2352 result->where = src->where;
2357 gfc_warning ("The Hollerith constant at %L is too long to convert to %s",
2358 &src->where, gfc_typename(&result->ts));
2360 result->value.character.string = gfc_getmem (kind + 1);
2361 memcpy (result->value.character.string, src->value.character.string,
2365 memset (&result->value.character.string[len], ' ', kind - len);
2367 result->value.character.string[kind] = '\0'; /* For debugger. */
2368 result->value.character.length = kind;
2374 /* Convert Hollerith to complex. The constant will be padded or truncated. */
2377 gfc_hollerith2complex (gfc_expr *src, int kind)
2382 len = src->value.character.length;
2384 result = gfc_get_expr ();
2385 result->expr_type = EXPR_CONSTANT;
2386 result->ts.type = BT_COMPLEX;
2387 result->ts.kind = kind;
2388 result->where = src->where;
2395 gfc_warning ("The Hollerith constant at %L is too long to convert to %s",
2396 &src->where, gfc_typename(&result->ts));
2398 result->value.character.string = gfc_getmem (kind + 1);
2399 memcpy (result->value.character.string, src->value.character.string,
2403 memset (&result->value.character.string[len], ' ', kind - len);
2405 result->value.character.string[kind] = '\0'; /* For debugger */
2406 result->value.character.length = kind;
2412 /* Convert Hollerith to character. */
2415 gfc_hollerith2character (gfc_expr *src, int kind)
2419 result = gfc_copy_expr (src);
2420 result->ts.type = BT_CHARACTER;
2421 result->ts.kind = kind;
2428 /* Convert Hollerith to logical. The constant will be padded or truncated. */
2431 gfc_hollerith2logical (gfc_expr *src, int kind)
2436 len = src->value.character.length;
2438 result = gfc_get_expr ();
2439 result->expr_type = EXPR_CONSTANT;
2440 result->ts.type = BT_LOGICAL;
2441 result->ts.kind = kind;
2442 result->where = src->where;
2447 gfc_warning ("The Hollerith constant at %L is too long to convert to %s",
2448 &src->where, gfc_typename(&result->ts));
2450 result->value.character.string = gfc_getmem (kind + 1);
2451 memcpy (result->value.character.string, src->value.character.string,
2455 memset (&result->value.character.string[len], ' ', kind - len);
2457 result->value.character.string[kind] = '\0'; /* For debugger */
2458 result->value.character.length = kind;
2464 /* Returns an initializer whose value is one higher than the value of the
2465 LAST_INITIALIZER argument. If the argument is NULL, the
2466 initializers value will be set to zero. The initializer's kind
2467 will be set to gfc_c_int_kind.
2469 If -fshort-enums is given, the appropriate kind will be selected
2470 later after all enumerators have been parsed. A warning is issued
2471 here if an initializer exceeds gfc_c_int_kind. */
2474 gfc_enum_initializer (gfc_expr *last_initializer, locus where)
2478 result = gfc_get_expr ();
2479 result->expr_type = EXPR_CONSTANT;
2480 result->ts.type = BT_INTEGER;
2481 result->ts.kind = gfc_c_int_kind;
2482 result->where = where;
2484 mpz_init (result->value.integer);
2486 if (last_initializer != NULL)
2488 mpz_add_ui (result->value.integer, last_initializer->value.integer, 1);
2489 result->where = last_initializer->where;
2491 if (gfc_check_integer_range (result->value.integer,
2492 gfc_c_int_kind) != ARITH_OK)
2494 gfc_error ("Enumerator exceeds the C integer type at %C");
2500 /* Control comes here, if it's the very first enumerator and no
2501 initializer has been given. It will be initialized to zero. */
2502 mpz_set_si (result->value.integer, 0);