2 Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006
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)
407 ("gfc_constant_result(): locus 'where' cannot be NULL");
409 result = gfc_get_expr ();
411 result->expr_type = EXPR_CONSTANT;
412 result->ts.type = type;
413 result->ts.kind = kind;
414 result->where = *where;
419 mpz_init (result->value.integer);
423 gfc_set_model_kind (kind);
424 mpfr_init (result->value.real);
428 gfc_set_model_kind (kind);
429 mpfr_init (result->value.complex.r);
430 mpfr_init (result->value.complex.i);
441 /* Low-level arithmetic functions. All of these subroutines assume
442 that all operands are of the same type and return an operand of the
443 same type. The other thing about these subroutines is that they
444 can fail in various ways -- overflow, underflow, division by zero,
445 zero raised to the zero, etc. */
448 gfc_arith_not (gfc_expr * op1, gfc_expr ** resultp)
452 result = gfc_constant_result (BT_LOGICAL, op1->ts.kind, &op1->where);
453 result->value.logical = !op1->value.logical;
461 gfc_arith_and (gfc_expr * op1, gfc_expr * op2, gfc_expr ** resultp)
465 result = gfc_constant_result (BT_LOGICAL, gfc_kind_max (op1, op2),
467 result->value.logical = op1->value.logical && op2->value.logical;
475 gfc_arith_or (gfc_expr * op1, gfc_expr * op2, gfc_expr ** resultp)
479 result = gfc_constant_result (BT_LOGICAL, gfc_kind_max (op1, op2),
481 result->value.logical = op1->value.logical || op2->value.logical;
489 gfc_arith_eqv (gfc_expr * op1, gfc_expr * op2, gfc_expr ** resultp)
493 result = gfc_constant_result (BT_LOGICAL, gfc_kind_max (op1, op2),
495 result->value.logical = op1->value.logical == op2->value.logical;
503 gfc_arith_neqv (gfc_expr * op1, gfc_expr * op2, gfc_expr ** resultp)
507 result = gfc_constant_result (BT_LOGICAL, gfc_kind_max (op1, op2),
509 result->value.logical = op1->value.logical != op2->value.logical;
516 /* Make sure a constant numeric expression is within the range for
517 its type and kind. Note that there's also a gfc_check_range(),
518 but that one deals with the intrinsic RANGE function. */
521 gfc_range_check (gfc_expr * e)
528 rc = gfc_check_integer_range (e->value.integer, e->ts.kind);
532 rc = gfc_check_real_range (e->value.real, e->ts.kind);
533 if (rc == ARITH_UNDERFLOW)
534 mpfr_set_ui (e->value.real, 0, GFC_RND_MODE);
535 if (rc == ARITH_OVERFLOW)
536 mpfr_set_inf (e->value.real, mpfr_sgn (e->value.real));
538 mpfr_set_nan (e->value.real);
542 rc = gfc_check_real_range (e->value.complex.r, e->ts.kind);
543 if (rc == ARITH_UNDERFLOW)
544 mpfr_set_ui (e->value.complex.r, 0, GFC_RND_MODE);
545 if (rc == ARITH_OVERFLOW)
546 mpfr_set_inf (e->value.complex.r, mpfr_sgn (e->value.complex.r));
548 mpfr_set_nan (e->value.complex.r);
550 rc = gfc_check_real_range (e->value.complex.i, e->ts.kind);
551 if (rc == ARITH_UNDERFLOW)
552 mpfr_set_ui (e->value.complex.i, 0, GFC_RND_MODE);
553 if (rc == ARITH_OVERFLOW)
554 mpfr_set_inf (e->value.complex.i, mpfr_sgn (e->value.complex.i));
556 mpfr_set_nan (e->value.complex.i);
560 gfc_internal_error ("gfc_range_check(): Bad type");
567 /* Several of the following routines use the same set of statements to
568 check the validity of the result. Encapsulate the checking here. */
571 check_result (arith rc, gfc_expr * x, gfc_expr * r, gfc_expr ** rp)
575 if (val == ARITH_UNDERFLOW)
577 if (gfc_option.warn_underflow)
578 gfc_warning (gfc_arith_error (val), &x->where);
582 if (val == ARITH_ASYMMETRIC)
584 gfc_warning (gfc_arith_error (val), &x->where);
597 /* It may seem silly to have a subroutine that actually computes the
598 unary plus of a constant, but it prevents us from making exceptions
599 in the code elsewhere. */
602 gfc_arith_uplus (gfc_expr * op1, gfc_expr ** resultp)
604 *resultp = gfc_copy_expr (op1);
610 gfc_arith_uminus (gfc_expr * op1, gfc_expr ** resultp)
615 result = gfc_constant_result (op1->ts.type, op1->ts.kind, &op1->where);
617 switch (op1->ts.type)
620 mpz_neg (result->value.integer, op1->value.integer);
624 mpfr_neg (result->value.real, op1->value.real, GFC_RND_MODE);
628 mpfr_neg (result->value.complex.r, op1->value.complex.r, GFC_RND_MODE);
629 mpfr_neg (result->value.complex.i, op1->value.complex.i, GFC_RND_MODE);
633 gfc_internal_error ("gfc_arith_uminus(): Bad basic type");
636 rc = gfc_range_check (result);
638 return check_result (rc, op1, result, resultp);
643 gfc_arith_plus (gfc_expr * op1, gfc_expr * op2, gfc_expr ** resultp)
648 result = gfc_constant_result (op1->ts.type, op1->ts.kind, &op1->where);
650 switch (op1->ts.type)
653 mpz_add (result->value.integer, op1->value.integer, op2->value.integer);
657 mpfr_add (result->value.real, op1->value.real, op2->value.real,
662 mpfr_add (result->value.complex.r, op1->value.complex.r,
663 op2->value.complex.r, GFC_RND_MODE);
665 mpfr_add (result->value.complex.i, op1->value.complex.i,
666 op2->value.complex.i, GFC_RND_MODE);
670 gfc_internal_error ("gfc_arith_plus(): Bad basic type");
673 rc = gfc_range_check (result);
675 return check_result (rc, op1, result, resultp);
680 gfc_arith_minus (gfc_expr * op1, gfc_expr * op2, gfc_expr ** resultp)
685 result = gfc_constant_result (op1->ts.type, op1->ts.kind, &op1->where);
687 switch (op1->ts.type)
690 mpz_sub (result->value.integer, op1->value.integer, op2->value.integer);
694 mpfr_sub (result->value.real, op1->value.real, op2->value.real,
699 mpfr_sub (result->value.complex.r, op1->value.complex.r,
700 op2->value.complex.r, GFC_RND_MODE);
702 mpfr_sub (result->value.complex.i, op1->value.complex.i,
703 op2->value.complex.i, GFC_RND_MODE);
707 gfc_internal_error ("gfc_arith_minus(): Bad basic type");
710 rc = gfc_range_check (result);
712 return check_result (rc, op1, result, resultp);
717 gfc_arith_times (gfc_expr * op1, gfc_expr * op2, gfc_expr ** resultp)
723 result = gfc_constant_result (op1->ts.type, op1->ts.kind, &op1->where);
725 switch (op1->ts.type)
728 mpz_mul (result->value.integer, op1->value.integer, op2->value.integer);
732 mpfr_mul (result->value.real, op1->value.real, op2->value.real,
737 gfc_set_model (op1->value.complex.r);
741 mpfr_mul (x, op1->value.complex.r, op2->value.complex.r, GFC_RND_MODE);
742 mpfr_mul (y, op1->value.complex.i, op2->value.complex.i, GFC_RND_MODE);
743 mpfr_sub (result->value.complex.r, x, y, GFC_RND_MODE);
745 mpfr_mul (x, op1->value.complex.r, op2->value.complex.i, GFC_RND_MODE);
746 mpfr_mul (y, op1->value.complex.i, op2->value.complex.r, GFC_RND_MODE);
747 mpfr_add (result->value.complex.i, x, y, GFC_RND_MODE);
754 gfc_internal_error ("gfc_arith_times(): Bad basic type");
757 rc = gfc_range_check (result);
759 return check_result (rc, op1, result, resultp);
764 gfc_arith_divide (gfc_expr * op1, gfc_expr * op2, gfc_expr ** resultp)
772 result = gfc_constant_result (op1->ts.type, op1->ts.kind, &op1->where);
774 switch (op1->ts.type)
777 if (mpz_sgn (op2->value.integer) == 0)
783 mpz_tdiv_q (result->value.integer, op1->value.integer,
788 if (mpfr_sgn (op2->value.real) == 0
789 && gfc_option.flag_range_check == 1)
795 mpfr_div (result->value.real, op1->value.real, op2->value.real,
800 if (mpfr_sgn (op2->value.complex.r) == 0
801 && mpfr_sgn (op2->value.complex.i) == 0
802 && gfc_option.flag_range_check == 1)
808 gfc_set_model (op1->value.complex.r);
813 mpfr_mul (x, op2->value.complex.r, op2->value.complex.r, GFC_RND_MODE);
814 mpfr_mul (y, op2->value.complex.i, op2->value.complex.i, GFC_RND_MODE);
815 mpfr_add (div, x, y, GFC_RND_MODE);
817 mpfr_mul (x, op1->value.complex.r, op2->value.complex.r, GFC_RND_MODE);
818 mpfr_mul (y, op1->value.complex.i, op2->value.complex.i, GFC_RND_MODE);
819 mpfr_add (result->value.complex.r, x, y, GFC_RND_MODE);
820 mpfr_div (result->value.complex.r, result->value.complex.r, div,
823 mpfr_mul (x, op1->value.complex.i, op2->value.complex.r, GFC_RND_MODE);
824 mpfr_mul (y, op1->value.complex.r, op2->value.complex.i, GFC_RND_MODE);
825 mpfr_sub (result->value.complex.i, x, y, GFC_RND_MODE);
826 mpfr_div (result->value.complex.i, result->value.complex.i, div,
835 gfc_internal_error ("gfc_arith_divide(): Bad basic type");
839 rc = gfc_range_check (result);
841 return check_result (rc, op1, result, resultp);
845 /* Compute the reciprocal of a complex number (guaranteed nonzero). */
848 complex_reciprocal (gfc_expr * op)
850 mpfr_t mod, a, re, im;
852 gfc_set_model (op->value.complex.r);
858 mpfr_mul (mod, op->value.complex.r, op->value.complex.r, GFC_RND_MODE);
859 mpfr_mul (a, op->value.complex.i, op->value.complex.i, GFC_RND_MODE);
860 mpfr_add (mod, mod, a, GFC_RND_MODE);
862 mpfr_div (re, op->value.complex.r, mod, GFC_RND_MODE);
864 mpfr_neg (im, op->value.complex.i, GFC_RND_MODE);
865 mpfr_div (im, im, mod, GFC_RND_MODE);
867 mpfr_set (op->value.complex.r, re, GFC_RND_MODE);
868 mpfr_set (op->value.complex.i, im, GFC_RND_MODE);
877 /* Raise a complex number to positive power. */
880 complex_pow_ui (gfc_expr * base, int power, gfc_expr * result)
884 gfc_set_model (base->value.complex.r);
889 mpfr_set_ui (result->value.complex.r, 1, GFC_RND_MODE);
890 mpfr_set_ui (result->value.complex.i, 0, GFC_RND_MODE);
892 for (; power > 0; power--)
894 mpfr_mul (re, base->value.complex.r, result->value.complex.r,
896 mpfr_mul (a, base->value.complex.i, result->value.complex.i,
898 mpfr_sub (re, re, a, GFC_RND_MODE);
900 mpfr_mul (im, base->value.complex.r, result->value.complex.i,
902 mpfr_mul (a, base->value.complex.i, result->value.complex.r,
904 mpfr_add (im, im, a, GFC_RND_MODE);
906 mpfr_set (result->value.complex.r, re, GFC_RND_MODE);
907 mpfr_set (result->value.complex.i, im, GFC_RND_MODE);
916 /* Raise a number to an integer power. */
919 gfc_arith_power (gfc_expr * op1, gfc_expr * op2, gfc_expr ** resultp)
929 if (gfc_extract_int (op2, &power) != NULL)
930 gfc_internal_error ("gfc_arith_power(): Bad exponent");
932 result = gfc_constant_result (op1->ts.type, op1->ts.kind, &op1->where);
936 /* Handle something to the zeroth power. Since we're dealing
937 with integral exponents, there is no ambiguity in the
938 limiting procedure used to determine the value of 0**0. */
939 switch (op1->ts.type)
942 mpz_set_ui (result->value.integer, 1);
946 mpfr_set_ui (result->value.real, 1, GFC_RND_MODE);
950 mpfr_set_ui (result->value.complex.r, 1, GFC_RND_MODE);
951 mpfr_set_ui (result->value.complex.i, 0, GFC_RND_MODE);
955 gfc_internal_error ("gfc_arith_power(): Bad base");
964 switch (op1->ts.type)
967 mpz_pow_ui (result->value.integer, op1->value.integer, apower);
971 mpz_init_set_ui (unity_z, 1);
972 mpz_tdiv_q (result->value.integer, unity_z,
973 result->value.integer);
979 mpfr_pow_ui (result->value.real, op1->value.real, apower,
984 gfc_set_model (op1->value.real);
986 mpfr_set_ui (unity_f, 1, GFC_RND_MODE);
987 mpfr_div (result->value.real, unity_f, result->value.real,
989 mpfr_clear (unity_f);
994 complex_pow_ui (op1, apower, result);
996 complex_reciprocal (result);
1005 rc = gfc_range_check (result);
1007 return check_result (rc, op1, result, resultp);
1011 /* Concatenate two string constants. */
1014 gfc_arith_concat (gfc_expr * op1, gfc_expr * op2, gfc_expr ** resultp)
1019 result = gfc_constant_result (BT_CHARACTER, gfc_default_character_kind,
1022 len = op1->value.character.length + op2->value.character.length;
1024 result->value.character.string = gfc_getmem (len + 1);
1025 result->value.character.length = len;
1027 memcpy (result->value.character.string, op1->value.character.string,
1028 op1->value.character.length);
1030 memcpy (result->value.character.string + op1->value.character.length,
1031 op2->value.character.string, op2->value.character.length);
1033 result->value.character.string[len] = '\0';
1041 /* Comparison operators. Assumes that the two expression nodes
1042 contain two constants of the same type. */
1045 gfc_compare_expr (gfc_expr * op1, gfc_expr * op2)
1049 switch (op1->ts.type)
1052 rc = mpz_cmp (op1->value.integer, op2->value.integer);
1056 rc = mpfr_cmp (op1->value.real, op2->value.real);
1060 rc = gfc_compare_string (op1, op2, NULL);
1064 rc = ((!op1->value.logical && op2->value.logical)
1065 || (op1->value.logical && !op2->value.logical));
1069 gfc_internal_error ("gfc_compare_expr(): Bad basic type");
1076 /* Compare a pair of complex numbers. Naturally, this is only for
1077 equality and nonequality. */
1080 compare_complex (gfc_expr * op1, gfc_expr * op2)
1082 return (mpfr_cmp (op1->value.complex.r, op2->value.complex.r) == 0
1083 && mpfr_cmp (op1->value.complex.i, op2->value.complex.i) == 0);
1087 /* Given two constant strings and the inverse collating sequence, compare the
1088 strings. We return -1 for a < b, 0 for a == b and 1 for a > b. If the
1089 xcoll_table is NULL, we use the processor's default collating sequence. */
1092 gfc_compare_string (gfc_expr * a, gfc_expr * b, const int * xcoll_table)
1094 int len, alen, blen, i, ac, bc;
1096 alen = a->value.character.length;
1097 blen = b->value.character.length;
1099 len = (alen > blen) ? alen : blen;
1101 for (i = 0; i < len; i++)
1103 /* We cast to unsigned char because default char, if it is signed,
1104 would lead to ac < 0 for string[i] > 127. */
1105 ac = (unsigned char) ((i < alen) ? a->value.character.string[i] : ' ');
1106 bc = (unsigned char) ((i < blen) ? b->value.character.string[i] : ' ');
1108 if (xcoll_table != NULL)
1110 ac = xcoll_table[ac];
1111 bc = xcoll_table[bc];
1120 /* Strings are equal */
1126 /* Specific comparison subroutines. */
1129 gfc_arith_eq (gfc_expr * op1, gfc_expr * op2, gfc_expr ** resultp)
1133 result = gfc_constant_result (BT_LOGICAL, gfc_default_logical_kind,
1135 result->value.logical = (op1->ts.type == BT_COMPLEX) ?
1136 compare_complex (op1, op2) : (gfc_compare_expr (op1, op2) == 0);
1144 gfc_arith_ne (gfc_expr * op1, gfc_expr * op2, gfc_expr ** resultp)
1148 result = gfc_constant_result (BT_LOGICAL, gfc_default_logical_kind,
1150 result->value.logical = (op1->ts.type == BT_COMPLEX) ?
1151 !compare_complex (op1, op2) : (gfc_compare_expr (op1, op2) != 0);
1159 gfc_arith_gt (gfc_expr * op1, gfc_expr * op2, gfc_expr ** resultp)
1163 result = gfc_constant_result (BT_LOGICAL, gfc_default_logical_kind,
1165 result->value.logical = (gfc_compare_expr (op1, op2) > 0);
1173 gfc_arith_ge (gfc_expr * op1, gfc_expr * op2, gfc_expr ** resultp)
1177 result = gfc_constant_result (BT_LOGICAL, gfc_default_logical_kind,
1179 result->value.logical = (gfc_compare_expr (op1, op2) >= 0);
1187 gfc_arith_lt (gfc_expr * op1, gfc_expr * op2, gfc_expr ** resultp)
1191 result = gfc_constant_result (BT_LOGICAL, gfc_default_logical_kind,
1193 result->value.logical = (gfc_compare_expr (op1, op2) < 0);
1201 gfc_arith_le (gfc_expr * op1, gfc_expr * op2, gfc_expr ** resultp)
1205 result = gfc_constant_result (BT_LOGICAL, gfc_default_logical_kind,
1207 result->value.logical = (gfc_compare_expr (op1, op2) <= 0);
1215 reduce_unary (arith (*eval) (gfc_expr *, gfc_expr **), gfc_expr * op,
1218 gfc_constructor *c, *head;
1222 if (op->expr_type == EXPR_CONSTANT)
1223 return eval (op, result);
1226 head = gfc_copy_constructor (op->value.constructor);
1228 for (c = head; c; c = c->next)
1230 rc = eval (c->expr, &r);
1234 gfc_replace_expr (c->expr, r);
1238 gfc_free_constructor (head);
1241 r = gfc_get_expr ();
1242 r->expr_type = EXPR_ARRAY;
1243 r->value.constructor = head;
1244 r->shape = gfc_copy_shape (op->shape, op->rank);
1246 r->ts = head->expr->ts;
1247 r->where = op->where;
1258 reduce_binary_ac (arith (*eval) (gfc_expr *, gfc_expr *, gfc_expr **),
1259 gfc_expr * op1, gfc_expr * op2,
1262 gfc_constructor *c, *head;
1266 head = gfc_copy_constructor (op1->value.constructor);
1269 for (c = head; c; c = c->next)
1271 rc = eval (c->expr, op2, &r);
1275 gfc_replace_expr (c->expr, r);
1279 gfc_free_constructor (head);
1282 r = gfc_get_expr ();
1283 r->expr_type = EXPR_ARRAY;
1284 r->value.constructor = head;
1285 r->shape = gfc_copy_shape (op1->shape, op1->rank);
1287 r->ts = head->expr->ts;
1288 r->where = op1->where;
1289 r->rank = op1->rank;
1299 reduce_binary_ca (arith (*eval) (gfc_expr *, gfc_expr *, gfc_expr **),
1300 gfc_expr * op1, gfc_expr * op2,
1303 gfc_constructor *c, *head;
1307 head = gfc_copy_constructor (op2->value.constructor);
1310 for (c = head; c; c = c->next)
1312 rc = eval (op1, c->expr, &r);
1316 gfc_replace_expr (c->expr, r);
1320 gfc_free_constructor (head);
1323 r = gfc_get_expr ();
1324 r->expr_type = EXPR_ARRAY;
1325 r->value.constructor = head;
1326 r->shape = gfc_copy_shape (op2->shape, op2->rank);
1328 r->ts = head->expr->ts;
1329 r->where = op2->where;
1330 r->rank = op2->rank;
1340 reduce_binary_aa (arith (*eval) (gfc_expr *, gfc_expr *, gfc_expr **),
1341 gfc_expr * op1, gfc_expr * op2,
1344 gfc_constructor *c, *d, *head;
1348 head = gfc_copy_constructor (op1->value.constructor);
1351 d = op2->value.constructor;
1353 if (gfc_check_conformance ("Elemental binary operation", op1, op2)
1355 rc = ARITH_INCOMMENSURATE;
1359 for (c = head; c; c = c->next, d = d->next)
1363 rc = ARITH_INCOMMENSURATE;
1367 rc = eval (c->expr, d->expr, &r);
1371 gfc_replace_expr (c->expr, r);
1375 rc = ARITH_INCOMMENSURATE;
1379 gfc_free_constructor (head);
1382 r = gfc_get_expr ();
1383 r->expr_type = EXPR_ARRAY;
1384 r->value.constructor = head;
1385 r->shape = gfc_copy_shape (op1->shape, op1->rank);
1387 r->ts = head->expr->ts;
1388 r->where = op1->where;
1389 r->rank = op1->rank;
1399 reduce_binary (arith (*eval) (gfc_expr *, gfc_expr *, gfc_expr **),
1400 gfc_expr * op1, gfc_expr * op2,
1403 if (op1->expr_type == EXPR_CONSTANT && op2->expr_type == EXPR_CONSTANT)
1404 return eval (op1, op2, result);
1406 if (op1->expr_type == EXPR_CONSTANT && op2->expr_type == EXPR_ARRAY)
1407 return reduce_binary_ca (eval, op1, op2, result);
1409 if (op1->expr_type == EXPR_ARRAY && op2->expr_type == EXPR_CONSTANT)
1410 return reduce_binary_ac (eval, op1, op2, result);
1412 return reduce_binary_aa (eval, op1, op2, result);
1418 arith (*f2)(gfc_expr *, gfc_expr **);
1419 arith (*f3)(gfc_expr *, gfc_expr *, gfc_expr **);
1423 /* High level arithmetic subroutines. These subroutines go into
1424 eval_intrinsic(), which can do one of several things to its
1425 operands. If the operands are incompatible with the intrinsic
1426 operation, we return a node pointing to the operands and hope that
1427 an operator interface is found during resolution.
1429 If the operands are compatible and are constants, then we try doing
1430 the arithmetic. We also handle the cases where either or both
1431 operands are array constructors. */
1434 eval_intrinsic (gfc_intrinsic_op operator,
1435 eval_f eval, gfc_expr * op1, gfc_expr * op2)
1437 gfc_expr temp, *result;
1441 gfc_clear_ts (&temp.ts);
1447 if (op1->ts.type != BT_LOGICAL)
1450 temp.ts.type = BT_LOGICAL;
1451 temp.ts.kind = gfc_default_logical_kind;
1456 /* Logical binary operators */
1459 case INTRINSIC_NEQV:
1461 if (op1->ts.type != BT_LOGICAL || op2->ts.type != BT_LOGICAL)
1464 temp.ts.type = BT_LOGICAL;
1465 temp.ts.kind = gfc_default_logical_kind;
1471 case INTRINSIC_UPLUS:
1472 case INTRINSIC_UMINUS:
1473 if (!gfc_numeric_ts (&op1->ts))
1481 case INTRINSIC_PARENTHESES:
1487 /* Additional restrictions for ordering relations. */
1492 if (op1->ts.type == BT_COMPLEX || op2->ts.type == BT_COMPLEX)
1494 temp.ts.type = BT_LOGICAL;
1495 temp.ts.kind = gfc_default_logical_kind;
1502 if (op1->ts.type == BT_CHARACTER && op2->ts.type == BT_CHARACTER)
1505 temp.ts.type = BT_LOGICAL;
1506 temp.ts.kind = gfc_default_logical_kind;
1511 /* Numeric binary */
1512 case INTRINSIC_PLUS:
1513 case INTRINSIC_MINUS:
1514 case INTRINSIC_TIMES:
1515 case INTRINSIC_DIVIDE:
1516 case INTRINSIC_POWER:
1517 if (!gfc_numeric_ts (&op1->ts) || !gfc_numeric_ts (&op2->ts))
1520 /* Insert any necessary type conversions to make the operands
1523 temp.expr_type = EXPR_OP;
1524 gfc_clear_ts (&temp.ts);
1525 temp.value.op.operator = operator;
1527 temp.value.op.op1 = op1;
1528 temp.value.op.op2 = op2;
1530 gfc_type_convert_binary (&temp);
1532 if (operator == INTRINSIC_EQ || operator == INTRINSIC_NE
1533 || operator == INTRINSIC_GE || operator == INTRINSIC_GT
1534 || operator == INTRINSIC_LE || operator == INTRINSIC_LT)
1536 temp.ts.type = BT_LOGICAL;
1537 temp.ts.kind = gfc_default_logical_kind;
1543 /* Character binary */
1544 case INTRINSIC_CONCAT:
1545 if (op1->ts.type != BT_CHARACTER || op2->ts.type != BT_CHARACTER)
1548 temp.ts.type = BT_CHARACTER;
1549 temp.ts.kind = gfc_default_character_kind;
1554 case INTRINSIC_USER:
1558 gfc_internal_error ("eval_intrinsic(): Bad operator");
1561 /* Try to combine the operators. */
1562 if (operator == INTRINSIC_POWER && op2->ts.type != BT_INTEGER)
1566 || (op1->expr_type != EXPR_CONSTANT
1567 && (op1->expr_type != EXPR_ARRAY
1568 || !gfc_is_constant_expr (op1)
1569 || !gfc_expanded_ac (op1))))
1574 || (op2->expr_type != EXPR_CONSTANT
1575 && (op2->expr_type != EXPR_ARRAY
1576 || !gfc_is_constant_expr (op2)
1577 || !gfc_expanded_ac (op2)))))
1581 rc = reduce_unary (eval.f2, op1, &result);
1583 rc = reduce_binary (eval.f3, op1, op2, &result);
1586 { /* Something went wrong. */
1587 gfc_error (gfc_arith_error (rc), &op1->where);
1591 gfc_free_expr (op1);
1592 gfc_free_expr (op2);
1596 /* Create a run-time expression. */
1597 result = gfc_get_expr ();
1598 result->ts = temp.ts;
1600 result->expr_type = EXPR_OP;
1601 result->value.op.operator = operator;
1603 result->value.op.op1 = op1;
1604 result->value.op.op2 = op2;
1606 result->where = op1->where;
1612 /* Modify type of expression for zero size array. */
1615 eval_type_intrinsic0 (gfc_intrinsic_op operator, gfc_expr * op)
1618 gfc_internal_error ("eval_type_intrinsic0(): op NULL");
1628 op->ts.type = BT_LOGICAL;
1629 op->ts.kind = gfc_default_logical_kind;
1640 /* Return nonzero if the expression is a zero size array. */
1643 gfc_zero_size_array (gfc_expr * e)
1645 if (e->expr_type != EXPR_ARRAY)
1648 return e->value.constructor == NULL;
1652 /* Reduce a binary expression where at least one of the operands
1653 involves a zero-length array. Returns NULL if neither of the
1654 operands is a zero-length array. */
1657 reduce_binary0 (gfc_expr * op1, gfc_expr * op2)
1659 if (gfc_zero_size_array (op1))
1661 gfc_free_expr (op2);
1665 if (gfc_zero_size_array (op2))
1667 gfc_free_expr (op1);
1676 eval_intrinsic_f2 (gfc_intrinsic_op operator,
1677 arith (*eval) (gfc_expr *, gfc_expr **),
1678 gfc_expr * op1, gfc_expr * op2)
1685 if (gfc_zero_size_array (op1))
1686 return eval_type_intrinsic0 (operator, op1);
1690 result = reduce_binary0 (op1, op2);
1692 return eval_type_intrinsic0 (operator, result);
1696 return eval_intrinsic (operator, f, op1, op2);
1701 eval_intrinsic_f3 (gfc_intrinsic_op operator,
1702 arith (*eval) (gfc_expr *, gfc_expr *, gfc_expr **),
1703 gfc_expr * op1, gfc_expr * op2)
1708 result = reduce_binary0 (op1, op2);
1710 return eval_type_intrinsic0(operator, result);
1713 return eval_intrinsic (operator, f, op1, op2);
1718 gfc_uplus (gfc_expr * op)
1720 return eval_intrinsic_f2 (INTRINSIC_UPLUS, gfc_arith_uplus, op, NULL);
1725 gfc_uminus (gfc_expr * op)
1727 return eval_intrinsic_f2 (INTRINSIC_UMINUS, gfc_arith_uminus, op, NULL);
1732 gfc_add (gfc_expr * op1, gfc_expr * op2)
1734 return eval_intrinsic_f3 (INTRINSIC_PLUS, gfc_arith_plus, op1, op2);
1739 gfc_subtract (gfc_expr * op1, gfc_expr * op2)
1741 return eval_intrinsic_f3 (INTRINSIC_MINUS, gfc_arith_minus, op1, op2);
1746 gfc_multiply (gfc_expr * op1, gfc_expr * op2)
1748 return eval_intrinsic_f3 (INTRINSIC_TIMES, gfc_arith_times, op1, op2);
1753 gfc_divide (gfc_expr * op1, gfc_expr * op2)
1755 return eval_intrinsic_f3 (INTRINSIC_DIVIDE, gfc_arith_divide, op1, op2);
1760 gfc_power (gfc_expr * op1, gfc_expr * op2)
1762 return eval_intrinsic_f3 (INTRINSIC_POWER, gfc_arith_power, op1, op2);
1767 gfc_concat (gfc_expr * op1, gfc_expr * op2)
1769 return eval_intrinsic_f3 (INTRINSIC_CONCAT, gfc_arith_concat, op1, op2);
1774 gfc_and (gfc_expr * op1, gfc_expr * op2)
1776 return eval_intrinsic_f3 (INTRINSIC_AND, gfc_arith_and, op1, op2);
1781 gfc_or (gfc_expr * op1, gfc_expr * op2)
1783 return eval_intrinsic_f3 (INTRINSIC_OR, gfc_arith_or, op1, op2);
1788 gfc_not (gfc_expr * op1)
1790 return eval_intrinsic_f2 (INTRINSIC_NOT, gfc_arith_not, op1, NULL);
1795 gfc_eqv (gfc_expr * op1, gfc_expr * op2)
1797 return eval_intrinsic_f3 (INTRINSIC_EQV, gfc_arith_eqv, op1, op2);
1802 gfc_neqv (gfc_expr * op1, gfc_expr * op2)
1804 return eval_intrinsic_f3 (INTRINSIC_NEQV, gfc_arith_neqv, op1, op2);
1809 gfc_eq (gfc_expr * op1, gfc_expr * op2)
1811 return eval_intrinsic_f3 (INTRINSIC_EQ, gfc_arith_eq, op1, op2);
1816 gfc_ne (gfc_expr * op1, gfc_expr * op2)
1818 return eval_intrinsic_f3 (INTRINSIC_NE, gfc_arith_ne, op1, op2);
1823 gfc_gt (gfc_expr * op1, gfc_expr * op2)
1825 return eval_intrinsic_f3 (INTRINSIC_GT, gfc_arith_gt, op1, op2);
1830 gfc_ge (gfc_expr * op1, gfc_expr * op2)
1832 return eval_intrinsic_f3 (INTRINSIC_GE, gfc_arith_ge, op1, op2);
1837 gfc_lt (gfc_expr * op1, gfc_expr * op2)
1839 return eval_intrinsic_f3 (INTRINSIC_LT, gfc_arith_lt, op1, op2);
1844 gfc_le (gfc_expr * op1, gfc_expr * op2)
1846 return eval_intrinsic_f3 (INTRINSIC_LE, gfc_arith_le, op1, op2);
1850 /* Convert an integer string to an expression node. */
1853 gfc_convert_integer (const char * buffer, int kind, int radix, locus * where)
1858 e = gfc_constant_result (BT_INTEGER, kind, where);
1859 /* A leading plus is allowed, but not by mpz_set_str. */
1860 if (buffer[0] == '+')
1864 mpz_set_str (e->value.integer, t, radix);
1870 /* Convert a real string to an expression node. */
1873 gfc_convert_real (const char * buffer, int kind, locus * where)
1877 e = gfc_constant_result (BT_REAL, kind, where);
1878 mpfr_set_str (e->value.real, buffer, 10, GFC_RND_MODE);
1884 /* Convert a pair of real, constant expression nodes to a single
1885 complex expression node. */
1888 gfc_convert_complex (gfc_expr * real, gfc_expr * imag, int kind)
1892 e = gfc_constant_result (BT_COMPLEX, kind, &real->where);
1893 mpfr_set (e->value.complex.r, real->value.real, GFC_RND_MODE);
1894 mpfr_set (e->value.complex.i, imag->value.real, GFC_RND_MODE);
1900 /******* Simplification of intrinsic functions with constant arguments *****/
1903 /* Deal with an arithmetic error. */
1906 arith_error (arith rc, gfc_typespec * from, gfc_typespec * to, locus * where)
1911 gfc_error ("Arithmetic OK converting %s to %s at %L",
1912 gfc_typename (from), gfc_typename (to), where);
1914 case ARITH_OVERFLOW:
1915 gfc_error ("Arithmetic overflow converting %s to %s at %L",
1916 gfc_typename (from), gfc_typename (to), where);
1918 case ARITH_UNDERFLOW:
1919 gfc_error ("Arithmetic underflow converting %s to %s at %L",
1920 gfc_typename (from), gfc_typename (to), where);
1923 gfc_error ("Arithmetic NaN converting %s to %s at %L",
1924 gfc_typename (from), gfc_typename (to), where);
1927 gfc_error ("Division by zero converting %s to %s at %L",
1928 gfc_typename (from), gfc_typename (to), where);
1930 case ARITH_INCOMMENSURATE:
1931 gfc_error ("Array operands are incommensurate converting %s to %s at %L",
1932 gfc_typename (from), gfc_typename (to), where);
1934 case ARITH_ASYMMETRIC:
1935 gfc_error ("Integer outside symmetric range implied by Standard Fortran"
1936 " converting %s to %s at %L",
1937 gfc_typename (from), gfc_typename (to), where);
1940 gfc_internal_error ("gfc_arith_error(): Bad error code");
1943 /* TODO: Do something about the error, ie, throw exception, return
1948 /* Convert integers to integers. */
1951 gfc_int2int (gfc_expr * src, int kind)
1956 result = gfc_constant_result (BT_INTEGER, kind, &src->where);
1958 mpz_set (result->value.integer, src->value.integer);
1960 if ((rc = gfc_check_integer_range (result->value.integer, kind))
1963 if (rc == ARITH_ASYMMETRIC)
1965 gfc_warning (gfc_arith_error (rc), &src->where);
1969 arith_error (rc, &src->ts, &result->ts, &src->where);
1970 gfc_free_expr (result);
1979 /* Convert integers to reals. */
1982 gfc_int2real (gfc_expr * src, int kind)
1987 result = gfc_constant_result (BT_REAL, kind, &src->where);
1989 mpfr_set_z (result->value.real, src->value.integer, GFC_RND_MODE);
1991 if ((rc = gfc_check_real_range (result->value.real, kind)) != ARITH_OK)
1993 arith_error (rc, &src->ts, &result->ts, &src->where);
1994 gfc_free_expr (result);
2002 /* Convert default integer to default complex. */
2005 gfc_int2complex (gfc_expr * src, int kind)
2010 result = gfc_constant_result (BT_COMPLEX, kind, &src->where);
2012 mpfr_set_z (result->value.complex.r, src->value.integer, GFC_RND_MODE);
2013 mpfr_set_ui (result->value.complex.i, 0, GFC_RND_MODE);
2015 if ((rc = gfc_check_real_range (result->value.complex.r, kind)) != ARITH_OK)
2017 arith_error (rc, &src->ts, &result->ts, &src->where);
2018 gfc_free_expr (result);
2026 /* Convert default real to default integer. */
2029 gfc_real2int (gfc_expr * src, int kind)
2034 result = gfc_constant_result (BT_INTEGER, kind, &src->where);
2036 gfc_mpfr_to_mpz (result->value.integer, src->value.real);
2038 if ((rc = gfc_check_integer_range (result->value.integer, kind))
2041 arith_error (rc, &src->ts, &result->ts, &src->where);
2042 gfc_free_expr (result);
2050 /* Convert real to real. */
2053 gfc_real2real (gfc_expr * src, int kind)
2058 result = gfc_constant_result (BT_REAL, kind, &src->where);
2060 mpfr_set (result->value.real, src->value.real, GFC_RND_MODE);
2062 rc = gfc_check_real_range (result->value.real, kind);
2064 if (rc == ARITH_UNDERFLOW)
2066 if (gfc_option.warn_underflow)
2067 gfc_warning (gfc_arith_error (rc), &src->where);
2068 mpfr_set_ui (result->value.real, 0, GFC_RND_MODE);
2070 else if (rc != ARITH_OK)
2072 arith_error (rc, &src->ts, &result->ts, &src->where);
2073 gfc_free_expr (result);
2081 /* Convert real to complex. */
2084 gfc_real2complex (gfc_expr * src, int kind)
2089 result = gfc_constant_result (BT_COMPLEX, kind, &src->where);
2091 mpfr_set (result->value.complex.r, src->value.real, GFC_RND_MODE);
2092 mpfr_set_ui (result->value.complex.i, 0, GFC_RND_MODE);
2094 rc = gfc_check_real_range (result->value.complex.r, kind);
2096 if (rc == ARITH_UNDERFLOW)
2098 if (gfc_option.warn_underflow)
2099 gfc_warning (gfc_arith_error (rc), &src->where);
2100 mpfr_set_ui (result->value.complex.r, 0, GFC_RND_MODE);
2102 else if (rc != ARITH_OK)
2104 arith_error (rc, &src->ts, &result->ts, &src->where);
2105 gfc_free_expr (result);
2113 /* Convert complex to integer. */
2116 gfc_complex2int (gfc_expr * src, int kind)
2121 result = gfc_constant_result (BT_INTEGER, kind, &src->where);
2123 gfc_mpfr_to_mpz (result->value.integer, src->value.complex.r);
2125 if ((rc = gfc_check_integer_range (result->value.integer, kind))
2128 arith_error (rc, &src->ts, &result->ts, &src->where);
2129 gfc_free_expr (result);
2137 /* Convert complex to real. */
2140 gfc_complex2real (gfc_expr * src, int kind)
2145 result = gfc_constant_result (BT_REAL, kind, &src->where);
2147 mpfr_set (result->value.real, src->value.complex.r, GFC_RND_MODE);
2149 rc = gfc_check_real_range (result->value.real, kind);
2151 if (rc == ARITH_UNDERFLOW)
2153 if (gfc_option.warn_underflow)
2154 gfc_warning (gfc_arith_error (rc), &src->where);
2155 mpfr_set_ui (result->value.real, 0, GFC_RND_MODE);
2159 arith_error (rc, &src->ts, &result->ts, &src->where);
2160 gfc_free_expr (result);
2168 /* Convert complex to complex. */
2171 gfc_complex2complex (gfc_expr * src, int kind)
2176 result = gfc_constant_result (BT_COMPLEX, kind, &src->where);
2178 mpfr_set (result->value.complex.r, src->value.complex.r, GFC_RND_MODE);
2179 mpfr_set (result->value.complex.i, src->value.complex.i, GFC_RND_MODE);
2181 rc = gfc_check_real_range (result->value.complex.r, kind);
2183 if (rc == ARITH_UNDERFLOW)
2185 if (gfc_option.warn_underflow)
2186 gfc_warning (gfc_arith_error (rc), &src->where);
2187 mpfr_set_ui (result->value.complex.r, 0, GFC_RND_MODE);
2189 else if (rc != ARITH_OK)
2191 arith_error (rc, &src->ts, &result->ts, &src->where);
2192 gfc_free_expr (result);
2196 rc = gfc_check_real_range (result->value.complex.i, kind);
2198 if (rc == ARITH_UNDERFLOW)
2200 if (gfc_option.warn_underflow)
2201 gfc_warning (gfc_arith_error (rc), &src->where);
2202 mpfr_set_ui (result->value.complex.i, 0, GFC_RND_MODE);
2204 else if (rc != ARITH_OK)
2206 arith_error (rc, &src->ts, &result->ts, &src->where);
2207 gfc_free_expr (result);
2215 /* Logical kind conversion. */
2218 gfc_log2log (gfc_expr * src, int kind)
2222 result = gfc_constant_result (BT_LOGICAL, kind, &src->where);
2223 result->value.logical = src->value.logical;
2229 /* Convert logical to integer. */
2232 gfc_log2int (gfc_expr *src, int kind)
2236 result = gfc_constant_result (BT_INTEGER, kind, &src->where);
2237 mpz_set_si (result->value.integer, src->value.logical);
2243 /* Convert integer to logical. */
2246 gfc_int2log (gfc_expr *src, int kind)
2250 result = gfc_constant_result (BT_LOGICAL, kind, &src->where);
2251 result->value.logical = (mpz_cmp_si (src->value.integer, 0) != 0);
2257 /* Convert Hollerith to integer. The constant will be padded or truncated. */
2260 gfc_hollerith2int (gfc_expr * src, int kind)
2265 len = src->value.character.length;
2267 result = gfc_get_expr ();
2268 result->expr_type = EXPR_CONSTANT;
2269 result->ts.type = BT_INTEGER;
2270 result->ts.kind = kind;
2271 result->where = src->where;
2276 gfc_warning ("The Hollerith constant at %L is too long to convert to %s",
2277 &src->where, gfc_typename(&result->ts));
2279 result->value.character.string = gfc_getmem (kind + 1);
2280 memcpy (result->value.character.string, src->value.character.string,
2284 memset (&result->value.character.string[len], ' ', kind - len);
2286 result->value.character.string[kind] = '\0'; /* For debugger */
2287 result->value.character.length = kind;
2293 /* Convert Hollerith to real. The constant will be padded or truncated. */
2296 gfc_hollerith2real (gfc_expr * src, int kind)
2301 len = src->value.character.length;
2303 result = gfc_get_expr ();
2304 result->expr_type = EXPR_CONSTANT;
2305 result->ts.type = BT_REAL;
2306 result->ts.kind = kind;
2307 result->where = src->where;
2312 gfc_warning ("The Hollerith constant at %L is too long to convert to %s",
2313 &src->where, gfc_typename(&result->ts));
2315 result->value.character.string = gfc_getmem (kind + 1);
2316 memcpy (result->value.character.string, src->value.character.string,
2320 memset (&result->value.character.string[len], ' ', kind - len);
2322 result->value.character.string[kind] = '\0'; /* For debugger. */
2323 result->value.character.length = kind;
2329 /* Convert Hollerith to complex. The constant will be padded or truncated. */
2332 gfc_hollerith2complex (gfc_expr * src, int kind)
2337 len = src->value.character.length;
2339 result = gfc_get_expr ();
2340 result->expr_type = EXPR_CONSTANT;
2341 result->ts.type = BT_COMPLEX;
2342 result->ts.kind = kind;
2343 result->where = src->where;
2350 gfc_warning ("The Hollerith constant at %L is too long to convert to %s",
2351 &src->where, gfc_typename(&result->ts));
2353 result->value.character.string = gfc_getmem (kind + 1);
2354 memcpy (result->value.character.string, src->value.character.string,
2358 memset (&result->value.character.string[len], ' ', kind - len);
2360 result->value.character.string[kind] = '\0'; /* For debugger */
2361 result->value.character.length = kind;
2367 /* Convert Hollerith to character. */
2370 gfc_hollerith2character (gfc_expr * src, int kind)
2374 result = gfc_copy_expr (src);
2375 result->ts.type = BT_CHARACTER;
2376 result->ts.kind = kind;
2383 /* Convert Hollerith to logical. The constant will be padded or truncated. */
2386 gfc_hollerith2logical (gfc_expr * src, int kind)
2391 len = src->value.character.length;
2393 result = gfc_get_expr ();
2394 result->expr_type = EXPR_CONSTANT;
2395 result->ts.type = BT_LOGICAL;
2396 result->ts.kind = kind;
2397 result->where = src->where;
2402 gfc_warning ("The Hollerith constant at %L is too long to convert to %s",
2403 &src->where, gfc_typename(&result->ts));
2405 result->value.character.string = gfc_getmem (kind + 1);
2406 memcpy (result->value.character.string, src->value.character.string,
2410 memset (&result->value.character.string[len], ' ', kind - len);
2412 result->value.character.string[kind] = '\0'; /* For debugger */
2413 result->value.character.length = kind;
2419 /* Returns an initializer whose value is one higher than the value of the
2420 LAST_INITIALIZER argument. If the argument is NULL, the
2421 initializers value will be set to zero. The initializer's kind
2422 will be set to gfc_c_int_kind.
2424 If -fshort-enums is given, the appropriate kind will be selected
2425 later after all enumerators have been parsed. A warning is issued
2426 here if an initializer exceeds gfc_c_int_kind. */
2429 gfc_enum_initializer (gfc_expr * last_initializer, locus where)
2433 result = gfc_get_expr ();
2434 result->expr_type = EXPR_CONSTANT;
2435 result->ts.type = BT_INTEGER;
2436 result->ts.kind = gfc_c_int_kind;
2437 result->where = where;
2439 mpz_init (result->value.integer);
2441 if (last_initializer != NULL)
2443 mpz_add_ui (result->value.integer, last_initializer->value.integer, 1);
2444 result->where = last_initializer->where;
2446 if (gfc_check_integer_range (result->value.integer,
2447 gfc_c_int_kind) != ARITH_OK)
2449 gfc_error ("Enumerator exceeds the C integer type at %C");
2455 /* Control comes here, if it's the very first enumerator and no
2456 initializer has been given. It will be initialized to zero. */
2457 mpz_set_si (result->value.integer, 0);