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. */
878 complex_pow_ui (gfc_expr *base, int power, gfc_expr *result)
882 gfc_set_model (base->value.complex.r);
887 mpfr_set_ui (result->value.complex.r, 1, GFC_RND_MODE);
888 mpfr_set_ui (result->value.complex.i, 0, GFC_RND_MODE);
890 for (; power > 0; power--)
892 mpfr_mul (re, base->value.complex.r, result->value.complex.r,
894 mpfr_mul (a, base->value.complex.i, result->value.complex.i,
896 mpfr_sub (re, re, a, GFC_RND_MODE);
898 mpfr_mul (im, base->value.complex.r, result->value.complex.i,
900 mpfr_mul (a, base->value.complex.i, result->value.complex.r,
902 mpfr_add (im, im, a, GFC_RND_MODE);
904 mpfr_set (result->value.complex.r, re, GFC_RND_MODE);
905 mpfr_set (result->value.complex.i, im, GFC_RND_MODE);
914 /* Raise a number to an integer power. */
917 gfc_arith_power (gfc_expr *op1, gfc_expr *op2, gfc_expr **resultp)
927 if (gfc_extract_int (op2, &power) != NULL)
928 gfc_internal_error ("gfc_arith_power(): Bad exponent");
930 result = gfc_constant_result (op1->ts.type, op1->ts.kind, &op1->where);
934 /* Handle something to the zeroth power. Since we're dealing
935 with integral exponents, there is no ambiguity in the
936 limiting procedure used to determine the value of 0**0. */
937 switch (op1->ts.type)
940 mpz_set_ui (result->value.integer, 1);
944 mpfr_set_ui (result->value.real, 1, GFC_RND_MODE);
948 mpfr_set_ui (result->value.complex.r, 1, GFC_RND_MODE);
949 mpfr_set_ui (result->value.complex.i, 0, GFC_RND_MODE);
953 gfc_internal_error ("gfc_arith_power(): Bad base");
962 switch (op1->ts.type)
965 mpz_pow_ui (result->value.integer, op1->value.integer, apower);
969 mpz_init_set_ui (unity_z, 1);
970 mpz_tdiv_q (result->value.integer, unity_z,
971 result->value.integer);
977 mpfr_pow_ui (result->value.real, op1->value.real, apower,
982 gfc_set_model (op1->value.real);
984 mpfr_set_ui (unity_f, 1, GFC_RND_MODE);
985 mpfr_div (result->value.real, unity_f, result->value.real,
987 mpfr_clear (unity_f);
992 complex_pow_ui (op1, apower, result);
994 complex_reciprocal (result);
1003 rc = gfc_range_check (result);
1005 return check_result (rc, op1, result, resultp);
1009 /* Concatenate two string constants. */
1012 gfc_arith_concat (gfc_expr *op1, gfc_expr *op2, gfc_expr **resultp)
1017 result = gfc_constant_result (BT_CHARACTER, gfc_default_character_kind,
1020 len = op1->value.character.length + op2->value.character.length;
1022 result->value.character.string = gfc_getmem (len + 1);
1023 result->value.character.length = len;
1025 memcpy (result->value.character.string, op1->value.character.string,
1026 op1->value.character.length);
1028 memcpy (result->value.character.string + op1->value.character.length,
1029 op2->value.character.string, op2->value.character.length);
1031 result->value.character.string[len] = '\0';
1039 /* Comparison operators. Assumes that the two expression nodes
1040 contain two constants of the same type. */
1043 gfc_compare_expr (gfc_expr *op1, gfc_expr *op2)
1047 switch (op1->ts.type)
1050 rc = mpz_cmp (op1->value.integer, op2->value.integer);
1054 rc = mpfr_cmp (op1->value.real, op2->value.real);
1058 rc = gfc_compare_string (op1, op2, NULL);
1062 rc = ((!op1->value.logical && op2->value.logical)
1063 || (op1->value.logical && !op2->value.logical));
1067 gfc_internal_error ("gfc_compare_expr(): Bad basic type");
1074 /* Compare a pair of complex numbers. Naturally, this is only for
1075 equality and nonequality. */
1078 compare_complex (gfc_expr *op1, gfc_expr *op2)
1080 return (mpfr_cmp (op1->value.complex.r, op2->value.complex.r) == 0
1081 && mpfr_cmp (op1->value.complex.i, op2->value.complex.i) == 0);
1085 /* Given two constant strings and the inverse collating sequence, compare the
1086 strings. We return -1 for a < b, 0 for a == b and 1 for a > b. If the
1087 xcoll_table is NULL, we use the processor's default collating sequence. */
1090 gfc_compare_string (gfc_expr *a, gfc_expr *b, const int *xcoll_table)
1092 int len, alen, blen, i, ac, bc;
1094 alen = a->value.character.length;
1095 blen = b->value.character.length;
1097 len = (alen > blen) ? alen : blen;
1099 for (i = 0; i < len; i++)
1101 /* We cast to unsigned char because default char, if it is signed,
1102 would lead to ac < 0 for string[i] > 127. */
1103 ac = (unsigned char) ((i < alen) ? a->value.character.string[i] : ' ');
1104 bc = (unsigned char) ((i < blen) ? b->value.character.string[i] : ' ');
1106 if (xcoll_table != NULL)
1108 ac = xcoll_table[ac];
1109 bc = xcoll_table[bc];
1118 /* Strings are equal */
1124 /* Specific comparison subroutines. */
1127 gfc_arith_eq (gfc_expr *op1, gfc_expr *op2, gfc_expr **resultp)
1131 result = gfc_constant_result (BT_LOGICAL, gfc_default_logical_kind,
1133 result->value.logical = (op1->ts.type == BT_COMPLEX)
1134 ? compare_complex (op1, op2)
1135 : (gfc_compare_expr (op1, op2) == 0);
1143 gfc_arith_ne (gfc_expr *op1, gfc_expr *op2, gfc_expr **resultp)
1147 result = gfc_constant_result (BT_LOGICAL, gfc_default_logical_kind,
1149 result->value.logical = (op1->ts.type == BT_COMPLEX)
1150 ? !compare_complex (op1, op2)
1151 : (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, gfc_expr **result)
1261 gfc_constructor *c, *head;
1265 head = gfc_copy_constructor (op1->value.constructor);
1268 for (c = head; c; c = c->next)
1270 rc = eval (c->expr, op2, &r);
1274 gfc_replace_expr (c->expr, r);
1278 gfc_free_constructor (head);
1281 r = gfc_get_expr ();
1282 r->expr_type = EXPR_ARRAY;
1283 r->value.constructor = head;
1284 r->shape = gfc_copy_shape (op1->shape, op1->rank);
1286 r->ts = head->expr->ts;
1287 r->where = op1->where;
1288 r->rank = op1->rank;
1298 reduce_binary_ca (arith (*eval) (gfc_expr *, gfc_expr *, gfc_expr **),
1299 gfc_expr *op1, gfc_expr *op2, gfc_expr **result)
1301 gfc_constructor *c, *head;
1305 head = gfc_copy_constructor (op2->value.constructor);
1308 for (c = head; c; c = c->next)
1310 rc = eval (op1, c->expr, &r);
1314 gfc_replace_expr (c->expr, r);
1318 gfc_free_constructor (head);
1321 r = gfc_get_expr ();
1322 r->expr_type = EXPR_ARRAY;
1323 r->value.constructor = head;
1324 r->shape = gfc_copy_shape (op2->shape, op2->rank);
1326 r->ts = head->expr->ts;
1327 r->where = op2->where;
1328 r->rank = op2->rank;
1338 reduce_binary_aa (arith (*eval) (gfc_expr *, gfc_expr *, gfc_expr **),
1339 gfc_expr *op1, gfc_expr *op2, gfc_expr **result)
1341 gfc_constructor *c, *d, *head;
1345 head = gfc_copy_constructor (op1->value.constructor);
1348 d = op2->value.constructor;
1350 if (gfc_check_conformance ("Elemental binary operation", op1, op2)
1352 rc = ARITH_INCOMMENSURATE;
1355 for (c = head; c; c = c->next, d = d->next)
1359 rc = ARITH_INCOMMENSURATE;
1363 rc = eval (c->expr, d->expr, &r);
1367 gfc_replace_expr (c->expr, r);
1371 rc = ARITH_INCOMMENSURATE;
1375 gfc_free_constructor (head);
1378 r = gfc_get_expr ();
1379 r->expr_type = EXPR_ARRAY;
1380 r->value.constructor = head;
1381 r->shape = gfc_copy_shape (op1->shape, op1->rank);
1383 r->ts = head->expr->ts;
1384 r->where = op1->where;
1385 r->rank = op1->rank;
1395 reduce_binary (arith (*eval) (gfc_expr *, gfc_expr *, gfc_expr **),
1396 gfc_expr *op1, gfc_expr *op2, gfc_expr **result)
1398 if (op1->expr_type == EXPR_CONSTANT && op2->expr_type == EXPR_CONSTANT)
1399 return eval (op1, op2, result);
1401 if (op1->expr_type == EXPR_CONSTANT && op2->expr_type == EXPR_ARRAY)
1402 return reduce_binary_ca (eval, op1, op2, result);
1404 if (op1->expr_type == EXPR_ARRAY && op2->expr_type == EXPR_CONSTANT)
1405 return reduce_binary_ac (eval, op1, op2, result);
1407 return reduce_binary_aa (eval, op1, op2, result);
1413 arith (*f2)(gfc_expr *, gfc_expr **);
1414 arith (*f3)(gfc_expr *, gfc_expr *, gfc_expr **);
1418 /* High level arithmetic subroutines. These subroutines go into
1419 eval_intrinsic(), which can do one of several things to its
1420 operands. If the operands are incompatible with the intrinsic
1421 operation, we return a node pointing to the operands and hope that
1422 an operator interface is found during resolution.
1424 If the operands are compatible and are constants, then we try doing
1425 the arithmetic. We also handle the cases where either or both
1426 operands are array constructors. */
1429 eval_intrinsic (gfc_intrinsic_op operator,
1430 eval_f eval, gfc_expr *op1, gfc_expr *op2)
1432 gfc_expr temp, *result;
1436 gfc_clear_ts (&temp.ts);
1442 if (op1->ts.type != BT_LOGICAL)
1445 temp.ts.type = BT_LOGICAL;
1446 temp.ts.kind = gfc_default_logical_kind;
1450 /* Logical binary operators */
1453 case INTRINSIC_NEQV:
1455 if (op1->ts.type != BT_LOGICAL || op2->ts.type != BT_LOGICAL)
1458 temp.ts.type = BT_LOGICAL;
1459 temp.ts.kind = gfc_default_logical_kind;
1464 case INTRINSIC_UPLUS:
1465 case INTRINSIC_UMINUS:
1466 if (!gfc_numeric_ts (&op1->ts))
1473 case INTRINSIC_PARENTHESES:
1478 /* Additional restrictions for ordering relations. */
1483 if (op1->ts.type == BT_COMPLEX || op2->ts.type == BT_COMPLEX)
1485 temp.ts.type = BT_LOGICAL;
1486 temp.ts.kind = gfc_default_logical_kind;
1493 if (op1->ts.type == BT_CHARACTER && op2->ts.type == BT_CHARACTER)
1496 temp.ts.type = BT_LOGICAL;
1497 temp.ts.kind = gfc_default_logical_kind;
1502 /* Numeric binary */
1503 case INTRINSIC_PLUS:
1504 case INTRINSIC_MINUS:
1505 case INTRINSIC_TIMES:
1506 case INTRINSIC_DIVIDE:
1507 case INTRINSIC_POWER:
1508 if (!gfc_numeric_ts (&op1->ts) || !gfc_numeric_ts (&op2->ts))
1511 /* Insert any necessary type conversions to make the operands
1514 temp.expr_type = EXPR_OP;
1515 gfc_clear_ts (&temp.ts);
1516 temp.value.op.operator = operator;
1518 temp.value.op.op1 = op1;
1519 temp.value.op.op2 = op2;
1521 gfc_type_convert_binary (&temp);
1523 if (operator == INTRINSIC_EQ || operator == INTRINSIC_NE
1524 || operator == INTRINSIC_GE || operator == INTRINSIC_GT
1525 || operator == INTRINSIC_LE || operator == INTRINSIC_LT)
1527 temp.ts.type = BT_LOGICAL;
1528 temp.ts.kind = gfc_default_logical_kind;
1534 /* Character binary */
1535 case INTRINSIC_CONCAT:
1536 if (op1->ts.type != BT_CHARACTER || op2->ts.type != BT_CHARACTER)
1539 temp.ts.type = BT_CHARACTER;
1540 temp.ts.kind = gfc_default_character_kind;
1544 case INTRINSIC_USER:
1548 gfc_internal_error ("eval_intrinsic(): Bad operator");
1551 /* Try to combine the operators. */
1552 if (operator == INTRINSIC_POWER && op2->ts.type != BT_INTEGER)
1556 || (op1->expr_type != EXPR_CONSTANT
1557 && (op1->expr_type != EXPR_ARRAY
1558 || !gfc_is_constant_expr (op1) || !gfc_expanded_ac (op1))))
1563 || (op2->expr_type != EXPR_CONSTANT
1564 && (op2->expr_type != EXPR_ARRAY
1565 || !gfc_is_constant_expr (op2) || !gfc_expanded_ac (op2)))))
1569 rc = reduce_unary (eval.f2, op1, &result);
1571 rc = reduce_binary (eval.f3, op1, op2, &result);
1574 { /* Something went wrong. */
1575 gfc_error (gfc_arith_error (rc), &op1->where);
1579 gfc_free_expr (op1);
1580 gfc_free_expr (op2);
1584 /* Create a run-time expression. */
1585 result = gfc_get_expr ();
1586 result->ts = temp.ts;
1588 result->expr_type = EXPR_OP;
1589 result->value.op.operator = operator;
1591 result->value.op.op1 = op1;
1592 result->value.op.op2 = op2;
1594 result->where = op1->where;
1600 /* Modify type of expression for zero size array. */
1603 eval_type_intrinsic0 (gfc_intrinsic_op operator, gfc_expr *op)
1606 gfc_internal_error ("eval_type_intrinsic0(): op NULL");
1616 op->ts.type = BT_LOGICAL;
1617 op->ts.kind = gfc_default_logical_kind;
1628 /* Return nonzero if the expression is a zero size array. */
1631 gfc_zero_size_array (gfc_expr *e)
1633 if (e->expr_type != EXPR_ARRAY)
1636 return e->value.constructor == NULL;
1640 /* Reduce a binary expression where at least one of the operands
1641 involves a zero-length array. Returns NULL if neither of the
1642 operands is a zero-length array. */
1645 reduce_binary0 (gfc_expr *op1, gfc_expr *op2)
1647 if (gfc_zero_size_array (op1))
1649 gfc_free_expr (op2);
1653 if (gfc_zero_size_array (op2))
1655 gfc_free_expr (op1);
1664 eval_intrinsic_f2 (gfc_intrinsic_op operator,
1665 arith (*eval) (gfc_expr *, gfc_expr **),
1666 gfc_expr *op1, gfc_expr *op2)
1673 if (gfc_zero_size_array (op1))
1674 return eval_type_intrinsic0 (operator, op1);
1678 result = reduce_binary0 (op1, op2);
1680 return eval_type_intrinsic0 (operator, result);
1684 return eval_intrinsic (operator, f, op1, op2);
1689 eval_intrinsic_f3 (gfc_intrinsic_op operator,
1690 arith (*eval) (gfc_expr *, gfc_expr *, gfc_expr **),
1691 gfc_expr *op1, gfc_expr *op2)
1696 result = reduce_binary0 (op1, op2);
1698 return eval_type_intrinsic0(operator, result);
1701 return eval_intrinsic (operator, f, op1, op2);
1706 gfc_uplus (gfc_expr *op)
1708 return eval_intrinsic_f2 (INTRINSIC_UPLUS, gfc_arith_uplus, op, NULL);
1713 gfc_uminus (gfc_expr *op)
1715 return eval_intrinsic_f2 (INTRINSIC_UMINUS, gfc_arith_uminus, op, NULL);
1720 gfc_add (gfc_expr *op1, gfc_expr *op2)
1722 return eval_intrinsic_f3 (INTRINSIC_PLUS, gfc_arith_plus, op1, op2);
1727 gfc_subtract (gfc_expr *op1, gfc_expr *op2)
1729 return eval_intrinsic_f3 (INTRINSIC_MINUS, gfc_arith_minus, op1, op2);
1734 gfc_multiply (gfc_expr *op1, gfc_expr *op2)
1736 return eval_intrinsic_f3 (INTRINSIC_TIMES, gfc_arith_times, op1, op2);
1741 gfc_divide (gfc_expr *op1, gfc_expr *op2)
1743 return eval_intrinsic_f3 (INTRINSIC_DIVIDE, gfc_arith_divide, op1, op2);
1748 gfc_power (gfc_expr *op1, gfc_expr *op2)
1750 return eval_intrinsic_f3 (INTRINSIC_POWER, gfc_arith_power, op1, op2);
1755 gfc_concat (gfc_expr *op1, gfc_expr *op2)
1757 return eval_intrinsic_f3 (INTRINSIC_CONCAT, gfc_arith_concat, op1, op2);
1762 gfc_and (gfc_expr *op1, gfc_expr *op2)
1764 return eval_intrinsic_f3 (INTRINSIC_AND, gfc_arith_and, op1, op2);
1769 gfc_or (gfc_expr *op1, gfc_expr *op2)
1771 return eval_intrinsic_f3 (INTRINSIC_OR, gfc_arith_or, op1, op2);
1776 gfc_not (gfc_expr *op1)
1778 return eval_intrinsic_f2 (INTRINSIC_NOT, gfc_arith_not, op1, NULL);
1783 gfc_eqv (gfc_expr *op1, gfc_expr *op2)
1785 return eval_intrinsic_f3 (INTRINSIC_EQV, gfc_arith_eqv, op1, op2);
1790 gfc_neqv (gfc_expr *op1, gfc_expr *op2)
1792 return eval_intrinsic_f3 (INTRINSIC_NEQV, gfc_arith_neqv, op1, op2);
1797 gfc_eq (gfc_expr *op1, gfc_expr *op2)
1799 return eval_intrinsic_f3 (INTRINSIC_EQ, gfc_arith_eq, op1, op2);
1804 gfc_ne (gfc_expr *op1, gfc_expr *op2)
1806 return eval_intrinsic_f3 (INTRINSIC_NE, gfc_arith_ne, op1, op2);
1811 gfc_gt (gfc_expr *op1, gfc_expr *op2)
1813 return eval_intrinsic_f3 (INTRINSIC_GT, gfc_arith_gt, op1, op2);
1818 gfc_ge (gfc_expr *op1, gfc_expr *op2)
1820 return eval_intrinsic_f3 (INTRINSIC_GE, gfc_arith_ge, op1, op2);
1825 gfc_lt (gfc_expr *op1, gfc_expr *op2)
1827 return eval_intrinsic_f3 (INTRINSIC_LT, gfc_arith_lt, op1, op2);
1832 gfc_le (gfc_expr *op1, gfc_expr *op2)
1834 return eval_intrinsic_f3 (INTRINSIC_LE, gfc_arith_le, op1, op2);
1838 /* Convert an integer string to an expression node. */
1841 gfc_convert_integer (const char *buffer, int kind, int radix, locus *where)
1846 e = gfc_constant_result (BT_INTEGER, kind, where);
1847 /* A leading plus is allowed, but not by mpz_set_str. */
1848 if (buffer[0] == '+')
1852 mpz_set_str (e->value.integer, t, radix);
1858 /* Convert a real string to an expression node. */
1861 gfc_convert_real (const char *buffer, int kind, locus *where)
1865 e = gfc_constant_result (BT_REAL, kind, where);
1866 mpfr_set_str (e->value.real, buffer, 10, GFC_RND_MODE);
1872 /* Convert a pair of real, constant expression nodes to a single
1873 complex expression node. */
1876 gfc_convert_complex (gfc_expr *real, gfc_expr *imag, int kind)
1880 e = gfc_constant_result (BT_COMPLEX, kind, &real->where);
1881 mpfr_set (e->value.complex.r, real->value.real, GFC_RND_MODE);
1882 mpfr_set (e->value.complex.i, imag->value.real, GFC_RND_MODE);
1888 /******* Simplification of intrinsic functions with constant arguments *****/
1891 /* Deal with an arithmetic error. */
1894 arith_error (arith rc, gfc_typespec *from, gfc_typespec *to, locus *where)
1899 gfc_error ("Arithmetic OK converting %s to %s at %L",
1900 gfc_typename (from), gfc_typename (to), where);
1902 case ARITH_OVERFLOW:
1903 gfc_error ("Arithmetic overflow converting %s to %s at %L",
1904 gfc_typename (from), gfc_typename (to), where);
1906 case ARITH_UNDERFLOW:
1907 gfc_error ("Arithmetic underflow converting %s to %s at %L",
1908 gfc_typename (from), gfc_typename (to), where);
1911 gfc_error ("Arithmetic NaN converting %s to %s at %L",
1912 gfc_typename (from), gfc_typename (to), where);
1915 gfc_error ("Division by zero converting %s to %s at %L",
1916 gfc_typename (from), gfc_typename (to), where);
1918 case ARITH_INCOMMENSURATE:
1919 gfc_error ("Array operands are incommensurate converting %s to %s at %L",
1920 gfc_typename (from), gfc_typename (to), where);
1922 case ARITH_ASYMMETRIC:
1923 gfc_error ("Integer outside symmetric range implied by Standard Fortran"
1924 " converting %s to %s at %L",
1925 gfc_typename (from), gfc_typename (to), where);
1928 gfc_internal_error ("gfc_arith_error(): Bad error code");
1931 /* TODO: Do something about the error, ie, throw exception, return
1936 /* Convert integers to integers. */
1939 gfc_int2int (gfc_expr *src, int kind)
1944 result = gfc_constant_result (BT_INTEGER, kind, &src->where);
1946 mpz_set (result->value.integer, src->value.integer);
1948 if ((rc = gfc_check_integer_range (result->value.integer, kind)) != ARITH_OK)
1950 if (rc == ARITH_ASYMMETRIC)
1952 gfc_warning (gfc_arith_error (rc), &src->where);
1956 arith_error (rc, &src->ts, &result->ts, &src->where);
1957 gfc_free_expr (result);
1966 /* Convert integers to reals. */
1969 gfc_int2real (gfc_expr *src, int kind)
1974 result = gfc_constant_result (BT_REAL, kind, &src->where);
1976 mpfr_set_z (result->value.real, src->value.integer, GFC_RND_MODE);
1978 if ((rc = gfc_check_real_range (result->value.real, kind)) != ARITH_OK)
1980 arith_error (rc, &src->ts, &result->ts, &src->where);
1981 gfc_free_expr (result);
1989 /* Convert default integer to default complex. */
1992 gfc_int2complex (gfc_expr *src, int kind)
1997 result = gfc_constant_result (BT_COMPLEX, kind, &src->where);
1999 mpfr_set_z (result->value.complex.r, src->value.integer, GFC_RND_MODE);
2000 mpfr_set_ui (result->value.complex.i, 0, GFC_RND_MODE);
2002 if ((rc = gfc_check_real_range (result->value.complex.r, kind)) != ARITH_OK)
2004 arith_error (rc, &src->ts, &result->ts, &src->where);
2005 gfc_free_expr (result);
2013 /* Convert default real to default integer. */
2016 gfc_real2int (gfc_expr *src, int kind)
2021 result = gfc_constant_result (BT_INTEGER, kind, &src->where);
2023 gfc_mpfr_to_mpz (result->value.integer, src->value.real);
2025 if ((rc = gfc_check_integer_range (result->value.integer, kind)) != ARITH_OK)
2027 arith_error (rc, &src->ts, &result->ts, &src->where);
2028 gfc_free_expr (result);
2036 /* Convert real to real. */
2039 gfc_real2real (gfc_expr *src, int kind)
2044 result = gfc_constant_result (BT_REAL, kind, &src->where);
2046 mpfr_set (result->value.real, src->value.real, GFC_RND_MODE);
2048 rc = gfc_check_real_range (result->value.real, kind);
2050 if (rc == ARITH_UNDERFLOW)
2052 if (gfc_option.warn_underflow)
2053 gfc_warning (gfc_arith_error (rc), &src->where);
2054 mpfr_set_ui (result->value.real, 0, GFC_RND_MODE);
2056 else if (rc != ARITH_OK)
2058 arith_error (rc, &src->ts, &result->ts, &src->where);
2059 gfc_free_expr (result);
2067 /* Convert real to complex. */
2070 gfc_real2complex (gfc_expr *src, int kind)
2075 result = gfc_constant_result (BT_COMPLEX, kind, &src->where);
2077 mpfr_set (result->value.complex.r, src->value.real, GFC_RND_MODE);
2078 mpfr_set_ui (result->value.complex.i, 0, GFC_RND_MODE);
2080 rc = gfc_check_real_range (result->value.complex.r, kind);
2082 if (rc == ARITH_UNDERFLOW)
2084 if (gfc_option.warn_underflow)
2085 gfc_warning (gfc_arith_error (rc), &src->where);
2086 mpfr_set_ui (result->value.complex.r, 0, GFC_RND_MODE);
2088 else if (rc != ARITH_OK)
2090 arith_error (rc, &src->ts, &result->ts, &src->where);
2091 gfc_free_expr (result);
2099 /* Convert complex to integer. */
2102 gfc_complex2int (gfc_expr *src, int kind)
2107 result = gfc_constant_result (BT_INTEGER, kind, &src->where);
2109 gfc_mpfr_to_mpz (result->value.integer, src->value.complex.r);
2111 if ((rc = gfc_check_integer_range (result->value.integer, kind)) != ARITH_OK)
2113 arith_error (rc, &src->ts, &result->ts, &src->where);
2114 gfc_free_expr (result);
2122 /* Convert complex to real. */
2125 gfc_complex2real (gfc_expr *src, int kind)
2130 result = gfc_constant_result (BT_REAL, kind, &src->where);
2132 mpfr_set (result->value.real, src->value.complex.r, GFC_RND_MODE);
2134 rc = gfc_check_real_range (result->value.real, kind);
2136 if (rc == ARITH_UNDERFLOW)
2138 if (gfc_option.warn_underflow)
2139 gfc_warning (gfc_arith_error (rc), &src->where);
2140 mpfr_set_ui (result->value.real, 0, GFC_RND_MODE);
2144 arith_error (rc, &src->ts, &result->ts, &src->where);
2145 gfc_free_expr (result);
2153 /* Convert complex to complex. */
2156 gfc_complex2complex (gfc_expr *src, int kind)
2161 result = gfc_constant_result (BT_COMPLEX, kind, &src->where);
2163 mpfr_set (result->value.complex.r, src->value.complex.r, GFC_RND_MODE);
2164 mpfr_set (result->value.complex.i, src->value.complex.i, GFC_RND_MODE);
2166 rc = gfc_check_real_range (result->value.complex.r, kind);
2168 if (rc == ARITH_UNDERFLOW)
2170 if (gfc_option.warn_underflow)
2171 gfc_warning (gfc_arith_error (rc), &src->where);
2172 mpfr_set_ui (result->value.complex.r, 0, GFC_RND_MODE);
2174 else if (rc != ARITH_OK)
2176 arith_error (rc, &src->ts, &result->ts, &src->where);
2177 gfc_free_expr (result);
2181 rc = gfc_check_real_range (result->value.complex.i, 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.i, 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);
2200 /* Logical kind conversion. */
2203 gfc_log2log (gfc_expr *src, int kind)
2207 result = gfc_constant_result (BT_LOGICAL, kind, &src->where);
2208 result->value.logical = src->value.logical;
2214 /* Convert logical to integer. */
2217 gfc_log2int (gfc_expr *src, int kind)
2221 result = gfc_constant_result (BT_INTEGER, kind, &src->where);
2222 mpz_set_si (result->value.integer, src->value.logical);
2228 /* Convert integer to logical. */
2231 gfc_int2log (gfc_expr *src, int kind)
2235 result = gfc_constant_result (BT_LOGICAL, kind, &src->where);
2236 result->value.logical = (mpz_cmp_si (src->value.integer, 0) != 0);
2242 /* Convert Hollerith to integer. The constant will be padded or truncated. */
2245 gfc_hollerith2int (gfc_expr *src, int kind)
2250 len = src->value.character.length;
2252 result = gfc_get_expr ();
2253 result->expr_type = EXPR_CONSTANT;
2254 result->ts.type = BT_INTEGER;
2255 result->ts.kind = kind;
2256 result->where = src->where;
2261 gfc_warning ("The Hollerith constant at %L is too long to convert to %s",
2262 &src->where, gfc_typename(&result->ts));
2264 result->value.character.string = gfc_getmem (kind + 1);
2265 memcpy (result->value.character.string, src->value.character.string,
2269 memset (&result->value.character.string[len], ' ', kind - len);
2271 result->value.character.string[kind] = '\0'; /* For debugger */
2272 result->value.character.length = kind;
2278 /* Convert Hollerith to real. The constant will be padded or truncated. */
2281 gfc_hollerith2real (gfc_expr *src, int kind)
2286 len = src->value.character.length;
2288 result = gfc_get_expr ();
2289 result->expr_type = EXPR_CONSTANT;
2290 result->ts.type = BT_REAL;
2291 result->ts.kind = kind;
2292 result->where = src->where;
2297 gfc_warning ("The Hollerith constant at %L is too long to convert to %s",
2298 &src->where, gfc_typename(&result->ts));
2300 result->value.character.string = gfc_getmem (kind + 1);
2301 memcpy (result->value.character.string, src->value.character.string,
2305 memset (&result->value.character.string[len], ' ', kind - len);
2307 result->value.character.string[kind] = '\0'; /* For debugger. */
2308 result->value.character.length = kind;
2314 /* Convert Hollerith to complex. The constant will be padded or truncated. */
2317 gfc_hollerith2complex (gfc_expr *src, int kind)
2322 len = src->value.character.length;
2324 result = gfc_get_expr ();
2325 result->expr_type = EXPR_CONSTANT;
2326 result->ts.type = BT_COMPLEX;
2327 result->ts.kind = kind;
2328 result->where = src->where;
2335 gfc_warning ("The Hollerith constant at %L is too long to convert to %s",
2336 &src->where, gfc_typename(&result->ts));
2338 result->value.character.string = gfc_getmem (kind + 1);
2339 memcpy (result->value.character.string, src->value.character.string,
2343 memset (&result->value.character.string[len], ' ', kind - len);
2345 result->value.character.string[kind] = '\0'; /* For debugger */
2346 result->value.character.length = kind;
2352 /* Convert Hollerith to character. */
2355 gfc_hollerith2character (gfc_expr *src, int kind)
2359 result = gfc_copy_expr (src);
2360 result->ts.type = BT_CHARACTER;
2361 result->ts.kind = kind;
2368 /* Convert Hollerith to logical. The constant will be padded or truncated. */
2371 gfc_hollerith2logical (gfc_expr *src, int kind)
2376 len = src->value.character.length;
2378 result = gfc_get_expr ();
2379 result->expr_type = EXPR_CONSTANT;
2380 result->ts.type = BT_LOGICAL;
2381 result->ts.kind = kind;
2382 result->where = src->where;
2387 gfc_warning ("The Hollerith constant at %L is too long to convert to %s",
2388 &src->where, gfc_typename(&result->ts));
2390 result->value.character.string = gfc_getmem (kind + 1);
2391 memcpy (result->value.character.string, src->value.character.string,
2395 memset (&result->value.character.string[len], ' ', kind - len);
2397 result->value.character.string[kind] = '\0'; /* For debugger */
2398 result->value.character.length = kind;
2404 /* Returns an initializer whose value is one higher than the value of the
2405 LAST_INITIALIZER argument. If the argument is NULL, the
2406 initializers value will be set to zero. The initializer's kind
2407 will be set to gfc_c_int_kind.
2409 If -fshort-enums is given, the appropriate kind will be selected
2410 later after all enumerators have been parsed. A warning is issued
2411 here if an initializer exceeds gfc_c_int_kind. */
2414 gfc_enum_initializer (gfc_expr *last_initializer, locus where)
2418 result = gfc_get_expr ();
2419 result->expr_type = EXPR_CONSTANT;
2420 result->ts.type = BT_INTEGER;
2421 result->ts.kind = gfc_c_int_kind;
2422 result->where = where;
2424 mpz_init (result->value.integer);
2426 if (last_initializer != NULL)
2428 mpz_add_ui (result->value.integer, last_initializer->value.integer, 1);
2429 result->where = last_initializer->where;
2431 if (gfc_check_integer_range (result->value.integer,
2432 gfc_c_int_kind) != ARITH_OK)
2434 gfc_error ("Enumerator exceeds the C integer type at %C");
2440 /* Control comes here, if it's the very first enumerator and no
2441 initializer has been given. It will be initialized to zero. */
2442 mpz_set_si (result->value.integer, 0);