1 /* Intrinsic function resolution.
2 Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation,
4 Contributed by Andy Vaught & Katherine Holcomb
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
24 /* Assign name and types to intrinsic procedures. For functions, the
25 first argument to a resolution function is an expression pointer to
26 the original function node and the rest are pointers to the
27 arguments of the function call. For subroutines, a pointer to the
28 code node is passed. The result type and library subroutine name
29 are generally set according to the function arguments. */
33 #include "coretypes.h"
36 #include "intrinsic.h"
39 /* Given printf-like arguments, return a stable version of the result string.
41 We already have a working, optimized string hashing table in the form of
42 the identifier table. Reusing this table is likely not to be wasted,
43 since if the function name makes it to the gimple output of the frontend,
44 we'll have to create the identifier anyway. */
47 gfc_get_string (const char *format, ...)
53 va_start (ap, format);
54 vsnprintf (temp_name, sizeof(temp_name), format, ap);
56 temp_name[sizeof(temp_name)-1] = 0;
58 ident = get_identifier (temp_name);
59 return IDENTIFIER_POINTER (ident);
62 /********************** Resolution functions **********************/
66 gfc_resolve_abs (gfc_expr * f, gfc_expr * a)
69 if (f->ts.type == BT_COMPLEX)
72 f->value.function.name =
73 gfc_get_string ("__abs_%c%d", gfc_type_letter (a->ts.type), a->ts.kind);
78 gfc_resolve_acos (gfc_expr * f, gfc_expr * x)
81 f->value.function.name =
82 gfc_get_string ("__acos_%c%d", gfc_type_letter (x->ts.type), x->ts.kind);
87 gfc_resolve_acosh (gfc_expr * f, gfc_expr * x)
90 f->value.function.name =
91 gfc_get_string ("__acosh_%c%d", gfc_type_letter (x->ts.type), x->ts.kind);
96 gfc_resolve_aimag (gfc_expr * f, gfc_expr * x)
99 f->ts.kind = x->ts.kind;
100 f->value.function.name =
101 gfc_get_string ("__aimag_%c%d", gfc_type_letter (x->ts.type), x->ts.kind);
106 gfc_resolve_aint (gfc_expr * f, gfc_expr * a, gfc_expr * kind)
108 f->ts.type = a->ts.type;
109 f->ts.kind = (kind == NULL) ? a->ts.kind : mpz_get_si (kind->value.integer);
111 /* The resolved name is only used for specific intrinsics where
112 the return kind is the same as the arg kind. */
113 f->value.function.name =
114 gfc_get_string ("__aint_%c%d", gfc_type_letter (a->ts.type), a->ts.kind);
119 gfc_resolve_dint (gfc_expr * f, gfc_expr * a)
121 gfc_resolve_aint (f, a, NULL);
126 gfc_resolve_all (gfc_expr * f, gfc_expr * mask, gfc_expr * dim)
132 gfc_resolve_dim_arg (dim);
133 f->rank = mask->rank - 1;
134 f->shape = gfc_copy_shape_excluding (mask->shape, mask->rank, dim);
137 f->value.function.name =
138 gfc_get_string (PREFIX("all_%c%d"), gfc_type_letter (mask->ts.type),
144 gfc_resolve_anint (gfc_expr * f, gfc_expr * a, gfc_expr * kind)
146 f->ts.type = a->ts.type;
147 f->ts.kind = (kind == NULL) ? a->ts.kind : mpz_get_si (kind->value.integer);
149 /* The resolved name is only used for specific intrinsics where
150 the return kind is the same as the arg kind. */
151 f->value.function.name =
152 gfc_get_string ("__anint_%c%d", gfc_type_letter (a->ts.type), a->ts.kind);
157 gfc_resolve_dnint (gfc_expr * f, gfc_expr * a)
159 gfc_resolve_anint (f, a, NULL);
164 gfc_resolve_any (gfc_expr * f, gfc_expr * mask, gfc_expr * dim)
170 gfc_resolve_dim_arg (dim);
171 f->rank = mask->rank - 1;
172 f->shape = gfc_copy_shape_excluding (mask->shape, mask->rank, dim);
175 f->value.function.name =
176 gfc_get_string (PREFIX("any_%c%d"), gfc_type_letter (mask->ts.type),
182 gfc_resolve_asin (gfc_expr * f, gfc_expr * x)
185 f->value.function.name =
186 gfc_get_string ("__asin_%c%d", gfc_type_letter (x->ts.type), x->ts.kind);
190 gfc_resolve_asinh (gfc_expr * f, gfc_expr * x)
193 f->value.function.name =
194 gfc_get_string ("__asinh_%c%d", gfc_type_letter (x->ts.type), x->ts.kind);
198 gfc_resolve_atan (gfc_expr * f, gfc_expr * x)
201 f->value.function.name =
202 gfc_get_string ("__atan_%c%d", gfc_type_letter (x->ts.type), x->ts.kind);
206 gfc_resolve_atanh (gfc_expr * f, gfc_expr * x)
209 f->value.function.name =
210 gfc_get_string ("__atanh_%c%d", gfc_type_letter (x->ts.type), x->ts.kind);
214 gfc_resolve_atan2 (gfc_expr * f, gfc_expr * x,
215 gfc_expr * y ATTRIBUTE_UNUSED)
218 f->value.function.name =
219 gfc_get_string ("__atan2_%c%d", gfc_type_letter (x->ts.type), x->ts.kind);
223 /* Resolve the BESYN and BESJN intrinsics. */
226 gfc_resolve_besn (gfc_expr * f, gfc_expr * n, gfc_expr * x)
231 if (n->ts.kind != gfc_c_int_kind)
233 ts.type = BT_INTEGER;
234 ts.kind = gfc_c_int_kind;
235 gfc_convert_type (n, &ts, 2);
237 f->value.function.name = gfc_get_string ("<intrinsic>");
242 gfc_resolve_btest (gfc_expr * f, gfc_expr * i, gfc_expr * pos)
244 f->ts.type = BT_LOGICAL;
245 f->ts.kind = gfc_default_logical_kind;
247 f->value.function.name = gfc_get_string ("__btest_%d_%d", i->ts.kind,
253 gfc_resolve_ceiling (gfc_expr * f, gfc_expr * a, gfc_expr * kind)
255 f->ts.type = BT_INTEGER;
256 f->ts.kind = (kind == NULL) ? gfc_default_integer_kind
257 : mpz_get_si (kind->value.integer);
259 f->value.function.name =
260 gfc_get_string ("__ceiling_%d_%c%d", f->ts.kind,
261 gfc_type_letter (a->ts.type), a->ts.kind);
266 gfc_resolve_char (gfc_expr * f, gfc_expr * a, gfc_expr * kind)
268 f->ts.type = BT_CHARACTER;
269 f->ts.kind = (kind == NULL) ? gfc_default_character_kind
270 : mpz_get_si (kind->value.integer);
272 f->value.function.name =
273 gfc_get_string ("__char_%d_%c%d", f->ts.kind,
274 gfc_type_letter (a->ts.type), a->ts.kind);
279 gfc_resolve_chdir (gfc_expr * f, gfc_expr * d ATTRIBUTE_UNUSED)
281 f->ts.type = BT_INTEGER;
282 f->ts.kind = gfc_default_integer_kind;
283 f->value.function.name = gfc_get_string (PREFIX("chdir_i%d"), f->ts.kind);
288 gfc_resolve_chdir_sub (gfc_code * c)
293 if (c->ext.actual->next->expr != NULL)
294 kind = c->ext.actual->next->expr->ts.kind;
296 kind = gfc_default_integer_kind;
298 name = gfc_get_string (PREFIX("chdir_i%d_sub"), kind);
299 c->resolved_sym = gfc_get_intrinsic_sub_symbol (name);
304 gfc_resolve_cmplx (gfc_expr * f, gfc_expr * x, gfc_expr * y, gfc_expr * kind)
306 f->ts.type = BT_COMPLEX;
307 f->ts.kind = (kind == NULL) ? gfc_default_real_kind
308 : mpz_get_si (kind->value.integer);
311 f->value.function.name =
312 gfc_get_string ("__cmplx0_%d_%c%d", f->ts.kind,
313 gfc_type_letter (x->ts.type), x->ts.kind);
315 f->value.function.name =
316 gfc_get_string ("__cmplx1_%d_%c%d_%c%d", f->ts.kind,
317 gfc_type_letter (x->ts.type), x->ts.kind,
318 gfc_type_letter (y->ts.type), y->ts.kind);
322 gfc_resolve_dcmplx (gfc_expr * f, gfc_expr * x, gfc_expr * y)
324 gfc_resolve_cmplx (f, x, y, gfc_int_expr (gfc_default_double_kind));
328 gfc_resolve_conjg (gfc_expr * f, gfc_expr * x)
331 f->value.function.name = gfc_get_string ("__conjg_%d", x->ts.kind);
336 gfc_resolve_cos (gfc_expr * f, gfc_expr * x)
339 f->value.function.name =
340 gfc_get_string ("__cos_%c%d", gfc_type_letter (x->ts.type), x->ts.kind);
345 gfc_resolve_cosh (gfc_expr * f, gfc_expr * x)
348 f->value.function.name =
349 gfc_get_string ("__cosh_%c%d", gfc_type_letter (x->ts.type), x->ts.kind);
354 gfc_resolve_count (gfc_expr * f, gfc_expr * mask, gfc_expr * dim)
356 f->ts.type = BT_INTEGER;
357 f->ts.kind = gfc_default_integer_kind;
361 f->rank = mask->rank - 1;
362 gfc_resolve_dim_arg (dim);
363 f->shape = gfc_copy_shape_excluding (mask->shape, mask->rank, dim);
366 f->value.function.name =
367 gfc_get_string (PREFIX("count_%d_%c%d"), f->ts.kind,
368 gfc_type_letter (mask->ts.type), mask->ts.kind);
373 gfc_resolve_cshift (gfc_expr * f, gfc_expr * array,
380 f->rank = array->rank;
381 f->shape = gfc_copy_shape (array->shape, array->rank);
388 /* Convert shift to at least gfc_default_integer_kind, so we don't need
389 kind=1 and kind=2 versions of the library functions. */
390 if (shift->ts.kind < gfc_default_integer_kind)
393 ts.type = BT_INTEGER;
394 ts.kind = gfc_default_integer_kind;
395 gfc_convert_type_warn (shift, &ts, 2, 0);
400 gfc_resolve_dim_arg (dim);
401 /* Convert dim to shift's kind, so we don't need so many variations. */
402 if (dim->ts.kind != shift->ts.kind)
403 gfc_convert_type_warn (dim, &shift->ts, 2, 0);
405 f->value.function.name =
406 gfc_get_string (PREFIX("cshift%d_%d"), n, shift->ts.kind);
411 gfc_resolve_dble (gfc_expr * f, gfc_expr * a)
413 f->ts.type = BT_REAL;
414 f->ts.kind = gfc_default_double_kind;
415 f->value.function.name =
416 gfc_get_string ("__dble_%c%d", gfc_type_letter (a->ts.type), a->ts.kind);
421 gfc_resolve_dim (gfc_expr * f, gfc_expr * x,
422 gfc_expr * y ATTRIBUTE_UNUSED)
425 f->value.function.name =
426 gfc_get_string ("__dim_%c%d", gfc_type_letter (x->ts.type), x->ts.kind);
431 gfc_resolve_dot_product (gfc_expr * f, gfc_expr * a, gfc_expr * b)
435 if (a->ts.type == BT_LOGICAL && b->ts.type == BT_LOGICAL)
437 f->ts.type = BT_LOGICAL;
438 f->ts.kind = gfc_default_logical_kind;
442 temp.expr_type = EXPR_OP;
443 gfc_clear_ts (&temp.ts);
444 temp.value.op.operator = INTRINSIC_NONE;
445 temp.value.op.op1 = a;
446 temp.value.op.op2 = b;
447 gfc_type_convert_binary (&temp);
451 f->value.function.name =
452 gfc_get_string (PREFIX("dot_product_%c%d"), gfc_type_letter (f->ts.type),
458 gfc_resolve_dprod (gfc_expr * f,
459 gfc_expr * a ATTRIBUTE_UNUSED,
460 gfc_expr * b ATTRIBUTE_UNUSED)
462 f->ts.kind = gfc_default_double_kind;
463 f->ts.type = BT_REAL;
465 f->value.function.name = gfc_get_string ("__dprod_r%d", f->ts.kind);
470 gfc_resolve_eoshift (gfc_expr * f, gfc_expr * array,
478 f->rank = array->rank;
479 f->shape = gfc_copy_shape (array->shape, array->rank);
484 if (boundary && boundary->rank > 0)
487 /* Convert shift to at least gfc_default_integer_kind, so we don't need
488 kind=1 and kind=2 versions of the library functions. */
489 if (shift->ts.kind < gfc_default_integer_kind)
492 ts.type = BT_INTEGER;
493 ts.kind = gfc_default_integer_kind;
494 gfc_convert_type_warn (shift, &ts, 2, 0);
499 gfc_resolve_dim_arg (dim);
500 /* Convert dim to shift's kind, so we don't need so many variations. */
501 if (dim->ts.kind != shift->ts.kind)
502 gfc_convert_type_warn (dim, &shift->ts, 2, 0);
505 f->value.function.name =
506 gfc_get_string (PREFIX("eoshift%d_%d"), n, shift->ts.kind);
511 gfc_resolve_exp (gfc_expr * f, gfc_expr * x)
514 f->value.function.name =
515 gfc_get_string ("__exp_%c%d", gfc_type_letter (x->ts.type), x->ts.kind);
520 gfc_resolve_exponent (gfc_expr * f, gfc_expr * x)
522 f->ts.type = BT_INTEGER;
523 f->ts.kind = gfc_default_integer_kind;
525 f->value.function.name = gfc_get_string ("__exponent_%d", x->ts.kind);
530 gfc_resolve_floor (gfc_expr * f, gfc_expr * a, gfc_expr * kind)
532 f->ts.type = BT_INTEGER;
533 f->ts.kind = (kind == NULL) ? gfc_default_integer_kind
534 : mpz_get_si (kind->value.integer);
536 f->value.function.name =
537 gfc_get_string ("__floor%d_%c%d", f->ts.kind,
538 gfc_type_letter (a->ts.type), a->ts.kind);
543 gfc_resolve_fnum (gfc_expr * f, gfc_expr * n)
545 f->ts.type = BT_INTEGER;
546 f->ts.kind = gfc_default_integer_kind;
547 if (n->ts.kind != f->ts.kind)
548 gfc_convert_type (n, &f->ts, 2);
549 f->value.function.name = gfc_get_string (PREFIX("fnum_i%d"), f->ts.kind);
554 gfc_resolve_fraction (gfc_expr * f, gfc_expr * x)
557 f->value.function.name = gfc_get_string ("__fraction_%d", x->ts.kind);
561 /* Resolve single-argument g77 math intrinsics, eg BESY0, ERF. */
564 gfc_resolve_g77_math1 (gfc_expr * f, gfc_expr * x)
567 f->value.function.name = gfc_get_string ("<intrinsic>");
572 gfc_resolve_getcwd (gfc_expr * f, gfc_expr * n ATTRIBUTE_UNUSED)
574 f->ts.type = BT_INTEGER;
576 f->value.function.name = gfc_get_string (PREFIX("getcwd"));
581 gfc_resolve_getgid (gfc_expr * f)
583 f->ts.type = BT_INTEGER;
585 f->value.function.name = gfc_get_string (PREFIX("getgid"));
590 gfc_resolve_getpid (gfc_expr * f)
592 f->ts.type = BT_INTEGER;
594 f->value.function.name = gfc_get_string (PREFIX("getpid"));
599 gfc_resolve_getuid (gfc_expr * f)
601 f->ts.type = BT_INTEGER;
603 f->value.function.name = gfc_get_string (PREFIX("getuid"));
607 gfc_resolve_hostnm (gfc_expr * f, gfc_expr * n ATTRIBUTE_UNUSED)
609 f->ts.type = BT_INTEGER;
611 f->value.function.name = gfc_get_string (PREFIX ("hostnm"));
615 gfc_resolve_iand (gfc_expr * f, gfc_expr * i, gfc_expr * j)
617 /* If the kind of i and j are different, then g77 cross-promoted the
618 kinds to the largest value. The Fortran 95 standard requires the
620 if (i->ts.kind != j->ts.kind)
622 if (i->ts.kind == gfc_kind_max (i,j))
623 gfc_convert_type(j, &i->ts, 2);
625 gfc_convert_type(i, &j->ts, 2);
629 f->value.function.name = gfc_get_string ("__iand_%d", i->ts.kind);
634 gfc_resolve_ibclr (gfc_expr * f, gfc_expr * i, gfc_expr * pos ATTRIBUTE_UNUSED)
637 f->value.function.name = gfc_get_string ("__ibclr_%d", i->ts.kind);
642 gfc_resolve_ibits (gfc_expr * f, gfc_expr * i,
643 gfc_expr * pos ATTRIBUTE_UNUSED,
644 gfc_expr * len ATTRIBUTE_UNUSED)
647 f->value.function.name = gfc_get_string ("__ibits_%d", i->ts.kind);
652 gfc_resolve_ibset (gfc_expr * f, gfc_expr * i,
653 gfc_expr * pos ATTRIBUTE_UNUSED)
656 f->value.function.name = gfc_get_string ("__ibset_%d", i->ts.kind);
661 gfc_resolve_ichar (gfc_expr * f, gfc_expr * c)
663 f->ts.type = BT_INTEGER;
664 f->ts.kind = gfc_default_integer_kind;
666 f->value.function.name = gfc_get_string ("__ichar_%d", c->ts.kind);
671 gfc_resolve_idnint (gfc_expr * f, gfc_expr * a)
673 gfc_resolve_nint (f, a, NULL);
678 gfc_resolve_ierrno (gfc_expr * f)
680 f->ts.type = BT_INTEGER;
681 f->ts.kind = gfc_default_integer_kind;
682 f->value.function.name = gfc_get_string (PREFIX("ierrno_i%d"), f->ts.kind);
687 gfc_resolve_ieor (gfc_expr * f, gfc_expr * i, gfc_expr * j)
689 /* If the kind of i and j are different, then g77 cross-promoted the
690 kinds to the largest value. The Fortran 95 standard requires the
692 if (i->ts.kind != j->ts.kind)
694 if (i->ts.kind == gfc_kind_max (i,j))
695 gfc_convert_type(j, &i->ts, 2);
697 gfc_convert_type(i, &j->ts, 2);
701 f->value.function.name = gfc_get_string ("__ieor_%d", i->ts.kind);
706 gfc_resolve_ior (gfc_expr * f, gfc_expr * i, gfc_expr * j)
708 /* If the kind of i and j are different, then g77 cross-promoted the
709 kinds to the largest value. The Fortran 95 standard requires the
711 if (i->ts.kind != j->ts.kind)
713 if (i->ts.kind == gfc_kind_max (i,j))
714 gfc_convert_type(j, &i->ts, 2);
716 gfc_convert_type(i, &j->ts, 2);
720 f->value.function.name = gfc_get_string ("__ior_%d", i->ts.kind);
725 gfc_resolve_int (gfc_expr * f, gfc_expr * a, gfc_expr * kind)
727 f->ts.type = BT_INTEGER;
728 f->ts.kind = (kind == NULL) ? gfc_default_integer_kind
729 : mpz_get_si (kind->value.integer);
731 f->value.function.name =
732 gfc_get_string ("__int_%d_%c%d", f->ts.kind, gfc_type_letter (a->ts.type),
738 gfc_resolve_isatty (gfc_expr * f, gfc_expr * u)
742 f->ts.type = BT_LOGICAL;
743 f->ts.kind = gfc_default_integer_kind;
744 if (u->ts.kind != gfc_c_int_kind)
746 ts.type = BT_INTEGER;
747 ts.kind = gfc_c_int_kind;
750 gfc_convert_type (u, &ts, 2);
753 f->value.function.name = gfc_get_string (PREFIX("isatty_l%d"), f->ts.kind);
758 gfc_resolve_ishft (gfc_expr * f, gfc_expr * i, gfc_expr * shift)
761 f->value.function.name =
762 gfc_get_string ("__ishft_%d_%d", i->ts.kind, shift->ts.kind);
767 gfc_resolve_ishftc (gfc_expr * f, gfc_expr * i, gfc_expr * shift,
772 s_kind = (size == NULL) ? gfc_default_integer_kind : shift->ts.kind;
775 f->value.function.name =
776 gfc_get_string ("__ishftc_%d_%d_%d", i->ts.kind, shift->ts.kind, s_kind);
781 gfc_resolve_kill (gfc_expr * f, ATTRIBUTE_UNUSED gfc_expr * p,
782 ATTRIBUTE_UNUSED gfc_expr * s)
784 f->ts.type = BT_INTEGER;
785 f->ts.kind = gfc_default_integer_kind;
787 f->value.function.name = gfc_get_string (PREFIX("kill_i%d"), f->ts.kind);
792 gfc_resolve_lbound (gfc_expr * f, gfc_expr * array,
795 static char lbound[] = "__lbound";
797 f->ts.type = BT_INTEGER;
798 f->ts.kind = gfc_default_integer_kind;
803 f->shape = gfc_get_shape (1);
804 mpz_init_set_ui (f->shape[0], array->rank);
807 f->value.function.name = lbound;
812 gfc_resolve_len (gfc_expr * f, gfc_expr * string)
814 f->ts.type = BT_INTEGER;
815 f->ts.kind = gfc_default_integer_kind;
816 f->value.function.name = gfc_get_string ("__len_%d", string->ts.kind);
821 gfc_resolve_len_trim (gfc_expr * f, gfc_expr * string)
823 f->ts.type = BT_INTEGER;
824 f->ts.kind = gfc_default_integer_kind;
825 f->value.function.name = gfc_get_string ("__len_trim%d", string->ts.kind);
830 gfc_resolve_link (gfc_expr * f, gfc_expr * p1 ATTRIBUTE_UNUSED,
831 gfc_expr * p2 ATTRIBUTE_UNUSED)
833 f->ts.type = BT_INTEGER;
834 f->ts.kind = gfc_default_integer_kind;
835 f->value.function.name = gfc_get_string (PREFIX("link_i%d"), f->ts.kind);
840 gfc_resolve_log (gfc_expr * f, gfc_expr * x)
843 f->value.function.name =
844 gfc_get_string ("__log_%c%d", gfc_type_letter (x->ts.type), x->ts.kind);
849 gfc_resolve_log10 (gfc_expr * f, gfc_expr * x)
852 f->value.function.name =
853 gfc_get_string ("__log10_%c%d", gfc_type_letter (x->ts.type), x->ts.kind);
858 gfc_resolve_logical (gfc_expr * f, gfc_expr * a, gfc_expr * kind)
860 f->ts.type = BT_LOGICAL;
861 f->ts.kind = (kind == NULL) ? gfc_default_logical_kind
862 : mpz_get_si (kind->value.integer);
865 f->value.function.name =
866 gfc_get_string ("__logical_%d_%c%d", f->ts.kind,
867 gfc_type_letter (a->ts.type), a->ts.kind);
872 gfc_resolve_matmul (gfc_expr * f, gfc_expr * a, gfc_expr * b)
876 if (a->ts.type == BT_LOGICAL && b->ts.type == BT_LOGICAL)
878 f->ts.type = BT_LOGICAL;
879 f->ts.kind = gfc_default_logical_kind;
883 temp.expr_type = EXPR_OP;
884 gfc_clear_ts (&temp.ts);
885 temp.value.op.operator = INTRINSIC_NONE;
886 temp.value.op.op1 = a;
887 temp.value.op.op2 = b;
888 gfc_type_convert_binary (&temp);
892 f->rank = (a->rank == 2 && b->rank == 2) ? 2 : 1;
894 f->value.function.name =
895 gfc_get_string (PREFIX("matmul_%c%d"), gfc_type_letter (f->ts.type),
901 gfc_resolve_minmax (const char * name, gfc_expr * f, gfc_actual_arglist * args)
903 gfc_actual_arglist *a;
905 f->ts.type = args->expr->ts.type;
906 f->ts.kind = args->expr->ts.kind;
907 /* Find the largest type kind. */
908 for (a = args->next; a; a = a->next)
910 if (a->expr->ts.kind > f->ts.kind)
911 f->ts.kind = a->expr->ts.kind;
914 /* Convert all parameters to the required kind. */
915 for (a = args; a; a = a->next)
917 if (a->expr->ts.kind != f->ts.kind)
918 gfc_convert_type (a->expr, &f->ts, 2);
921 f->value.function.name =
922 gfc_get_string (name, gfc_type_letter (f->ts.type), f->ts.kind);
927 gfc_resolve_max (gfc_expr * f, gfc_actual_arglist * args)
929 gfc_resolve_minmax ("__max_%c%d", f, args);
934 gfc_resolve_maxloc (gfc_expr * f, gfc_expr * array, gfc_expr * dim,
939 f->ts.type = BT_INTEGER;
940 f->ts.kind = gfc_default_integer_kind;
946 f->rank = array->rank - 1;
947 gfc_resolve_dim_arg (dim);
950 name = mask ? "mmaxloc" : "maxloc";
951 f->value.function.name =
952 gfc_get_string (PREFIX("%s%d_%d_%c%d"), name, dim != NULL, f->ts.kind,
953 gfc_type_letter (array->ts.type), array->ts.kind);
958 gfc_resolve_maxval (gfc_expr * f, gfc_expr * array, gfc_expr * dim,
965 f->rank = array->rank - 1;
966 gfc_resolve_dim_arg (dim);
969 f->value.function.name =
970 gfc_get_string (PREFIX("%s_%c%d"), mask ? "mmaxval" : "maxval",
971 gfc_type_letter (array->ts.type), array->ts.kind);
976 gfc_resolve_merge (gfc_expr * f, gfc_expr * tsource,
977 gfc_expr * fsource ATTRIBUTE_UNUSED,
978 gfc_expr * mask ATTRIBUTE_UNUSED)
981 f->value.function.name =
982 gfc_get_string ("__merge_%c%d", gfc_type_letter (tsource->ts.type),
988 gfc_resolve_min (gfc_expr * f, gfc_actual_arglist * args)
990 gfc_resolve_minmax ("__min_%c%d", f, args);
995 gfc_resolve_minloc (gfc_expr * f, gfc_expr * array, gfc_expr * dim,
1000 f->ts.type = BT_INTEGER;
1001 f->ts.kind = gfc_default_integer_kind;
1007 f->rank = array->rank - 1;
1008 gfc_resolve_dim_arg (dim);
1011 name = mask ? "mminloc" : "minloc";
1012 f->value.function.name =
1013 gfc_get_string (PREFIX("%s%d_%d_%c%d"), name, dim != NULL, f->ts.kind,
1014 gfc_type_letter (array->ts.type), array->ts.kind);
1019 gfc_resolve_minval (gfc_expr * f, gfc_expr * array, gfc_expr * dim,
1026 f->rank = array->rank - 1;
1027 gfc_resolve_dim_arg (dim);
1030 f->value.function.name =
1031 gfc_get_string (PREFIX("%s_%c%d"), mask ? "mminval" : "minval",
1032 gfc_type_letter (array->ts.type), array->ts.kind);
1037 gfc_resolve_mod (gfc_expr * f, gfc_expr * a,
1038 gfc_expr * p ATTRIBUTE_UNUSED)
1041 f->value.function.name =
1042 gfc_get_string ("__mod_%c%d", gfc_type_letter (a->ts.type), a->ts.kind);
1047 gfc_resolve_modulo (gfc_expr * f, gfc_expr * a,
1048 gfc_expr * p ATTRIBUTE_UNUSED)
1051 f->value.function.name =
1052 gfc_get_string ("__modulo_%c%d", gfc_type_letter (a->ts.type),
1057 gfc_resolve_nearest (gfc_expr * f, gfc_expr * a, gfc_expr *p ATTRIBUTE_UNUSED)
1060 f->value.function.name =
1061 gfc_get_string ("__nearest_%c%d", gfc_type_letter (a->ts.type),
1066 gfc_resolve_nint (gfc_expr * f, gfc_expr * a, gfc_expr * kind)
1068 f->ts.type = BT_INTEGER;
1069 f->ts.kind = (kind == NULL) ? gfc_default_integer_kind
1070 : mpz_get_si (kind->value.integer);
1072 f->value.function.name =
1073 gfc_get_string ("__nint_%d_%d", f->ts.kind, a->ts.kind);
1078 gfc_resolve_not (gfc_expr * f, gfc_expr * i)
1081 f->value.function.name = gfc_get_string ("__not_%d", i->ts.kind);
1086 gfc_resolve_pack (gfc_expr * f,
1087 gfc_expr * array ATTRIBUTE_UNUSED,
1089 gfc_expr * vector ATTRIBUTE_UNUSED)
1094 if (mask->rank != 0)
1095 f->value.function.name = PREFIX("pack");
1098 /* We convert mask to default logical only in the scalar case.
1099 In the array case we can simply read the array as if it were
1100 of type default logical. */
1101 if (mask->ts.kind != gfc_default_logical_kind)
1105 ts.type = BT_LOGICAL;
1106 ts.kind = gfc_default_logical_kind;
1107 gfc_convert_type (mask, &ts, 2);
1110 f->value.function.name = PREFIX("pack_s");
1116 gfc_resolve_product (gfc_expr * f, gfc_expr * array, gfc_expr * dim,
1123 f->rank = array->rank - 1;
1124 gfc_resolve_dim_arg (dim);
1127 f->value.function.name =
1128 gfc_get_string (PREFIX("%s_%c%d"), mask ? "mproduct" : "product",
1129 gfc_type_letter (array->ts.type), array->ts.kind);
1134 gfc_resolve_real (gfc_expr * f, gfc_expr * a, gfc_expr * kind)
1136 f->ts.type = BT_REAL;
1139 f->ts.kind = mpz_get_si (kind->value.integer);
1141 f->ts.kind = (a->ts.type == BT_COMPLEX) ?
1142 a->ts.kind : gfc_default_real_kind;
1144 f->value.function.name =
1145 gfc_get_string ("__real_%d_%c%d", f->ts.kind,
1146 gfc_type_letter (a->ts.type), a->ts.kind);
1151 gfc_resolve_rename (gfc_expr * f, gfc_expr * p1 ATTRIBUTE_UNUSED,
1152 gfc_expr * p2 ATTRIBUTE_UNUSED)
1154 f->ts.type = BT_INTEGER;
1155 f->ts.kind = gfc_default_integer_kind;
1156 f->value.function.name = gfc_get_string (PREFIX("rename_i%d"), f->ts.kind);
1161 gfc_resolve_repeat (gfc_expr * f, gfc_expr * string,
1162 gfc_expr * ncopies ATTRIBUTE_UNUSED)
1164 f->ts.type = BT_CHARACTER;
1165 f->ts.kind = string->ts.kind;
1166 f->value.function.name = gfc_get_string ("__repeat_%d", string->ts.kind);
1171 gfc_resolve_reshape (gfc_expr * f, gfc_expr * source, gfc_expr * shape,
1172 gfc_expr * pad ATTRIBUTE_UNUSED,
1173 gfc_expr * order ATTRIBUTE_UNUSED)
1181 gfc_array_size (shape, &rank);
1182 f->rank = mpz_get_si (rank);
1184 switch (source->ts.type)
1187 kind = source->ts.kind * 2;
1193 kind = source->ts.kind;
1206 if (source->ts.type == BT_COMPLEX)
1207 f->value.function.name =
1208 gfc_get_string (PREFIX("reshape_%c%d"),
1209 gfc_type_letter (BT_COMPLEX), source->ts.kind);
1211 f->value.function.name =
1212 gfc_get_string (PREFIX("reshape_%d"), source->ts.kind);
1217 f->value.function.name = PREFIX("reshape");
1221 /* TODO: Make this work with a constant ORDER parameter. */
1222 if (shape->expr_type == EXPR_ARRAY
1223 && gfc_is_constant_expr (shape)
1227 f->shape = gfc_get_shape (f->rank);
1228 c = shape->value.constructor;
1229 for (i = 0; i < f->rank; i++)
1231 mpz_init_set (f->shape[i], c->expr->value.integer);
1236 /* Force-convert both SHAPE and ORDER to index_kind so that we don't need
1237 so many runtime variations. */
1238 if (shape->ts.kind != gfc_index_integer_kind)
1240 gfc_typespec ts = shape->ts;
1241 ts.kind = gfc_index_integer_kind;
1242 gfc_convert_type_warn (shape, &ts, 2, 0);
1244 if (order && order->ts.kind != gfc_index_integer_kind)
1245 gfc_convert_type_warn (order, &shape->ts, 2, 0);
1250 gfc_resolve_rrspacing (gfc_expr * f, gfc_expr * x)
1253 f->value.function.name = gfc_get_string ("__rrspacing_%d", x->ts.kind);
1258 gfc_resolve_scale (gfc_expr * f, gfc_expr * x, gfc_expr * i)
1262 /* The implementation calls scalbn which takes an int as the
1264 if (i->ts.kind != gfc_c_int_kind)
1268 ts.type = BT_INTEGER;
1269 ts.kind = gfc_default_integer_kind;
1271 gfc_convert_type_warn (i, &ts, 2, 0);
1274 f->value.function.name = gfc_get_string ("__scale_%d", x->ts.kind);
1279 gfc_resolve_scan (gfc_expr * f, gfc_expr * string,
1280 gfc_expr * set ATTRIBUTE_UNUSED,
1281 gfc_expr * back ATTRIBUTE_UNUSED)
1283 f->ts.type = BT_INTEGER;
1284 f->ts.kind = gfc_default_integer_kind;
1285 f->value.function.name = gfc_get_string ("__scan_%d", string->ts.kind);
1290 gfc_resolve_set_exponent (gfc_expr * f, gfc_expr * x, gfc_expr * i)
1294 /* The library implementation uses GFC_INTEGER_4 unconditionally,
1295 convert type so we don't have to implement all possible
1297 if (i->ts.kind != 4)
1301 ts.type = BT_INTEGER;
1302 ts.kind = gfc_default_integer_kind;
1304 gfc_convert_type_warn (i, &ts, 2, 0);
1307 f->value.function.name = gfc_get_string ("__set_exponent_%d", x->ts.kind);
1312 gfc_resolve_shape (gfc_expr * f, gfc_expr * array)
1314 f->ts.type = BT_INTEGER;
1315 f->ts.kind = gfc_default_integer_kind;
1317 f->value.function.name = gfc_get_string (PREFIX("shape_%d"), f->ts.kind);
1318 f->shape = gfc_get_shape (1);
1319 mpz_init_set_ui (f->shape[0], array->rank);
1324 gfc_resolve_sign (gfc_expr * f, gfc_expr * a, gfc_expr * b ATTRIBUTE_UNUSED)
1327 f->value.function.name =
1328 gfc_get_string ("__sign_%c%d", gfc_type_letter (a->ts.type), a->ts.kind);
1333 gfc_resolve_sin (gfc_expr * f, gfc_expr * x)
1336 f->value.function.name =
1337 gfc_get_string ("__sin_%c%d", gfc_type_letter (x->ts.type), x->ts.kind);
1342 gfc_resolve_sinh (gfc_expr * f, gfc_expr * x)
1345 f->value.function.name =
1346 gfc_get_string ("__sinh_%c%d", gfc_type_letter (x->ts.type), x->ts.kind);
1351 gfc_resolve_spacing (gfc_expr * f, gfc_expr * x)
1354 f->value.function.name = gfc_get_string ("__spacing_%d", x->ts.kind);
1359 gfc_resolve_spread (gfc_expr * f, gfc_expr * source,
1364 f->rank = source->rank + 1;
1365 f->value.function.name = PREFIX("spread");
1367 gfc_resolve_dim_arg (dim);
1368 gfc_resolve_index (ncopies, 1);
1373 gfc_resolve_sqrt (gfc_expr * f, gfc_expr * x)
1376 f->value.function.name =
1377 gfc_get_string ("__sqrt_%c%d", gfc_type_letter (x->ts.type), x->ts.kind);
1381 /* Resolve the g77 compatibility function STAT AND FSTAT. */
1384 gfc_resolve_stat (gfc_expr * f, gfc_expr * n ATTRIBUTE_UNUSED,
1385 gfc_expr * a ATTRIBUTE_UNUSED)
1387 f->ts.type = BT_INTEGER;
1388 f->ts.kind = gfc_default_integer_kind;
1389 f->value.function.name = gfc_get_string (PREFIX("stat_i%d"), f->ts.kind);
1394 gfc_resolve_fstat (gfc_expr * f, gfc_expr * n, gfc_expr * a ATTRIBUTE_UNUSED)
1396 f->ts.type = BT_INTEGER;
1397 f->ts.kind = gfc_default_integer_kind;
1398 if (n->ts.kind != f->ts.kind)
1399 gfc_convert_type (n, &f->ts, 2);
1401 f->value.function.name = gfc_get_string (PREFIX("fstat_i%d"), f->ts.kind);
1406 gfc_resolve_sum (gfc_expr * f, gfc_expr * array, gfc_expr * dim,
1413 f->rank = array->rank - 1;
1414 gfc_resolve_dim_arg (dim);
1417 f->value.function.name =
1418 gfc_get_string (PREFIX("%s_%c%d"), mask ? "msum" : "sum",
1419 gfc_type_letter (array->ts.type), array->ts.kind);
1424 gfc_resolve_symlnk (gfc_expr * f, gfc_expr * p1 ATTRIBUTE_UNUSED,
1425 gfc_expr * p2 ATTRIBUTE_UNUSED)
1427 f->ts.type = BT_INTEGER;
1428 f->ts.kind = gfc_default_integer_kind;
1429 f->value.function.name = gfc_get_string (PREFIX("symlnk_i%d"), f->ts.kind);
1433 /* Resolve the g77 compatibility function SYSTEM. */
1436 gfc_resolve_system (gfc_expr * f, gfc_expr * n ATTRIBUTE_UNUSED)
1438 f->ts.type = BT_INTEGER;
1440 f->value.function.name = gfc_get_string (PREFIX("system"));
1445 gfc_resolve_tan (gfc_expr * f, gfc_expr * x)
1448 f->value.function.name =
1449 gfc_get_string ("__tan_%c%d", gfc_type_letter (x->ts.type), x->ts.kind);
1454 gfc_resolve_tanh (gfc_expr * f, gfc_expr * x)
1457 f->value.function.name =
1458 gfc_get_string ("__tanh_%c%d", gfc_type_letter (x->ts.type), x->ts.kind);
1463 gfc_resolve_time (gfc_expr * f)
1465 f->ts.type = BT_INTEGER;
1467 f->value.function.name = gfc_get_string (PREFIX("time_func"));
1472 gfc_resolve_time8 (gfc_expr * f)
1474 f->ts.type = BT_INTEGER;
1476 f->value.function.name = gfc_get_string (PREFIX("time8_func"));
1481 gfc_resolve_transfer (gfc_expr * f, gfc_expr * source ATTRIBUTE_UNUSED,
1482 gfc_expr * mold, gfc_expr * size)
1484 /* TODO: Make this do something meaningful. */
1485 static char transfer0[] = "__transfer0", transfer1[] = "__transfer1";
1489 if (size == NULL && mold->rank == 0)
1492 f->value.function.name = transfer0;
1497 f->value.function.name = transfer1;
1503 gfc_resolve_transpose (gfc_expr * f, gfc_expr * matrix)
1511 f->shape = gfc_get_shape (2);
1512 mpz_init_set (f->shape[0], matrix->shape[1]);
1513 mpz_init_set (f->shape[1], matrix->shape[0]);
1516 kind = matrix->ts.kind;
1522 switch (matrix->ts.type)
1525 f->value.function.name =
1526 gfc_get_string (PREFIX("transpose_c%d"), kind);
1532 /* Use the integer routines for real and logical cases. This
1533 assumes they all have the same alignment requirements. */
1534 f->value.function.name =
1535 gfc_get_string (PREFIX("transpose_i%d"), kind);
1539 f->value.function.name = PREFIX("transpose");
1545 f->value.function.name = PREFIX("transpose");
1551 gfc_resolve_trim (gfc_expr * f, gfc_expr * string)
1553 f->ts.type = BT_CHARACTER;
1554 f->ts.kind = string->ts.kind;
1555 f->value.function.name = gfc_get_string ("__trim_%d", string->ts.kind);
1560 gfc_resolve_ubound (gfc_expr * f, gfc_expr * array,
1563 static char ubound[] = "__ubound";
1565 f->ts.type = BT_INTEGER;
1566 f->ts.kind = gfc_default_integer_kind;
1571 f->shape = gfc_get_shape (1);
1572 mpz_init_set_ui (f->shape[0], array->rank);
1575 f->value.function.name = ubound;
1579 /* Resolve the g77 compatibility function UMASK. */
1582 gfc_resolve_umask (gfc_expr * f, gfc_expr * n)
1584 f->ts.type = BT_INTEGER;
1585 f->ts.kind = n->ts.kind;
1586 f->value.function.name = gfc_get_string (PREFIX("umask_i%d"), n->ts.kind);
1590 /* Resolve the g77 compatibility function UNLINK. */
1593 gfc_resolve_unlink (gfc_expr * f, gfc_expr * n ATTRIBUTE_UNUSED)
1595 f->ts.type = BT_INTEGER;
1597 f->value.function.name = gfc_get_string (PREFIX("unlink"));
1601 gfc_resolve_unpack (gfc_expr * f, gfc_expr * vector, gfc_expr * mask,
1602 gfc_expr * field ATTRIBUTE_UNUSED)
1604 f->ts.type = vector->ts.type;
1605 f->ts.kind = vector->ts.kind;
1606 f->rank = mask->rank;
1608 f->value.function.name =
1609 gfc_get_string (PREFIX("unpack%d"), field->rank > 0 ? 1 : 0);
1614 gfc_resolve_verify (gfc_expr * f, gfc_expr * string,
1615 gfc_expr * set ATTRIBUTE_UNUSED,
1616 gfc_expr * back ATTRIBUTE_UNUSED)
1618 f->ts.type = BT_INTEGER;
1619 f->ts.kind = gfc_default_integer_kind;
1620 f->value.function.name = gfc_get_string ("__verify_%d", string->ts.kind);
1624 /* Intrinsic subroutine resolution. */
1627 gfc_resolve_cpu_time (gfc_code * c ATTRIBUTE_UNUSED)
1631 name = gfc_get_string (PREFIX("cpu_time_%d"),
1632 c->ext.actual->expr->ts.kind);
1633 c->resolved_sym = gfc_get_intrinsic_sub_symbol (name);
1638 gfc_resolve_mvbits (gfc_code * c)
1643 kind = c->ext.actual->expr->ts.kind;
1644 name = gfc_get_string (PREFIX("mvbits_i%d"), kind);
1646 c->resolved_sym = gfc_get_intrinsic_sub_symbol (name);
1651 gfc_resolve_random_number (gfc_code * c ATTRIBUTE_UNUSED)
1656 kind = c->ext.actual->expr->ts.kind;
1657 if (c->ext.actual->expr->rank == 0)
1658 name = gfc_get_string (PREFIX("random_r%d"), kind);
1660 name = gfc_get_string (PREFIX("arandom_r%d"), kind);
1662 c->resolved_sym = gfc_get_intrinsic_sub_symbol (name);
1667 gfc_resolve_rename_sub (gfc_code * c)
1672 if (c->ext.actual->next->next->expr != NULL)
1673 kind = c->ext.actual->next->next->expr->ts.kind;
1675 kind = gfc_default_integer_kind;
1677 name = gfc_get_string (PREFIX("rename_i%d_sub"), kind);
1678 c->resolved_sym = gfc_get_intrinsic_sub_symbol (name);
1683 gfc_resolve_kill_sub (gfc_code * c)
1688 if (c->ext.actual->next->next->expr != NULL)
1689 kind = c->ext.actual->next->next->expr->ts.kind;
1691 kind = gfc_default_integer_kind;
1693 name = gfc_get_string (PREFIX("kill_i%d_sub"), kind);
1694 c->resolved_sym = gfc_get_intrinsic_sub_symbol (name);
1699 gfc_resolve_link_sub (gfc_code * c)
1704 if (c->ext.actual->next->next->expr != NULL)
1705 kind = c->ext.actual->next->next->expr->ts.kind;
1707 kind = gfc_default_integer_kind;
1709 name = gfc_get_string (PREFIX("link_i%d_sub"), kind);
1710 c->resolved_sym = gfc_get_intrinsic_sub_symbol (name);
1715 gfc_resolve_symlnk_sub (gfc_code * c)
1720 if (c->ext.actual->next->next->expr != NULL)
1721 kind = c->ext.actual->next->next->expr->ts.kind;
1723 kind = gfc_default_integer_kind;
1725 name = gfc_get_string (PREFIX("symlnk_i%d_sub"), kind);
1726 c->resolved_sym = gfc_get_intrinsic_sub_symbol (name);
1730 /* G77 compatibility subroutines etime() and dtime(). */
1733 gfc_resolve_etime_sub (gfc_code * c)
1737 name = gfc_get_string (PREFIX("etime_sub"));
1738 c->resolved_sym = gfc_get_intrinsic_sub_symbol (name);
1742 /* G77 compatibility subroutine second(). */
1745 gfc_resolve_second_sub (gfc_code * c)
1749 name = gfc_get_string (PREFIX("second_sub"));
1750 c->resolved_sym = gfc_get_intrinsic_sub_symbol (name);
1755 gfc_resolve_sleep_sub (gfc_code * c)
1760 if (c->ext.actual->expr != NULL)
1761 kind = c->ext.actual->expr->ts.kind;
1763 kind = gfc_default_integer_kind;
1765 name = gfc_get_string (PREFIX("sleep_i%d_sub"), kind);
1766 c->resolved_sym = gfc_get_intrinsic_sub_symbol (name);
1770 /* G77 compatibility function srand(). */
1773 gfc_resolve_srand (gfc_code * c)
1776 name = gfc_get_string (PREFIX("srand"));
1777 c->resolved_sym = gfc_get_intrinsic_sub_symbol (name);
1781 /* Resolve the getarg intrinsic subroutine. */
1784 gfc_resolve_getarg (gfc_code * c)
1789 kind = gfc_default_integer_kind;
1790 name = gfc_get_string (PREFIX("getarg_i%d"), kind);
1791 c->resolved_sym = gfc_get_intrinsic_sub_symbol (name);
1794 /* Resolve the getcwd intrinsic subroutine. */
1797 gfc_resolve_getcwd_sub (gfc_code * c)
1802 if (c->ext.actual->next->expr != NULL)
1803 kind = c->ext.actual->next->expr->ts.kind;
1805 kind = gfc_default_integer_kind;
1807 name = gfc_get_string (PREFIX("getcwd_i%d_sub"), kind);
1808 c->resolved_sym = gfc_get_intrinsic_sub_symbol (name);
1812 /* Resolve the get_command intrinsic subroutine. */
1815 gfc_resolve_get_command (gfc_code * c)
1820 kind = gfc_default_integer_kind;
1821 name = gfc_get_string (PREFIX("get_command_i%d"), kind);
1822 c->resolved_sym = gfc_get_intrinsic_sub_symbol (name);
1826 /* Resolve the get_command_argument intrinsic subroutine. */
1829 gfc_resolve_get_command_argument (gfc_code * c)
1834 kind = gfc_default_integer_kind;
1835 name = gfc_get_string (PREFIX("get_command_argument_i%d"), kind);
1836 c->resolved_sym = gfc_get_intrinsic_sub_symbol (name);
1839 /* Resolve the get_environment_variable intrinsic subroutine. */
1842 gfc_resolve_get_environment_variable (gfc_code * code)
1847 kind = gfc_default_integer_kind;
1848 name = gfc_get_string (PREFIX("get_environment_variable_i%d"), kind);
1849 code->resolved_sym = gfc_get_intrinsic_sub_symbol (name);
1852 /* Resolve the SYSTEM intrinsic subroutine. */
1855 gfc_resolve_system_sub (gfc_code * c)
1859 name = gfc_get_string (PREFIX("system_sub"));
1860 c->resolved_sym = gfc_get_intrinsic_sub_symbol (name);
1863 /* Determine if the arguments to SYSTEM_CLOCK are INTEGER(4) or INTEGER(8) */
1866 gfc_resolve_system_clock (gfc_code * c)
1871 if (c->ext.actual->expr != NULL)
1872 kind = c->ext.actual->expr->ts.kind;
1873 else if (c->ext.actual->next->expr != NULL)
1874 kind = c->ext.actual->next->expr->ts.kind;
1875 else if (c->ext.actual->next->next->expr != NULL)
1876 kind = c->ext.actual->next->next->expr->ts.kind;
1878 kind = gfc_default_integer_kind;
1880 name = gfc_get_string (PREFIX("system_clock_%d"), kind);
1881 c->resolved_sym = gfc_get_intrinsic_sub_symbol (name);
1884 /* Resolve the EXIT intrinsic subroutine. */
1887 gfc_resolve_exit (gfc_code * c)
1892 if (c->ext.actual->expr != NULL)
1893 kind = c->ext.actual->expr->ts.kind;
1895 kind = gfc_default_integer_kind;
1897 name = gfc_get_string (PREFIX("exit_i%d"), kind);
1898 c->resolved_sym = gfc_get_intrinsic_sub_symbol (name);
1901 /* Resolve the FLUSH intrinsic subroutine. */
1904 gfc_resolve_flush (gfc_code * c)
1910 ts.type = BT_INTEGER;
1911 ts.kind = gfc_default_integer_kind;
1912 n = c->ext.actual->expr;
1914 && n->ts.kind != ts.kind)
1915 gfc_convert_type (n, &ts, 2);
1917 name = gfc_get_string (PREFIX("flush_i%d"), ts.kind);
1918 c->resolved_sym = gfc_get_intrinsic_sub_symbol (name);
1923 gfc_resolve_gerror (gfc_code * c)
1925 c->resolved_sym = gfc_get_intrinsic_sub_symbol (PREFIX ("gerror"));
1930 gfc_resolve_getlog (gfc_code * c)
1932 c->resolved_sym = gfc_get_intrinsic_sub_symbol (PREFIX ("getlog"));
1937 gfc_resolve_hostnm_sub (gfc_code * c)
1942 if (c->ext.actual->next->expr != NULL)
1943 kind = c->ext.actual->next->expr->ts.kind;
1945 kind = gfc_default_integer_kind;
1947 name = gfc_get_string (PREFIX("hostnm_i%d_sub"), kind);
1948 c->resolved_sym = gfc_get_intrinsic_sub_symbol (name);
1953 gfc_resolve_perror (gfc_code * c)
1955 c->resolved_sym = gfc_get_intrinsic_sub_symbol (PREFIX ("perror_sub"));
1958 /* Resolve the STAT and FSTAT intrinsic subroutines. */
1961 gfc_resolve_stat_sub (gfc_code * c)
1965 name = gfc_get_string (PREFIX("stat_i%d_sub"), gfc_default_integer_kind);
1966 c->resolved_sym = gfc_get_intrinsic_sub_symbol (name);
1971 gfc_resolve_fstat_sub (gfc_code * c)
1977 u = c->ext.actual->expr;
1978 ts = &c->ext.actual->next->expr->ts;
1979 if (u->ts.kind != ts->kind)
1980 gfc_convert_type (u, ts, 2);
1981 name = gfc_get_string (PREFIX("fstat_i%d_sub"), ts->kind);
1982 c->resolved_sym = gfc_get_intrinsic_sub_symbol (name);
1987 gfc_resolve_ttynam_sub (gfc_code * c)
1991 if (c->ext.actual->expr->ts.kind != gfc_c_int_kind)
1993 ts.type = BT_INTEGER;
1994 ts.kind = gfc_c_int_kind;
1997 gfc_convert_type (c->ext.actual->expr, &ts, 2);
2000 c->resolved_sym = gfc_get_intrinsic_sub_symbol (PREFIX("ttynam_sub"));
2004 /* Resolve the UMASK intrinsic subroutine. */
2007 gfc_resolve_umask_sub (gfc_code * c)
2012 if (c->ext.actual->next->expr != NULL)
2013 kind = c->ext.actual->next->expr->ts.kind;
2015 kind = gfc_default_integer_kind;
2017 name = gfc_get_string (PREFIX("umask_i%d_sub"), kind);
2018 c->resolved_sym = gfc_get_intrinsic_sub_symbol (name);
2021 /* Resolve the UNLINK intrinsic subroutine. */
2024 gfc_resolve_unlink_sub (gfc_code * c)
2029 if (c->ext.actual->next->expr != NULL)
2030 kind = c->ext.actual->next->expr->ts.kind;
2032 kind = gfc_default_integer_kind;
2034 name = gfc_get_string (PREFIX("unlink_i%d_sub"), kind);
2035 c->resolved_sym = gfc_get_intrinsic_sub_symbol (name);