1 /* Intrinsic function resolution.
2 Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006
3 Free Software Foundation, Inc.
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 /* MERGE and SPREAD need to have source charlen's present for passing
63 to the result expression. */
65 check_charlen_present (gfc_expr *source)
67 if (source->expr_type == EXPR_CONSTANT && source->ts.cl == NULL)
69 source->ts.cl = gfc_get_charlen ();
70 source->ts.cl->next = gfc_current_ns->cl_list;
71 gfc_current_ns->cl_list = source->ts.cl;
72 source->ts.cl->length = gfc_int_expr (source->value.character.length);
77 /********************** Resolution functions **********************/
81 gfc_resolve_abs (gfc_expr * f, gfc_expr * a)
84 if (f->ts.type == BT_COMPLEX)
87 f->value.function.name =
88 gfc_get_string ("__abs_%c%d", gfc_type_letter (a->ts.type), a->ts.kind);
93 gfc_resolve_access (gfc_expr * f, gfc_expr * name ATTRIBUTE_UNUSED,
94 gfc_expr * mode ATTRIBUTE_UNUSED)
96 f->ts.type = BT_INTEGER;
97 f->ts.kind = gfc_c_int_kind;
98 f->value.function.name = PREFIX("access_func");
103 gfc_resolve_acos (gfc_expr * f, gfc_expr * x)
106 f->value.function.name =
107 gfc_get_string ("__acos_%c%d", gfc_type_letter (x->ts.type), x->ts.kind);
112 gfc_resolve_acosh (gfc_expr * f, gfc_expr * x)
115 f->value.function.name =
116 gfc_get_string ("__acosh_%c%d", gfc_type_letter (x->ts.type), x->ts.kind);
121 gfc_resolve_aimag (gfc_expr * f, gfc_expr * x)
123 f->ts.type = BT_REAL;
124 f->ts.kind = x->ts.kind;
125 f->value.function.name =
126 gfc_get_string ("__aimag_%c%d", gfc_type_letter (x->ts.type), x->ts.kind);
131 gfc_resolve_and (gfc_expr * f, gfc_expr * i, gfc_expr * j)
133 f->ts.type = i->ts.type;
134 f->ts.kind = gfc_kind_max (i,j);
136 if (i->ts.kind != j->ts.kind)
138 if (i->ts.kind == gfc_kind_max (i,j))
139 gfc_convert_type(j, &i->ts, 2);
141 gfc_convert_type(i, &j->ts, 2);
144 f->value.function.name = gfc_get_string ("__and_%c%d",
145 gfc_type_letter (i->ts.type),
151 gfc_resolve_aint (gfc_expr * f, gfc_expr * a, gfc_expr * kind)
155 f->ts.type = a->ts.type;
156 f->ts.kind = (kind == NULL) ? a->ts.kind : mpz_get_si (kind->value.integer);
158 if (a->ts.kind != f->ts.kind)
160 ts.type = f->ts.type;
161 ts.kind = f->ts.kind;
162 gfc_convert_type (a, &ts, 2);
164 /* The resolved name is only used for specific intrinsics where
165 the return kind is the same as the arg kind. */
166 f->value.function.name =
167 gfc_get_string ("__aint_%c%d", gfc_type_letter (a->ts.type), a->ts.kind);
172 gfc_resolve_dint (gfc_expr * f, gfc_expr * a)
174 gfc_resolve_aint (f, a, NULL);
179 gfc_resolve_all (gfc_expr * f, gfc_expr * mask, gfc_expr * dim)
185 gfc_resolve_dim_arg (dim);
186 f->rank = mask->rank - 1;
187 f->shape = gfc_copy_shape_excluding (mask->shape, mask->rank, dim);
190 f->value.function.name =
191 gfc_get_string (PREFIX("all_%c%d"), gfc_type_letter (mask->ts.type),
197 gfc_resolve_anint (gfc_expr * f, gfc_expr * a, gfc_expr * kind)
201 f->ts.type = a->ts.type;
202 f->ts.kind = (kind == NULL) ? a->ts.kind : mpz_get_si (kind->value.integer);
204 if (a->ts.kind != f->ts.kind)
206 ts.type = f->ts.type;
207 ts.kind = f->ts.kind;
208 gfc_convert_type (a, &ts, 2);
211 /* The resolved name is only used for specific intrinsics where
212 the return kind is the same as the arg kind. */
213 f->value.function.name =
214 gfc_get_string ("__anint_%c%d", gfc_type_letter (a->ts.type), a->ts.kind);
219 gfc_resolve_dnint (gfc_expr * f, gfc_expr * a)
221 gfc_resolve_anint (f, a, NULL);
226 gfc_resolve_any (gfc_expr * f, gfc_expr * mask, gfc_expr * dim)
232 gfc_resolve_dim_arg (dim);
233 f->rank = mask->rank - 1;
234 f->shape = gfc_copy_shape_excluding (mask->shape, mask->rank, dim);
237 f->value.function.name =
238 gfc_get_string (PREFIX("any_%c%d"), gfc_type_letter (mask->ts.type),
244 gfc_resolve_asin (gfc_expr * f, gfc_expr * x)
247 f->value.function.name =
248 gfc_get_string ("__asin_%c%d", gfc_type_letter (x->ts.type), x->ts.kind);
252 gfc_resolve_asinh (gfc_expr * f, gfc_expr * x)
255 f->value.function.name =
256 gfc_get_string ("__asinh_%c%d", gfc_type_letter (x->ts.type), x->ts.kind);
260 gfc_resolve_atan (gfc_expr * f, gfc_expr * x)
263 f->value.function.name =
264 gfc_get_string ("__atan_%c%d", gfc_type_letter (x->ts.type), x->ts.kind);
268 gfc_resolve_atanh (gfc_expr * f, gfc_expr * x)
271 f->value.function.name =
272 gfc_get_string ("__atanh_%c%d", gfc_type_letter (x->ts.type), x->ts.kind);
276 gfc_resolve_atan2 (gfc_expr * f, gfc_expr * x,
277 gfc_expr * y ATTRIBUTE_UNUSED)
280 f->value.function.name =
281 gfc_get_string ("__atan2_%c%d", gfc_type_letter (x->ts.type), x->ts.kind);
285 /* Resolve the BESYN and BESJN intrinsics. */
288 gfc_resolve_besn (gfc_expr * f, gfc_expr * n, gfc_expr * x)
293 if (n->ts.kind != gfc_c_int_kind)
295 ts.type = BT_INTEGER;
296 ts.kind = gfc_c_int_kind;
297 gfc_convert_type (n, &ts, 2);
299 f->value.function.name = gfc_get_string ("<intrinsic>");
304 gfc_resolve_btest (gfc_expr * f, gfc_expr * i, gfc_expr * pos)
306 f->ts.type = BT_LOGICAL;
307 f->ts.kind = gfc_default_logical_kind;
309 f->value.function.name = gfc_get_string ("__btest_%d_%d", i->ts.kind,
315 gfc_resolve_ceiling (gfc_expr * f, gfc_expr * a, gfc_expr * kind)
317 f->ts.type = BT_INTEGER;
318 f->ts.kind = (kind == NULL) ? gfc_default_integer_kind
319 : mpz_get_si (kind->value.integer);
321 f->value.function.name =
322 gfc_get_string ("__ceiling_%d_%c%d", f->ts.kind,
323 gfc_type_letter (a->ts.type), a->ts.kind);
328 gfc_resolve_char (gfc_expr * f, gfc_expr * a, gfc_expr * kind)
330 f->ts.type = BT_CHARACTER;
331 f->ts.kind = (kind == NULL) ? gfc_default_character_kind
332 : mpz_get_si (kind->value.integer);
334 f->value.function.name =
335 gfc_get_string ("__char_%d_%c%d", f->ts.kind,
336 gfc_type_letter (a->ts.type), a->ts.kind);
341 gfc_resolve_chdir (gfc_expr * f, gfc_expr * d ATTRIBUTE_UNUSED)
343 f->ts.type = BT_INTEGER;
344 f->ts.kind = gfc_default_integer_kind;
345 f->value.function.name = gfc_get_string (PREFIX("chdir_i%d"), f->ts.kind);
350 gfc_resolve_chdir_sub (gfc_code * c)
355 if (c->ext.actual->next->expr != NULL)
356 kind = c->ext.actual->next->expr->ts.kind;
358 kind = gfc_default_integer_kind;
360 name = gfc_get_string (PREFIX("chdir_i%d_sub"), kind);
361 c->resolved_sym = gfc_get_intrinsic_sub_symbol (name);
366 gfc_resolve_chmod (gfc_expr * f, gfc_expr * name ATTRIBUTE_UNUSED,
367 gfc_expr * mode ATTRIBUTE_UNUSED)
369 f->ts.type = BT_INTEGER;
370 f->ts.kind = gfc_c_int_kind;
371 f->value.function.name = PREFIX("chmod_func");
376 gfc_resolve_chmod_sub (gfc_code * c)
381 if (c->ext.actual->next->next->expr != NULL)
382 kind = c->ext.actual->next->next->expr->ts.kind;
384 kind = gfc_default_integer_kind;
386 name = gfc_get_string (PREFIX("chmod_i%d_sub"), kind);
387 c->resolved_sym = gfc_get_intrinsic_sub_symbol (name);
392 gfc_resolve_cmplx (gfc_expr * f, gfc_expr * x, gfc_expr * y, gfc_expr * kind)
394 f->ts.type = BT_COMPLEX;
395 f->ts.kind = (kind == NULL) ? gfc_default_real_kind
396 : mpz_get_si (kind->value.integer);
399 f->value.function.name =
400 gfc_get_string ("__cmplx0_%d_%c%d", f->ts.kind,
401 gfc_type_letter (x->ts.type), x->ts.kind);
403 f->value.function.name =
404 gfc_get_string ("__cmplx1_%d_%c%d_%c%d", f->ts.kind,
405 gfc_type_letter (x->ts.type), x->ts.kind,
406 gfc_type_letter (y->ts.type), y->ts.kind);
410 gfc_resolve_dcmplx (gfc_expr * f, gfc_expr * x, gfc_expr * y)
412 gfc_resolve_cmplx (f, x, y, gfc_int_expr (gfc_default_double_kind));
416 gfc_resolve_complex (gfc_expr * f, gfc_expr * x, gfc_expr * y)
420 if (x->ts.type == BT_INTEGER)
422 if (y->ts.type == BT_INTEGER)
423 kind = gfc_default_real_kind;
429 if (y->ts.type == BT_REAL)
430 kind = (x->ts.kind > y->ts.kind) ? x->ts.kind : y->ts.kind;
435 f->ts.type = BT_COMPLEX;
438 f->value.function.name =
439 gfc_get_string ("__cmplx1_%d_%c%d_%c%d", f->ts.kind,
440 gfc_type_letter (x->ts.type), x->ts.kind,
441 gfc_type_letter (y->ts.type), y->ts.kind);
446 gfc_resolve_conjg (gfc_expr * f, gfc_expr * x)
449 f->value.function.name = gfc_get_string ("__conjg_%d", x->ts.kind);
454 gfc_resolve_cos (gfc_expr * f, gfc_expr * x)
457 f->value.function.name =
458 gfc_get_string ("__cos_%c%d", gfc_type_letter (x->ts.type), x->ts.kind);
463 gfc_resolve_cosh (gfc_expr * f, gfc_expr * x)
466 f->value.function.name =
467 gfc_get_string ("__cosh_%c%d", gfc_type_letter (x->ts.type), x->ts.kind);
472 gfc_resolve_count (gfc_expr * f, gfc_expr * mask, gfc_expr * dim)
474 f->ts.type = BT_INTEGER;
475 f->ts.kind = gfc_default_integer_kind;
479 f->rank = mask->rank - 1;
480 gfc_resolve_dim_arg (dim);
481 f->shape = gfc_copy_shape_excluding (mask->shape, mask->rank, dim);
484 f->value.function.name =
485 gfc_get_string (PREFIX("count_%d_%c%d"), f->ts.kind,
486 gfc_type_letter (mask->ts.type), mask->ts.kind);
491 gfc_resolve_cshift (gfc_expr * f, gfc_expr * array,
498 f->rank = array->rank;
499 f->shape = gfc_copy_shape (array->shape, array->rank);
506 /* Convert shift to at least gfc_default_integer_kind, so we don't need
507 kind=1 and kind=2 versions of the library functions. */
508 if (shift->ts.kind < gfc_default_integer_kind)
511 ts.type = BT_INTEGER;
512 ts.kind = gfc_default_integer_kind;
513 gfc_convert_type_warn (shift, &ts, 2, 0);
518 gfc_resolve_dim_arg (dim);
519 /* Convert dim to shift's kind, so we don't need so many variations. */
520 if (dim->ts.kind != shift->ts.kind)
521 gfc_convert_type_warn (dim, &shift->ts, 2, 0);
523 f->value.function.name =
524 gfc_get_string (PREFIX("cshift%d_%d%s"), n, shift->ts.kind,
525 array->ts.type == BT_CHARACTER ? "_char" : "");
530 gfc_resolve_ctime (gfc_expr * f, gfc_expr * time)
534 f->ts.type = BT_CHARACTER;
535 f->ts.kind = gfc_default_character_kind;
537 /* ctime TIME argument is a INTEGER(KIND=8), says the doc */
538 if (time->ts.kind != 8)
540 ts.type = BT_INTEGER;
544 gfc_convert_type (time, &ts, 2);
547 f->value.function.name = gfc_get_string (PREFIX("ctime"));
552 gfc_resolve_dble (gfc_expr * f, gfc_expr * a)
554 f->ts.type = BT_REAL;
555 f->ts.kind = gfc_default_double_kind;
556 f->value.function.name =
557 gfc_get_string ("__dble_%c%d", gfc_type_letter (a->ts.type), a->ts.kind);
562 gfc_resolve_dim (gfc_expr * f, gfc_expr * a, gfc_expr * p)
564 f->ts.type = a->ts.type;
566 f->ts.kind = gfc_kind_max (a,p);
568 f->ts.kind = a->ts.kind;
570 if (p != NULL && a->ts.kind != p->ts.kind)
572 if (a->ts.kind == gfc_kind_max (a,p))
573 gfc_convert_type(p, &a->ts, 2);
575 gfc_convert_type(a, &p->ts, 2);
578 f->value.function.name =
579 gfc_get_string ("__dim_%c%d", gfc_type_letter (f->ts.type), f->ts.kind);
584 gfc_resolve_dot_product (gfc_expr * f, gfc_expr * a, gfc_expr * b)
588 temp.expr_type = EXPR_OP;
589 gfc_clear_ts (&temp.ts);
590 temp.value.op.operator = INTRINSIC_NONE;
591 temp.value.op.op1 = a;
592 temp.value.op.op2 = b;
593 gfc_type_convert_binary (&temp);
596 f->value.function.name =
597 gfc_get_string (PREFIX("dot_product_%c%d"), gfc_type_letter (f->ts.type),
603 gfc_resolve_dprod (gfc_expr * f,
604 gfc_expr * a ATTRIBUTE_UNUSED,
605 gfc_expr * b ATTRIBUTE_UNUSED)
607 f->ts.kind = gfc_default_double_kind;
608 f->ts.type = BT_REAL;
610 f->value.function.name = gfc_get_string ("__dprod_r%d", f->ts.kind);
615 gfc_resolve_eoshift (gfc_expr * f, gfc_expr * array,
623 f->rank = array->rank;
624 f->shape = gfc_copy_shape (array->shape, array->rank);
629 if (boundary && boundary->rank > 0)
632 /* Convert shift to at least gfc_default_integer_kind, so we don't need
633 kind=1 and kind=2 versions of the library functions. */
634 if (shift->ts.kind < gfc_default_integer_kind)
637 ts.type = BT_INTEGER;
638 ts.kind = gfc_default_integer_kind;
639 gfc_convert_type_warn (shift, &ts, 2, 0);
644 gfc_resolve_dim_arg (dim);
645 /* Convert dim to shift's kind, so we don't need so many variations. */
646 if (dim->ts.kind != shift->ts.kind)
647 gfc_convert_type_warn (dim, &shift->ts, 2, 0);
650 f->value.function.name =
651 gfc_get_string (PREFIX("eoshift%d_%d%s"), n, shift->ts.kind,
652 array->ts.type == BT_CHARACTER ? "_char" : "");
657 gfc_resolve_exp (gfc_expr * f, gfc_expr * x)
660 f->value.function.name =
661 gfc_get_string ("__exp_%c%d", gfc_type_letter (x->ts.type), x->ts.kind);
666 gfc_resolve_exponent (gfc_expr * f, gfc_expr * x)
668 f->ts.type = BT_INTEGER;
669 f->ts.kind = gfc_default_integer_kind;
671 f->value.function.name = gfc_get_string ("__exponent_%d", x->ts.kind);
676 gfc_resolve_fdate (gfc_expr * f)
678 f->ts.type = BT_CHARACTER;
679 f->ts.kind = gfc_default_character_kind;
680 f->value.function.name = gfc_get_string (PREFIX("fdate"));
685 gfc_resolve_floor (gfc_expr * f, gfc_expr * a, gfc_expr * kind)
687 f->ts.type = BT_INTEGER;
688 f->ts.kind = (kind == NULL) ? gfc_default_integer_kind
689 : mpz_get_si (kind->value.integer);
691 f->value.function.name =
692 gfc_get_string ("__floor%d_%c%d", f->ts.kind,
693 gfc_type_letter (a->ts.type), a->ts.kind);
698 gfc_resolve_fnum (gfc_expr * f, gfc_expr * n)
700 f->ts.type = BT_INTEGER;
701 f->ts.kind = gfc_default_integer_kind;
702 if (n->ts.kind != f->ts.kind)
703 gfc_convert_type (n, &f->ts, 2);
704 f->value.function.name = gfc_get_string (PREFIX("fnum_i%d"), f->ts.kind);
709 gfc_resolve_fraction (gfc_expr * f, gfc_expr * x)
712 f->value.function.name = gfc_get_string ("__fraction_%d", x->ts.kind);
716 /* Resolve single-argument g77 math intrinsics, eg BESY0, ERF. */
719 gfc_resolve_g77_math1 (gfc_expr * f, gfc_expr * x)
722 f->value.function.name = gfc_get_string ("<intrinsic>");
727 gfc_resolve_getcwd (gfc_expr * f, gfc_expr * n ATTRIBUTE_UNUSED)
729 f->ts.type = BT_INTEGER;
731 f->value.function.name = gfc_get_string (PREFIX("getcwd"));
736 gfc_resolve_getgid (gfc_expr * f)
738 f->ts.type = BT_INTEGER;
740 f->value.function.name = gfc_get_string (PREFIX("getgid"));
745 gfc_resolve_getpid (gfc_expr * f)
747 f->ts.type = BT_INTEGER;
749 f->value.function.name = gfc_get_string (PREFIX("getpid"));
754 gfc_resolve_getuid (gfc_expr * f)
756 f->ts.type = BT_INTEGER;
758 f->value.function.name = gfc_get_string (PREFIX("getuid"));
762 gfc_resolve_hostnm (gfc_expr * f, gfc_expr * n ATTRIBUTE_UNUSED)
764 f->ts.type = BT_INTEGER;
766 f->value.function.name = gfc_get_string (PREFIX ("hostnm"));
770 gfc_resolve_iand (gfc_expr * f, gfc_expr * i, gfc_expr * j)
772 /* If the kind of i and j are different, then g77 cross-promoted the
773 kinds to the largest value. The Fortran 95 standard requires the
775 if (i->ts.kind != j->ts.kind)
777 if (i->ts.kind == gfc_kind_max (i,j))
778 gfc_convert_type(j, &i->ts, 2);
780 gfc_convert_type(i, &j->ts, 2);
784 f->value.function.name = gfc_get_string ("__iand_%d", i->ts.kind);
789 gfc_resolve_ibclr (gfc_expr * f, gfc_expr * i, gfc_expr * pos ATTRIBUTE_UNUSED)
792 f->value.function.name = gfc_get_string ("__ibclr_%d", i->ts.kind);
797 gfc_resolve_ibits (gfc_expr * f, gfc_expr * i,
798 gfc_expr * pos ATTRIBUTE_UNUSED,
799 gfc_expr * len ATTRIBUTE_UNUSED)
802 f->value.function.name = gfc_get_string ("__ibits_%d", i->ts.kind);
807 gfc_resolve_ibset (gfc_expr * f, gfc_expr * i,
808 gfc_expr * pos ATTRIBUTE_UNUSED)
811 f->value.function.name = gfc_get_string ("__ibset_%d", i->ts.kind);
816 gfc_resolve_ichar (gfc_expr * f, gfc_expr * c)
818 f->ts.type = BT_INTEGER;
819 f->ts.kind = gfc_default_integer_kind;
821 f->value.function.name = gfc_get_string ("__ichar_%d", c->ts.kind);
826 gfc_resolve_idnint (gfc_expr * f, gfc_expr * a)
828 gfc_resolve_nint (f, a, NULL);
833 gfc_resolve_ierrno (gfc_expr * f)
835 f->ts.type = BT_INTEGER;
836 f->ts.kind = gfc_default_integer_kind;
837 f->value.function.name = gfc_get_string (PREFIX("ierrno_i%d"), f->ts.kind);
842 gfc_resolve_ieor (gfc_expr * f, gfc_expr * i, gfc_expr * j)
844 /* If the kind of i and j are different, then g77 cross-promoted the
845 kinds to the largest value. The Fortran 95 standard requires the
847 if (i->ts.kind != j->ts.kind)
849 if (i->ts.kind == gfc_kind_max (i,j))
850 gfc_convert_type(j, &i->ts, 2);
852 gfc_convert_type(i, &j->ts, 2);
856 f->value.function.name = gfc_get_string ("__ieor_%d", i->ts.kind);
861 gfc_resolve_ior (gfc_expr * f, gfc_expr * i, gfc_expr * j)
863 /* If the kind of i and j are different, then g77 cross-promoted the
864 kinds to the largest value. The Fortran 95 standard requires the
866 if (i->ts.kind != j->ts.kind)
868 if (i->ts.kind == gfc_kind_max (i,j))
869 gfc_convert_type(j, &i->ts, 2);
871 gfc_convert_type(i, &j->ts, 2);
875 f->value.function.name = gfc_get_string ("__ior_%d", i->ts.kind);
880 gfc_resolve_int (gfc_expr * f, gfc_expr * a, gfc_expr * kind)
882 f->ts.type = BT_INTEGER;
883 f->ts.kind = (kind == NULL) ? gfc_default_integer_kind
884 : mpz_get_si (kind->value.integer);
886 f->value.function.name =
887 gfc_get_string ("__int_%d_%c%d", f->ts.kind, gfc_type_letter (a->ts.type),
893 gfc_resolve_int2 (gfc_expr * f, gfc_expr * a)
895 f->ts.type = BT_INTEGER;
898 f->value.function.name =
899 gfc_get_string ("__int_%d_%c%d", f->ts.kind, gfc_type_letter (a->ts.type),
905 gfc_resolve_int8 (gfc_expr * f, gfc_expr * a)
907 f->ts.type = BT_INTEGER;
910 f->value.function.name =
911 gfc_get_string ("__int_%d_%c%d", f->ts.kind, gfc_type_letter (a->ts.type),
917 gfc_resolve_long (gfc_expr * f, gfc_expr * a)
919 f->ts.type = BT_INTEGER;
922 f->value.function.name =
923 gfc_get_string ("__int_%d_%c%d", f->ts.kind, gfc_type_letter (a->ts.type),
929 gfc_resolve_isatty (gfc_expr * f, gfc_expr * u)
933 f->ts.type = BT_LOGICAL;
934 f->ts.kind = gfc_default_integer_kind;
935 if (u->ts.kind != gfc_c_int_kind)
937 ts.type = BT_INTEGER;
938 ts.kind = gfc_c_int_kind;
941 gfc_convert_type (u, &ts, 2);
944 f->value.function.name = gfc_get_string (PREFIX("isatty_l%d"), f->ts.kind);
949 gfc_resolve_ishft (gfc_expr * f, gfc_expr * i, gfc_expr * shift)
952 f->value.function.name =
953 gfc_get_string ("__ishft_%d_%d", i->ts.kind, shift->ts.kind);
958 gfc_resolve_rshift (gfc_expr * f, gfc_expr * i, gfc_expr * shift)
961 f->value.function.name =
962 gfc_get_string ("__rshift_%d_%d", i->ts.kind, shift->ts.kind);
967 gfc_resolve_lshift (gfc_expr * f, gfc_expr * i, gfc_expr * shift)
970 f->value.function.name =
971 gfc_get_string ("__lshift_%d_%d", i->ts.kind, shift->ts.kind);
976 gfc_resolve_ishftc (gfc_expr * f, gfc_expr * i, gfc_expr * shift,
981 s_kind = (size == NULL) ? gfc_default_integer_kind : shift->ts.kind;
984 f->value.function.name =
985 gfc_get_string ("__ishftc_%d_%d_%d", i->ts.kind, shift->ts.kind, s_kind);
990 gfc_resolve_kill (gfc_expr * f, ATTRIBUTE_UNUSED gfc_expr * p,
991 ATTRIBUTE_UNUSED gfc_expr * s)
993 f->ts.type = BT_INTEGER;
994 f->ts.kind = gfc_default_integer_kind;
996 f->value.function.name = gfc_get_string (PREFIX("kill_i%d"), f->ts.kind);
1001 gfc_resolve_lbound (gfc_expr * f, gfc_expr * array,
1004 static char lbound[] = "__lbound";
1006 f->ts.type = BT_INTEGER;
1007 f->ts.kind = gfc_default_integer_kind;
1012 f->shape = gfc_get_shape (1);
1013 mpz_init_set_ui (f->shape[0], array->rank);
1016 f->value.function.name = lbound;
1021 gfc_resolve_len (gfc_expr * f, gfc_expr * string)
1023 f->ts.type = BT_INTEGER;
1024 f->ts.kind = gfc_default_integer_kind;
1025 f->value.function.name = gfc_get_string ("__len_%d", string->ts.kind);
1030 gfc_resolve_len_trim (gfc_expr * f, gfc_expr * string)
1032 f->ts.type = BT_INTEGER;
1033 f->ts.kind = gfc_default_integer_kind;
1034 f->value.function.name = gfc_get_string ("__len_trim%d", string->ts.kind);
1039 gfc_resolve_link (gfc_expr * f, gfc_expr * p1 ATTRIBUTE_UNUSED,
1040 gfc_expr * p2 ATTRIBUTE_UNUSED)
1042 f->ts.type = BT_INTEGER;
1043 f->ts.kind = gfc_default_integer_kind;
1044 f->value.function.name = gfc_get_string (PREFIX("link_i%d"), f->ts.kind);
1049 gfc_resolve_loc (gfc_expr *f, gfc_expr *x)
1051 f->ts.type= BT_INTEGER;
1052 f->ts.kind = gfc_index_integer_kind;
1053 f->value.function.name = gfc_get_string ("__loc_%d", x->ts.kind);
1058 gfc_resolve_log (gfc_expr * f, gfc_expr * x)
1061 f->value.function.name =
1062 gfc_get_string ("__log_%c%d", gfc_type_letter (x->ts.type), x->ts.kind);
1067 gfc_resolve_log10 (gfc_expr * f, gfc_expr * x)
1070 f->value.function.name =
1071 gfc_get_string ("__log10_%c%d", gfc_type_letter (x->ts.type), x->ts.kind);
1076 gfc_resolve_logical (gfc_expr * f, gfc_expr * a, gfc_expr * kind)
1078 f->ts.type = BT_LOGICAL;
1079 f->ts.kind = (kind == NULL) ? gfc_default_logical_kind
1080 : mpz_get_si (kind->value.integer);
1083 f->value.function.name =
1084 gfc_get_string ("__logical_%d_%c%d", f->ts.kind,
1085 gfc_type_letter (a->ts.type), a->ts.kind);
1090 gfc_resolve_malloc (gfc_expr * f, gfc_expr * size)
1092 if (size->ts.kind < gfc_index_integer_kind)
1096 ts.type = BT_INTEGER;
1097 ts.kind = gfc_index_integer_kind;
1098 gfc_convert_type_warn (size, &ts, 2, 0);
1101 f->ts.type = BT_INTEGER;
1102 f->ts.kind = gfc_index_integer_kind;
1103 f->value.function.name = gfc_get_string (PREFIX("malloc"));
1108 gfc_resolve_matmul (gfc_expr * f, gfc_expr * a, gfc_expr * b)
1112 if (a->ts.type == BT_LOGICAL && b->ts.type == BT_LOGICAL)
1114 f->ts.type = BT_LOGICAL;
1115 f->ts.kind = gfc_default_logical_kind;
1119 temp.expr_type = EXPR_OP;
1120 gfc_clear_ts (&temp.ts);
1121 temp.value.op.operator = INTRINSIC_NONE;
1122 temp.value.op.op1 = a;
1123 temp.value.op.op2 = b;
1124 gfc_type_convert_binary (&temp);
1128 f->rank = (a->rank == 2 && b->rank == 2) ? 2 : 1;
1130 f->value.function.name =
1131 gfc_get_string (PREFIX("matmul_%c%d"), gfc_type_letter (f->ts.type),
1137 gfc_resolve_minmax (const char * name, gfc_expr * f, gfc_actual_arglist * args)
1139 gfc_actual_arglist *a;
1141 f->ts.type = args->expr->ts.type;
1142 f->ts.kind = args->expr->ts.kind;
1143 /* Find the largest type kind. */
1144 for (a = args->next; a; a = a->next)
1146 if (a->expr->ts.kind > f->ts.kind)
1147 f->ts.kind = a->expr->ts.kind;
1150 /* Convert all parameters to the required kind. */
1151 for (a = args; a; a = a->next)
1153 if (a->expr->ts.kind != f->ts.kind)
1154 gfc_convert_type (a->expr, &f->ts, 2);
1157 f->value.function.name =
1158 gfc_get_string (name, gfc_type_letter (f->ts.type), f->ts.kind);
1163 gfc_resolve_max (gfc_expr * f, gfc_actual_arglist * args)
1165 gfc_resolve_minmax ("__max_%c%d", f, args);
1170 gfc_resolve_maxloc (gfc_expr * f, gfc_expr * array, gfc_expr * dim,
1176 f->ts.type = BT_INTEGER;
1177 f->ts.kind = gfc_default_integer_kind;
1182 f->shape = gfc_get_shape (1);
1183 mpz_init_set_si (f->shape[0], array->rank);
1187 f->rank = array->rank - 1;
1188 gfc_resolve_dim_arg (dim);
1189 if (array->shape && dim->expr_type == EXPR_CONSTANT)
1191 idim = (int) mpz_get_si (dim->value.integer);
1192 f->shape = gfc_get_shape (f->rank);
1193 for (i = 0, j = 0; i < f->rank; i++, j++)
1195 if (i == (idim - 1))
1197 mpz_init_set (f->shape[i], array->shape[j]);
1204 if (mask->rank == 0)
1209 /* The mask can be kind 4 or 8 for the array case. For the
1210 scalar case, coerce it to default kind unconditionally. */
1211 if ((mask->ts.kind < gfc_default_logical_kind)
1212 || (mask->rank == 0 && mask->ts.kind != gfc_default_logical_kind))
1215 ts.type = BT_LOGICAL;
1216 ts.kind = gfc_default_logical_kind;
1217 gfc_convert_type_warn (mask, &ts, 2, 0);
1223 f->value.function.name =
1224 gfc_get_string (PREFIX("%s%d_%d_%c%d"), name, dim != NULL, f->ts.kind,
1225 gfc_type_letter (array->ts.type), array->ts.kind);
1230 gfc_resolve_maxval (gfc_expr * f, gfc_expr * array, gfc_expr * dim,
1240 f->rank = array->rank - 1;
1241 gfc_resolve_dim_arg (dim);
1243 if (f->rank && array->shape && dim->expr_type == EXPR_CONSTANT)
1245 idim = (int) mpz_get_si (dim->value.integer);
1246 f->shape = gfc_get_shape (f->rank);
1247 for (i = 0, j = 0; i < f->rank; i++, j++)
1249 if (i == (idim - 1))
1251 mpz_init_set (f->shape[i], array->shape[j]);
1258 if (mask->rank == 0)
1263 /* The mask can be kind 4 or 8 for the array case. For the
1264 scalar case, coerce it to default kind unconditionally. */
1265 if ((mask->ts.kind < gfc_default_logical_kind)
1266 || (mask->rank == 0 && mask->ts.kind != gfc_default_logical_kind))
1269 ts.type = BT_LOGICAL;
1270 ts.kind = gfc_default_logical_kind;
1271 gfc_convert_type_warn (mask, &ts, 2, 0);
1277 f->value.function.name =
1278 gfc_get_string (PREFIX("%s_%c%d"), name,
1279 gfc_type_letter (array->ts.type), array->ts.kind);
1284 gfc_resolve_mclock (gfc_expr * f)
1286 f->ts.type = BT_INTEGER;
1288 f->value.function.name = PREFIX("mclock");
1293 gfc_resolve_mclock8 (gfc_expr * f)
1295 f->ts.type = BT_INTEGER;
1297 f->value.function.name = PREFIX("mclock8");
1302 gfc_resolve_merge (gfc_expr * f, gfc_expr * tsource,
1303 gfc_expr * fsource ATTRIBUTE_UNUSED,
1304 gfc_expr * mask ATTRIBUTE_UNUSED)
1306 if (tsource->ts.type == BT_CHARACTER)
1307 check_charlen_present (tsource);
1309 f->ts = tsource->ts;
1310 f->value.function.name =
1311 gfc_get_string ("__merge_%c%d", gfc_type_letter (tsource->ts.type),
1317 gfc_resolve_min (gfc_expr * f, gfc_actual_arglist * args)
1319 gfc_resolve_minmax ("__min_%c%d", f, args);
1324 gfc_resolve_minloc (gfc_expr * f, gfc_expr * array, gfc_expr * dim,
1330 f->ts.type = BT_INTEGER;
1331 f->ts.kind = gfc_default_integer_kind;
1336 f->shape = gfc_get_shape (1);
1337 mpz_init_set_si (f->shape[0], array->rank);
1341 f->rank = array->rank - 1;
1342 gfc_resolve_dim_arg (dim);
1343 if (array->shape && dim->expr_type == EXPR_CONSTANT)
1345 idim = (int) mpz_get_si (dim->value.integer);
1346 f->shape = gfc_get_shape (f->rank);
1347 for (i = 0, j = 0; i < f->rank; i++, j++)
1349 if (i == (idim - 1))
1351 mpz_init_set (f->shape[i], array->shape[j]);
1358 if (mask->rank == 0)
1363 /* The mask can be kind 4 or 8 for the array case. For the
1364 scalar case, coerce it to default kind unconditionally. */
1365 if ((mask->ts.kind < gfc_default_logical_kind)
1366 || (mask->rank == 0 && mask->ts.kind != gfc_default_logical_kind))
1369 ts.type = BT_LOGICAL;
1370 ts.kind = gfc_default_logical_kind;
1371 gfc_convert_type_warn (mask, &ts, 2, 0);
1377 f->value.function.name =
1378 gfc_get_string (PREFIX("%s%d_%d_%c%d"), name, dim != NULL, f->ts.kind,
1379 gfc_type_letter (array->ts.type), array->ts.kind);
1384 gfc_resolve_minval (gfc_expr * f, gfc_expr * array, gfc_expr * dim,
1394 f->rank = array->rank - 1;
1395 gfc_resolve_dim_arg (dim);
1397 if (f->rank && array->shape && dim->expr_type == EXPR_CONSTANT)
1399 idim = (int) mpz_get_si (dim->value.integer);
1400 f->shape = gfc_get_shape (f->rank);
1401 for (i = 0, j = 0; i < f->rank; i++, j++)
1403 if (i == (idim - 1))
1405 mpz_init_set (f->shape[i], array->shape[j]);
1412 if (mask->rank == 0)
1417 /* The mask can be kind 4 or 8 for the array case. For the
1418 scalar case, coerce it to default kind unconditionally. */
1419 if ((mask->ts.kind < gfc_default_logical_kind)
1420 || (mask->rank == 0 && mask->ts.kind != gfc_default_logical_kind))
1423 ts.type = BT_LOGICAL;
1424 ts.kind = gfc_default_logical_kind;
1425 gfc_convert_type_warn (mask, &ts, 2, 0);
1431 f->value.function.name =
1432 gfc_get_string (PREFIX("%s_%c%d"), name,
1433 gfc_type_letter (array->ts.type), array->ts.kind);
1438 gfc_resolve_mod (gfc_expr * f, gfc_expr * a, gfc_expr * p)
1440 f->ts.type = a->ts.type;
1442 f->ts.kind = gfc_kind_max (a,p);
1444 f->ts.kind = a->ts.kind;
1446 if (p != NULL && a->ts.kind != p->ts.kind)
1448 if (a->ts.kind == gfc_kind_max (a,p))
1449 gfc_convert_type(p, &a->ts, 2);
1451 gfc_convert_type(a, &p->ts, 2);
1454 f->value.function.name =
1455 gfc_get_string ("__mod_%c%d", gfc_type_letter (f->ts.type), f->ts.kind);
1460 gfc_resolve_modulo (gfc_expr * f, gfc_expr * a, gfc_expr * p)
1462 f->ts.type = a->ts.type;
1464 f->ts.kind = gfc_kind_max (a,p);
1466 f->ts.kind = a->ts.kind;
1468 if (p != NULL && a->ts.kind != p->ts.kind)
1470 if (a->ts.kind == gfc_kind_max (a,p))
1471 gfc_convert_type(p, &a->ts, 2);
1473 gfc_convert_type(a, &p->ts, 2);
1476 f->value.function.name =
1477 gfc_get_string ("__modulo_%c%d", gfc_type_letter (f->ts.type),
1482 gfc_resolve_nearest (gfc_expr * f, gfc_expr * a, gfc_expr *p ATTRIBUTE_UNUSED)
1485 f->value.function.name =
1486 gfc_get_string ("__nearest_%c%d", gfc_type_letter (a->ts.type),
1491 gfc_resolve_nint (gfc_expr * f, gfc_expr * a, gfc_expr * kind)
1493 f->ts.type = BT_INTEGER;
1494 f->ts.kind = (kind == NULL) ? gfc_default_integer_kind
1495 : mpz_get_si (kind->value.integer);
1497 f->value.function.name =
1498 gfc_get_string ("__nint_%d_%d", f->ts.kind, a->ts.kind);
1503 gfc_resolve_not (gfc_expr * f, gfc_expr * i)
1506 f->value.function.name = gfc_get_string ("__not_%d", i->ts.kind);
1511 gfc_resolve_or (gfc_expr * f, gfc_expr * i, gfc_expr * j)
1513 f->ts.type = i->ts.type;
1514 f->ts.kind = gfc_kind_max (i,j);
1516 if (i->ts.kind != j->ts.kind)
1518 if (i->ts.kind == gfc_kind_max (i,j))
1519 gfc_convert_type(j, &i->ts, 2);
1521 gfc_convert_type(i, &j->ts, 2);
1524 f->value.function.name = gfc_get_string ("__or_%c%d",
1525 gfc_type_letter (i->ts.type),
1531 gfc_resolve_pack (gfc_expr * f, gfc_expr * array, gfc_expr * mask,
1532 gfc_expr * vector ATTRIBUTE_UNUSED)
1537 if (mask->rank != 0)
1538 f->value.function.name = (array->ts.type == BT_CHARACTER
1539 ? PREFIX("pack_char")
1543 /* We convert mask to default logical only in the scalar case.
1544 In the array case we can simply read the array as if it were
1545 of type default logical. */
1546 if (mask->ts.kind != gfc_default_logical_kind)
1550 ts.type = BT_LOGICAL;
1551 ts.kind = gfc_default_logical_kind;
1552 gfc_convert_type (mask, &ts, 2);
1555 f->value.function.name = (array->ts.type == BT_CHARACTER
1556 ? PREFIX("pack_s_char")
1557 : PREFIX("pack_s"));
1563 gfc_resolve_product (gfc_expr * f, gfc_expr * array, gfc_expr * dim,
1572 f->rank = array->rank - 1;
1573 gfc_resolve_dim_arg (dim);
1578 if (mask->rank == 0)
1583 /* The mask can be kind 4 or 8 for the array case. For the
1584 scalar case, coerce it to default kind unconditionally. */
1585 if ((mask->ts.kind < gfc_default_logical_kind)
1586 || (mask->rank == 0 && mask->ts.kind != gfc_default_logical_kind))
1589 ts.type = BT_LOGICAL;
1590 ts.kind = gfc_default_logical_kind;
1591 gfc_convert_type_warn (mask, &ts, 2, 0);
1597 f->value.function.name =
1598 gfc_get_string (PREFIX("%s_%c%d"), name,
1599 gfc_type_letter (array->ts.type), array->ts.kind);
1604 gfc_resolve_real (gfc_expr * f, gfc_expr * a, gfc_expr * kind)
1606 f->ts.type = BT_REAL;
1609 f->ts.kind = mpz_get_si (kind->value.integer);
1611 f->ts.kind = (a->ts.type == BT_COMPLEX) ?
1612 a->ts.kind : gfc_default_real_kind;
1614 f->value.function.name =
1615 gfc_get_string ("__real_%d_%c%d", f->ts.kind,
1616 gfc_type_letter (a->ts.type), a->ts.kind);
1621 gfc_resolve_realpart (gfc_expr * f, gfc_expr * a)
1623 f->ts.type = BT_REAL;
1624 f->ts.kind = a->ts.kind;
1625 f->value.function.name =
1626 gfc_get_string ("__real_%d_%c%d", f->ts.kind,
1627 gfc_type_letter (a->ts.type), a->ts.kind);
1632 gfc_resolve_rename (gfc_expr * f, gfc_expr * p1 ATTRIBUTE_UNUSED,
1633 gfc_expr * p2 ATTRIBUTE_UNUSED)
1635 f->ts.type = BT_INTEGER;
1636 f->ts.kind = gfc_default_integer_kind;
1637 f->value.function.name = gfc_get_string (PREFIX("rename_i%d"), f->ts.kind);
1642 gfc_resolve_repeat (gfc_expr * f, gfc_expr * string,
1643 gfc_expr * ncopies ATTRIBUTE_UNUSED)
1645 f->ts.type = BT_CHARACTER;
1646 f->ts.kind = string->ts.kind;
1647 f->value.function.name = gfc_get_string ("__repeat_%d", string->ts.kind);
1652 gfc_resolve_reshape (gfc_expr * f, gfc_expr * source, gfc_expr * shape,
1653 gfc_expr * pad ATTRIBUTE_UNUSED,
1654 gfc_expr * order ATTRIBUTE_UNUSED)
1662 gfc_array_size (shape, &rank);
1663 f->rank = mpz_get_si (rank);
1665 switch (source->ts.type)
1671 kind = source->ts.kind;
1685 if (source->ts.type == BT_COMPLEX || source->ts.type == BT_REAL)
1686 f->value.function.name =
1687 gfc_get_string (PREFIX("reshape_%c%d"),
1688 gfc_type_letter (source->ts.type), source->ts.kind);
1690 f->value.function.name =
1691 gfc_get_string (PREFIX("reshape_%d"), source->ts.kind);
1696 f->value.function.name = (source->ts.type == BT_CHARACTER
1697 ? PREFIX("reshape_char")
1698 : PREFIX("reshape"));
1702 /* TODO: Make this work with a constant ORDER parameter. */
1703 if (shape->expr_type == EXPR_ARRAY
1704 && gfc_is_constant_expr (shape)
1708 f->shape = gfc_get_shape (f->rank);
1709 c = shape->value.constructor;
1710 for (i = 0; i < f->rank; i++)
1712 mpz_init_set (f->shape[i], c->expr->value.integer);
1717 /* Force-convert both SHAPE and ORDER to index_kind so that we don't need
1718 so many runtime variations. */
1719 if (shape->ts.kind != gfc_index_integer_kind)
1721 gfc_typespec ts = shape->ts;
1722 ts.kind = gfc_index_integer_kind;
1723 gfc_convert_type_warn (shape, &ts, 2, 0);
1725 if (order && order->ts.kind != gfc_index_integer_kind)
1726 gfc_convert_type_warn (order, &shape->ts, 2, 0);
1731 gfc_resolve_rrspacing (gfc_expr * f, gfc_expr * x)
1734 f->value.function.name = gfc_get_string ("__rrspacing_%d", x->ts.kind);
1739 gfc_resolve_scale (gfc_expr * f, gfc_expr * x, gfc_expr * i)
1743 /* The implementation calls scalbn which takes an int as the
1745 if (i->ts.kind != gfc_c_int_kind)
1749 ts.type = BT_INTEGER;
1750 ts.kind = gfc_default_integer_kind;
1752 gfc_convert_type_warn (i, &ts, 2, 0);
1755 f->value.function.name = gfc_get_string ("__scale_%d", x->ts.kind);
1760 gfc_resolve_scan (gfc_expr * f, gfc_expr * string,
1761 gfc_expr * set ATTRIBUTE_UNUSED,
1762 gfc_expr * back ATTRIBUTE_UNUSED)
1764 f->ts.type = BT_INTEGER;
1765 f->ts.kind = gfc_default_integer_kind;
1766 f->value.function.name = gfc_get_string ("__scan_%d", string->ts.kind);
1771 gfc_resolve_secnds (gfc_expr * t1, gfc_expr * t0)
1774 t1->value.function.name =
1775 gfc_get_string (PREFIX("secnds"));
1780 gfc_resolve_set_exponent (gfc_expr * f, gfc_expr * x, gfc_expr * i)
1784 /* The library implementation uses GFC_INTEGER_4 unconditionally,
1785 convert type so we don't have to implement all possible
1787 if (i->ts.kind != 4)
1791 ts.type = BT_INTEGER;
1792 ts.kind = gfc_default_integer_kind;
1794 gfc_convert_type_warn (i, &ts, 2, 0);
1797 f->value.function.name = gfc_get_string ("__set_exponent_%d", x->ts.kind);
1802 gfc_resolve_shape (gfc_expr * f, gfc_expr * array)
1804 f->ts.type = BT_INTEGER;
1805 f->ts.kind = gfc_default_integer_kind;
1807 f->value.function.name = gfc_get_string (PREFIX("shape_%d"), f->ts.kind);
1808 f->shape = gfc_get_shape (1);
1809 mpz_init_set_ui (f->shape[0], array->rank);
1814 gfc_resolve_sign (gfc_expr * f, gfc_expr * a, gfc_expr * b ATTRIBUTE_UNUSED)
1817 f->value.function.name =
1818 gfc_get_string ("__sign_%c%d", gfc_type_letter (a->ts.type), a->ts.kind);
1823 gfc_resolve_signal (gfc_expr * f, gfc_expr *number, gfc_expr *handler)
1825 f->ts.type = BT_INTEGER;
1826 f->ts.kind = gfc_c_int_kind;
1828 /* handler can be either BT_INTEGER or BT_PROCEDURE */
1829 if (handler->ts.type == BT_INTEGER)
1831 if (handler->ts.kind != gfc_c_int_kind)
1832 gfc_convert_type (handler, &f->ts, 2);
1833 f->value.function.name = gfc_get_string (PREFIX("signal_func_int"));
1836 f->value.function.name = gfc_get_string (PREFIX("signal_func"));
1838 if (number->ts.kind != gfc_c_int_kind)
1839 gfc_convert_type (number, &f->ts, 2);
1844 gfc_resolve_sin (gfc_expr * f, gfc_expr * x)
1847 f->value.function.name =
1848 gfc_get_string ("__sin_%c%d", gfc_type_letter (x->ts.type), x->ts.kind);
1853 gfc_resolve_sinh (gfc_expr * f, gfc_expr * x)
1856 f->value.function.name =
1857 gfc_get_string ("__sinh_%c%d", gfc_type_letter (x->ts.type), x->ts.kind);
1862 gfc_resolve_spacing (gfc_expr * f, gfc_expr * x)
1865 f->value.function.name = gfc_get_string ("__spacing_%d", x->ts.kind);
1870 gfc_resolve_spread (gfc_expr * f, gfc_expr * source,
1874 if (source->ts.type == BT_CHARACTER)
1875 check_charlen_present (source);
1878 f->rank = source->rank + 1;
1879 if (source->rank == 0)
1880 f->value.function.name = (source->ts.type == BT_CHARACTER
1881 ? PREFIX("spread_char_scalar")
1882 : PREFIX("spread_scalar"));
1884 f->value.function.name = (source->ts.type == BT_CHARACTER
1885 ? PREFIX("spread_char")
1886 : PREFIX("spread"));
1888 if (dim && gfc_is_constant_expr (dim)
1889 && ncopies && gfc_is_constant_expr (ncopies)
1890 && source->shape[0])
1893 idim = mpz_get_ui (dim->value.integer);
1894 f->shape = gfc_get_shape (f->rank);
1895 for (i = 0; i < (idim - 1); i++)
1896 mpz_init_set (f->shape[i], source->shape[i]);
1898 mpz_init_set (f->shape[idim - 1], ncopies->value.integer);
1900 for (i = idim; i < f->rank ; i++)
1901 mpz_init_set (f->shape[i], source->shape[i-1]);
1905 gfc_resolve_dim_arg (dim);
1906 gfc_resolve_index (ncopies, 1);
1911 gfc_resolve_sqrt (gfc_expr * f, gfc_expr * x)
1914 f->value.function.name =
1915 gfc_get_string ("__sqrt_%c%d", gfc_type_letter (x->ts.type), x->ts.kind);
1919 /* Resolve the g77 compatibility function STAT AND FSTAT. */
1922 gfc_resolve_stat (gfc_expr * f, gfc_expr * n ATTRIBUTE_UNUSED,
1923 gfc_expr * a ATTRIBUTE_UNUSED)
1925 f->ts.type = BT_INTEGER;
1926 f->ts.kind = gfc_default_integer_kind;
1927 f->value.function.name = gfc_get_string (PREFIX("stat_i%d"), f->ts.kind);
1932 gfc_resolve_lstat (gfc_expr * f, gfc_expr * n ATTRIBUTE_UNUSED,
1933 gfc_expr * a ATTRIBUTE_UNUSED)
1935 f->ts.type = BT_INTEGER;
1936 f->ts.kind = gfc_default_integer_kind;
1937 f->value.function.name = gfc_get_string (PREFIX("lstat_i%d"), f->ts.kind);
1942 gfc_resolve_fstat (gfc_expr * f, gfc_expr * n, gfc_expr * a ATTRIBUTE_UNUSED)
1944 f->ts.type = BT_INTEGER;
1945 f->ts.kind = gfc_default_integer_kind;
1946 if (n->ts.kind != f->ts.kind)
1947 gfc_convert_type (n, &f->ts, 2);
1949 f->value.function.name = gfc_get_string (PREFIX("fstat_i%d"), f->ts.kind);
1954 gfc_resolve_fgetc (gfc_expr * f, gfc_expr * u, gfc_expr * c ATTRIBUTE_UNUSED)
1958 f->ts.type = BT_INTEGER;
1959 f->ts.kind = gfc_c_int_kind;
1960 if (u->ts.kind != gfc_c_int_kind)
1962 ts.type = BT_INTEGER;
1963 ts.kind = gfc_c_int_kind;
1966 gfc_convert_type (u, &ts, 2);
1969 f->value.function.name = gfc_get_string (PREFIX("fgetc"));
1974 gfc_resolve_fget (gfc_expr * f, gfc_expr * c ATTRIBUTE_UNUSED)
1976 f->ts.type = BT_INTEGER;
1977 f->ts.kind = gfc_c_int_kind;
1978 f->value.function.name = gfc_get_string (PREFIX("fget"));
1983 gfc_resolve_fputc (gfc_expr * f, gfc_expr * u, gfc_expr * c ATTRIBUTE_UNUSED)
1987 f->ts.type = BT_INTEGER;
1988 f->ts.kind = gfc_c_int_kind;
1989 if (u->ts.kind != gfc_c_int_kind)
1991 ts.type = BT_INTEGER;
1992 ts.kind = gfc_c_int_kind;
1995 gfc_convert_type (u, &ts, 2);
1998 f->value.function.name = gfc_get_string (PREFIX("fputc"));
2003 gfc_resolve_fput (gfc_expr * f, gfc_expr * c ATTRIBUTE_UNUSED)
2005 f->ts.type = BT_INTEGER;
2006 f->ts.kind = gfc_c_int_kind;
2007 f->value.function.name = gfc_get_string (PREFIX("fput"));
2012 gfc_resolve_ftell (gfc_expr * f, gfc_expr * u)
2016 f->ts.type = BT_INTEGER;
2017 f->ts.kind = gfc_index_integer_kind;
2018 if (u->ts.kind != gfc_c_int_kind)
2020 ts.type = BT_INTEGER;
2021 ts.kind = gfc_c_int_kind;
2024 gfc_convert_type (u, &ts, 2);
2027 f->value.function.name = gfc_get_string (PREFIX("ftell"));
2032 gfc_resolve_sum (gfc_expr * f, gfc_expr * array, gfc_expr * dim,
2041 if (mask->rank == 0)
2046 /* The mask can be kind 4 or 8 for the array case. For the
2047 scalar case, coerce it to default kind unconditionally. */
2048 if ((mask->ts.kind < gfc_default_logical_kind)
2049 || (mask->rank == 0 && mask->ts.kind != gfc_default_logical_kind))
2052 ts.type = BT_LOGICAL;
2053 ts.kind = gfc_default_logical_kind;
2054 gfc_convert_type_warn (mask, &ts, 2, 0);
2062 f->rank = array->rank - 1;
2063 gfc_resolve_dim_arg (dim);
2066 f->value.function.name =
2067 gfc_get_string (PREFIX("%s_%c%d"), name,
2068 gfc_type_letter (array->ts.type), array->ts.kind);
2073 gfc_resolve_symlnk (gfc_expr * f, gfc_expr * p1 ATTRIBUTE_UNUSED,
2074 gfc_expr * p2 ATTRIBUTE_UNUSED)
2076 f->ts.type = BT_INTEGER;
2077 f->ts.kind = gfc_default_integer_kind;
2078 f->value.function.name = gfc_get_string (PREFIX("symlnk_i%d"), f->ts.kind);
2082 /* Resolve the g77 compatibility function SYSTEM. */
2085 gfc_resolve_system (gfc_expr * f, gfc_expr * n ATTRIBUTE_UNUSED)
2087 f->ts.type = BT_INTEGER;
2089 f->value.function.name = gfc_get_string (PREFIX("system"));
2094 gfc_resolve_tan (gfc_expr * f, gfc_expr * x)
2097 f->value.function.name =
2098 gfc_get_string ("__tan_%c%d", gfc_type_letter (x->ts.type), x->ts.kind);
2103 gfc_resolve_tanh (gfc_expr * f, gfc_expr * x)
2106 f->value.function.name =
2107 gfc_get_string ("__tanh_%c%d", gfc_type_letter (x->ts.type), x->ts.kind);
2112 gfc_resolve_time (gfc_expr * f)
2114 f->ts.type = BT_INTEGER;
2116 f->value.function.name = gfc_get_string (PREFIX("time_func"));
2121 gfc_resolve_time8 (gfc_expr * f)
2123 f->ts.type = BT_INTEGER;
2125 f->value.function.name = gfc_get_string (PREFIX("time8_func"));
2130 gfc_resolve_transfer (gfc_expr * f, gfc_expr * source ATTRIBUTE_UNUSED,
2131 gfc_expr * mold, gfc_expr * size)
2133 /* TODO: Make this do something meaningful. */
2134 static char transfer0[] = "__transfer0", transfer1[] = "__transfer1";
2138 if (size == NULL && mold->rank == 0)
2141 f->value.function.name = transfer0;
2146 f->value.function.name = transfer1;
2147 if (size && gfc_is_constant_expr (size))
2149 f->shape = gfc_get_shape (1);
2150 mpz_init_set (f->shape[0], size->value.integer);
2157 gfc_resolve_transpose (gfc_expr * f, gfc_expr * matrix)
2163 f->shape = gfc_get_shape (2);
2164 mpz_init_set (f->shape[0], matrix->shape[1]);
2165 mpz_init_set (f->shape[1], matrix->shape[0]);
2168 switch (matrix->ts.kind)
2174 switch (matrix->ts.type)
2178 f->value.function.name =
2179 gfc_get_string (PREFIX("transpose_%c%d"),
2180 gfc_type_letter (matrix->ts.type),
2186 /* Use the integer routines for real and logical cases. This
2187 assumes they all have the same alignment requirements. */
2188 f->value.function.name =
2189 gfc_get_string (PREFIX("transpose_i%d"), matrix->ts.kind);
2193 f->value.function.name = PREFIX("transpose");
2199 f->value.function.name = (matrix->ts.type == BT_CHARACTER
2200 ? PREFIX("transpose_char")
2201 : PREFIX("transpose"));
2208 gfc_resolve_trim (gfc_expr * f, gfc_expr * string)
2210 f->ts.type = BT_CHARACTER;
2211 f->ts.kind = string->ts.kind;
2212 f->value.function.name = gfc_get_string ("__trim_%d", string->ts.kind);
2217 gfc_resolve_ubound (gfc_expr * f, gfc_expr * array,
2220 static char ubound[] = "__ubound";
2222 f->ts.type = BT_INTEGER;
2223 f->ts.kind = gfc_default_integer_kind;
2228 f->shape = gfc_get_shape (1);
2229 mpz_init_set_ui (f->shape[0], array->rank);
2232 f->value.function.name = ubound;
2236 /* Resolve the g77 compatibility function UMASK. */
2239 gfc_resolve_umask (gfc_expr * f, gfc_expr * n)
2241 f->ts.type = BT_INTEGER;
2242 f->ts.kind = n->ts.kind;
2243 f->value.function.name = gfc_get_string (PREFIX("umask_i%d"), n->ts.kind);
2247 /* Resolve the g77 compatibility function UNLINK. */
2250 gfc_resolve_unlink (gfc_expr * f, gfc_expr * n ATTRIBUTE_UNUSED)
2252 f->ts.type = BT_INTEGER;
2254 f->value.function.name = gfc_get_string (PREFIX("unlink"));
2259 gfc_resolve_ttynam (gfc_expr * f, gfc_expr * unit)
2263 f->ts.type = BT_CHARACTER;
2264 f->ts.kind = gfc_default_character_kind;
2266 if (unit->ts.kind != gfc_c_int_kind)
2268 ts.type = BT_INTEGER;
2269 ts.kind = gfc_c_int_kind;
2272 gfc_convert_type (unit, &ts, 2);
2275 f->value.function.name = gfc_get_string (PREFIX("ttynam"));
2280 gfc_resolve_unpack (gfc_expr * f, gfc_expr * vector, gfc_expr * mask,
2281 gfc_expr * field ATTRIBUTE_UNUSED)
2284 f->rank = mask->rank;
2286 f->value.function.name =
2287 gfc_get_string (PREFIX("unpack%d%s"), field->rank > 0 ? 1 : 0,
2288 vector->ts.type == BT_CHARACTER ? "_char" : "");
2293 gfc_resolve_verify (gfc_expr * f, gfc_expr * string,
2294 gfc_expr * set ATTRIBUTE_UNUSED,
2295 gfc_expr * back ATTRIBUTE_UNUSED)
2297 f->ts.type = BT_INTEGER;
2298 f->ts.kind = gfc_default_integer_kind;
2299 f->value.function.name = gfc_get_string ("__verify_%d", string->ts.kind);
2304 gfc_resolve_xor (gfc_expr * f, gfc_expr * i, gfc_expr * j)
2306 f->ts.type = i->ts.type;
2307 f->ts.kind = gfc_kind_max (i,j);
2309 if (i->ts.kind != j->ts.kind)
2311 if (i->ts.kind == gfc_kind_max (i,j))
2312 gfc_convert_type(j, &i->ts, 2);
2314 gfc_convert_type(i, &j->ts, 2);
2317 f->value.function.name = gfc_get_string ("__xor_%c%d",
2318 gfc_type_letter (i->ts.type),
2323 /* Intrinsic subroutine resolution. */
2326 gfc_resolve_alarm_sub (gfc_code * c)
2329 gfc_expr *seconds, *handler, *status;
2332 seconds = c->ext.actual->expr;
2333 handler = c->ext.actual->next->expr;
2334 status = c->ext.actual->next->next->expr;
2335 ts.type = BT_INTEGER;
2336 ts.kind = gfc_c_int_kind;
2338 /* handler can be either BT_INTEGER or BT_PROCEDURE */
2339 if (handler->ts.type == BT_INTEGER)
2341 if (handler->ts.kind != gfc_c_int_kind)
2342 gfc_convert_type (handler, &ts, 2);
2343 name = gfc_get_string (PREFIX("alarm_sub_int"));
2346 name = gfc_get_string (PREFIX("alarm_sub"));
2348 if (seconds->ts.kind != gfc_c_int_kind)
2349 gfc_convert_type (seconds, &ts, 2);
2350 if (status != NULL && status->ts.kind != gfc_c_int_kind)
2351 gfc_convert_type (status, &ts, 2);
2353 c->resolved_sym = gfc_get_intrinsic_sub_symbol (name);
2357 gfc_resolve_cpu_time (gfc_code * c)
2361 name = gfc_get_string (PREFIX("cpu_time_%d"),
2362 c->ext.actual->expr->ts.kind);
2363 c->resolved_sym = gfc_get_intrinsic_sub_symbol (name);
2368 gfc_resolve_mvbits (gfc_code * c)
2373 kind = c->ext.actual->expr->ts.kind;
2374 name = gfc_get_string (PREFIX("mvbits_i%d"), kind);
2376 c->resolved_sym = gfc_get_intrinsic_sub_symbol (name);
2381 gfc_resolve_random_number (gfc_code * c)
2386 kind = c->ext.actual->expr->ts.kind;
2387 if (c->ext.actual->expr->rank == 0)
2388 name = gfc_get_string (PREFIX("random_r%d"), kind);
2390 name = gfc_get_string (PREFIX("arandom_r%d"), kind);
2392 c->resolved_sym = gfc_get_intrinsic_sub_symbol (name);
2397 gfc_resolve_rename_sub (gfc_code * c)
2402 if (c->ext.actual->next->next->expr != NULL)
2403 kind = c->ext.actual->next->next->expr->ts.kind;
2405 kind = gfc_default_integer_kind;
2407 name = gfc_get_string (PREFIX("rename_i%d_sub"), kind);
2408 c->resolved_sym = gfc_get_intrinsic_sub_symbol (name);
2413 gfc_resolve_kill_sub (gfc_code * c)
2418 if (c->ext.actual->next->next->expr != NULL)
2419 kind = c->ext.actual->next->next->expr->ts.kind;
2421 kind = gfc_default_integer_kind;
2423 name = gfc_get_string (PREFIX("kill_i%d_sub"), kind);
2424 c->resolved_sym = gfc_get_intrinsic_sub_symbol (name);
2429 gfc_resolve_link_sub (gfc_code * c)
2434 if (c->ext.actual->next->next->expr != NULL)
2435 kind = c->ext.actual->next->next->expr->ts.kind;
2437 kind = gfc_default_integer_kind;
2439 name = gfc_get_string (PREFIX("link_i%d_sub"), kind);
2440 c->resolved_sym = gfc_get_intrinsic_sub_symbol (name);
2445 gfc_resolve_symlnk_sub (gfc_code * c)
2450 if (c->ext.actual->next->next->expr != NULL)
2451 kind = c->ext.actual->next->next->expr->ts.kind;
2453 kind = gfc_default_integer_kind;
2455 name = gfc_get_string (PREFIX("symlnk_i%d_sub"), kind);
2456 c->resolved_sym = gfc_get_intrinsic_sub_symbol (name);
2460 /* G77 compatibility subroutines etime() and dtime(). */
2463 gfc_resolve_etime_sub (gfc_code * c)
2467 name = gfc_get_string (PREFIX("etime_sub"));
2468 c->resolved_sym = gfc_get_intrinsic_sub_symbol (name);
2472 /* G77 compatibility subroutines itime(), idate(), ltime() and gmtime(). */
2475 gfc_resolve_itime (gfc_code * c)
2477 c->resolved_sym = gfc_get_intrinsic_sub_symbol
2478 (gfc_get_string (PREFIX("itime_i%d"),
2479 gfc_default_integer_kind));
2483 gfc_resolve_idate (gfc_code * c)
2485 c->resolved_sym = gfc_get_intrinsic_sub_symbol
2486 (gfc_get_string (PREFIX("idate_i%d"),
2487 gfc_default_integer_kind));
2491 gfc_resolve_ltime (gfc_code * c)
2493 c->resolved_sym = gfc_get_intrinsic_sub_symbol
2494 (gfc_get_string (PREFIX("ltime_i%d"),
2495 gfc_default_integer_kind));
2499 gfc_resolve_gmtime (gfc_code * c)
2501 c->resolved_sym = gfc_get_intrinsic_sub_symbol
2502 (gfc_get_string (PREFIX("gmtime_i%d"),
2503 gfc_default_integer_kind));
2507 /* G77 compatibility subroutine second(). */
2510 gfc_resolve_second_sub (gfc_code * c)
2514 name = gfc_get_string (PREFIX("second_sub"));
2515 c->resolved_sym = gfc_get_intrinsic_sub_symbol (name);
2520 gfc_resolve_sleep_sub (gfc_code * c)
2525 if (c->ext.actual->expr != NULL)
2526 kind = c->ext.actual->expr->ts.kind;
2528 kind = gfc_default_integer_kind;
2530 name = gfc_get_string (PREFIX("sleep_i%d_sub"), kind);
2531 c->resolved_sym = gfc_get_intrinsic_sub_symbol (name);
2535 /* G77 compatibility function srand(). */
2538 gfc_resolve_srand (gfc_code * c)
2541 name = gfc_get_string (PREFIX("srand"));
2542 c->resolved_sym = gfc_get_intrinsic_sub_symbol (name);
2546 /* Resolve the getarg intrinsic subroutine. */
2549 gfc_resolve_getarg (gfc_code * c)
2554 kind = gfc_default_integer_kind;
2555 name = gfc_get_string (PREFIX("getarg_i%d"), kind);
2556 c->resolved_sym = gfc_get_intrinsic_sub_symbol (name);
2559 /* Resolve the getcwd intrinsic subroutine. */
2562 gfc_resolve_getcwd_sub (gfc_code * c)
2567 if (c->ext.actual->next->expr != NULL)
2568 kind = c->ext.actual->next->expr->ts.kind;
2570 kind = gfc_default_integer_kind;
2572 name = gfc_get_string (PREFIX("getcwd_i%d_sub"), kind);
2573 c->resolved_sym = gfc_get_intrinsic_sub_symbol (name);
2577 /* Resolve the get_command intrinsic subroutine. */
2580 gfc_resolve_get_command (gfc_code * c)
2585 kind = gfc_default_integer_kind;
2586 name = gfc_get_string (PREFIX("get_command_i%d"), kind);
2587 c->resolved_sym = gfc_get_intrinsic_sub_symbol (name);
2591 /* Resolve the get_command_argument intrinsic subroutine. */
2594 gfc_resolve_get_command_argument (gfc_code * c)
2599 kind = gfc_default_integer_kind;
2600 name = gfc_get_string (PREFIX("get_command_argument_i%d"), kind);
2601 c->resolved_sym = gfc_get_intrinsic_sub_symbol (name);
2604 /* Resolve the get_environment_variable intrinsic subroutine. */
2607 gfc_resolve_get_environment_variable (gfc_code * code)
2612 kind = gfc_default_integer_kind;
2613 name = gfc_get_string (PREFIX("get_environment_variable_i%d"), kind);
2614 code->resolved_sym = gfc_get_intrinsic_sub_symbol (name);
2618 gfc_resolve_signal_sub (gfc_code * c)
2621 gfc_expr *number, *handler, *status;
2624 number = c->ext.actual->expr;
2625 handler = c->ext.actual->next->expr;
2626 status = c->ext.actual->next->next->expr;
2627 ts.type = BT_INTEGER;
2628 ts.kind = gfc_c_int_kind;
2630 /* handler can be either BT_INTEGER or BT_PROCEDURE */
2631 if (handler->ts.type == BT_INTEGER)
2633 if (handler->ts.kind != gfc_c_int_kind)
2634 gfc_convert_type (handler, &ts, 2);
2635 name = gfc_get_string (PREFIX("signal_sub_int"));
2638 name = gfc_get_string (PREFIX("signal_sub"));
2640 if (number->ts.kind != gfc_c_int_kind)
2641 gfc_convert_type (number, &ts, 2);
2642 if (status != NULL && status->ts.kind != gfc_c_int_kind)
2643 gfc_convert_type (status, &ts, 2);
2645 c->resolved_sym = gfc_get_intrinsic_sub_symbol (name);
2648 /* Resolve the SYSTEM intrinsic subroutine. */
2651 gfc_resolve_system_sub (gfc_code * c)
2655 name = gfc_get_string (PREFIX("system_sub"));
2656 c->resolved_sym = gfc_get_intrinsic_sub_symbol (name);
2659 /* Determine if the arguments to SYSTEM_CLOCK are INTEGER(4) or INTEGER(8) */
2662 gfc_resolve_system_clock (gfc_code * c)
2667 if (c->ext.actual->expr != NULL)
2668 kind = c->ext.actual->expr->ts.kind;
2669 else if (c->ext.actual->next->expr != NULL)
2670 kind = c->ext.actual->next->expr->ts.kind;
2671 else if (c->ext.actual->next->next->expr != NULL)
2672 kind = c->ext.actual->next->next->expr->ts.kind;
2674 kind = gfc_default_integer_kind;
2676 name = gfc_get_string (PREFIX("system_clock_%d"), kind);
2677 c->resolved_sym = gfc_get_intrinsic_sub_symbol (name);
2680 /* Resolve the EXIT intrinsic subroutine. */
2683 gfc_resolve_exit (gfc_code * c)
2688 if (c->ext.actual->expr != NULL)
2689 kind = c->ext.actual->expr->ts.kind;
2691 kind = gfc_default_integer_kind;
2693 name = gfc_get_string (PREFIX("exit_i%d"), kind);
2694 c->resolved_sym = gfc_get_intrinsic_sub_symbol (name);
2697 /* Resolve the FLUSH intrinsic subroutine. */
2700 gfc_resolve_flush (gfc_code * c)
2706 ts.type = BT_INTEGER;
2707 ts.kind = gfc_default_integer_kind;
2708 n = c->ext.actual->expr;
2710 && n->ts.kind != ts.kind)
2711 gfc_convert_type (n, &ts, 2);
2713 name = gfc_get_string (PREFIX("flush_i%d"), ts.kind);
2714 c->resolved_sym = gfc_get_intrinsic_sub_symbol (name);
2719 gfc_resolve_free (gfc_code * c)
2724 ts.type = BT_INTEGER;
2725 ts.kind = gfc_index_integer_kind;
2726 n = c->ext.actual->expr;
2727 if (n->ts.kind != ts.kind)
2728 gfc_convert_type (n, &ts, 2);
2730 c->resolved_sym = gfc_get_intrinsic_sub_symbol (PREFIX("free"));
2735 gfc_resolve_ctime_sub (gfc_code * c)
2739 /* ctime TIME argument is a INTEGER(KIND=8), says the doc */
2740 if (c->ext.actual->expr->ts.kind != 8)
2742 ts.type = BT_INTEGER;
2746 gfc_convert_type (c->ext.actual->expr, &ts, 2);
2749 c->resolved_sym = gfc_get_intrinsic_sub_symbol (PREFIX("ctime_sub"));
2754 gfc_resolve_fdate_sub (gfc_code * c)
2756 c->resolved_sym = gfc_get_intrinsic_sub_symbol (PREFIX ("fdate_sub"));
2761 gfc_resolve_gerror (gfc_code * c)
2763 c->resolved_sym = gfc_get_intrinsic_sub_symbol (PREFIX ("gerror"));
2768 gfc_resolve_getlog (gfc_code * c)
2770 c->resolved_sym = gfc_get_intrinsic_sub_symbol (PREFIX ("getlog"));
2775 gfc_resolve_hostnm_sub (gfc_code * c)
2780 if (c->ext.actual->next->expr != NULL)
2781 kind = c->ext.actual->next->expr->ts.kind;
2783 kind = gfc_default_integer_kind;
2785 name = gfc_get_string (PREFIX("hostnm_i%d_sub"), kind);
2786 c->resolved_sym = gfc_get_intrinsic_sub_symbol (name);
2791 gfc_resolve_perror (gfc_code * c)
2793 c->resolved_sym = gfc_get_intrinsic_sub_symbol (PREFIX ("perror_sub"));
2796 /* Resolve the STAT and FSTAT intrinsic subroutines. */
2799 gfc_resolve_stat_sub (gfc_code * c)
2803 name = gfc_get_string (PREFIX("stat_i%d_sub"), gfc_default_integer_kind);
2804 c->resolved_sym = gfc_get_intrinsic_sub_symbol (name);
2809 gfc_resolve_lstat_sub (gfc_code * c)
2813 name = gfc_get_string (PREFIX("lstat_i%d_sub"), gfc_default_integer_kind);
2814 c->resolved_sym = gfc_get_intrinsic_sub_symbol (name);
2819 gfc_resolve_fstat_sub (gfc_code * c)
2825 u = c->ext.actual->expr;
2826 ts = &c->ext.actual->next->expr->ts;
2827 if (u->ts.kind != ts->kind)
2828 gfc_convert_type (u, ts, 2);
2829 name = gfc_get_string (PREFIX("fstat_i%d_sub"), ts->kind);
2830 c->resolved_sym = gfc_get_intrinsic_sub_symbol (name);
2835 gfc_resolve_fgetc_sub (gfc_code * c)
2841 u = c->ext.actual->expr;
2842 st = c->ext.actual->next->next->expr;
2844 if (u->ts.kind != gfc_c_int_kind)
2846 ts.type = BT_INTEGER;
2847 ts.kind = gfc_c_int_kind;
2850 gfc_convert_type (u, &ts, 2);
2854 name = gfc_get_string (PREFIX("fgetc_i%d_sub"), st->ts.kind);
2856 name = gfc_get_string (PREFIX("fgetc_i%d_sub"), gfc_default_integer_kind);
2858 c->resolved_sym = gfc_get_intrinsic_sub_symbol (name);
2863 gfc_resolve_fget_sub (gfc_code * c)
2868 st = c->ext.actual->next->expr;
2870 name = gfc_get_string (PREFIX("fget_i%d_sub"), st->ts.kind);
2872 name = gfc_get_string (PREFIX("fget_i%d_sub"), gfc_default_integer_kind);
2874 c->resolved_sym = gfc_get_intrinsic_sub_symbol (name);
2879 gfc_resolve_fputc_sub (gfc_code * c)
2885 u = c->ext.actual->expr;
2886 st = c->ext.actual->next->next->expr;
2888 if (u->ts.kind != gfc_c_int_kind)
2890 ts.type = BT_INTEGER;
2891 ts.kind = gfc_c_int_kind;
2894 gfc_convert_type (u, &ts, 2);
2898 name = gfc_get_string (PREFIX("fputc_i%d_sub"), st->ts.kind);
2900 name = gfc_get_string (PREFIX("fputc_i%d_sub"), gfc_default_integer_kind);
2902 c->resolved_sym = gfc_get_intrinsic_sub_symbol (name);
2907 gfc_resolve_fput_sub (gfc_code * c)
2912 st = c->ext.actual->next->expr;
2914 name = gfc_get_string (PREFIX("fput_i%d_sub"), st->ts.kind);
2916 name = gfc_get_string (PREFIX("fput_i%d_sub"), gfc_default_integer_kind);
2918 c->resolved_sym = gfc_get_intrinsic_sub_symbol (name);
2923 gfc_resolve_ftell_sub (gfc_code * c)
2930 unit = c->ext.actual->expr;
2931 offset = c->ext.actual->next->expr;
2933 if (unit->ts.kind != gfc_c_int_kind)
2935 ts.type = BT_INTEGER;
2936 ts.kind = gfc_c_int_kind;
2939 gfc_convert_type (unit, &ts, 2);
2942 name = gfc_get_string (PREFIX("ftell_i%d_sub"), offset->ts.kind);
2943 c->resolved_sym = gfc_get_intrinsic_sub_symbol (name);
2948 gfc_resolve_ttynam_sub (gfc_code * c)
2952 if (c->ext.actual->expr->ts.kind != gfc_c_int_kind)
2954 ts.type = BT_INTEGER;
2955 ts.kind = gfc_c_int_kind;
2958 gfc_convert_type (c->ext.actual->expr, &ts, 2);
2961 c->resolved_sym = gfc_get_intrinsic_sub_symbol (PREFIX("ttynam_sub"));
2965 /* Resolve the UMASK intrinsic subroutine. */
2968 gfc_resolve_umask_sub (gfc_code * c)
2973 if (c->ext.actual->next->expr != NULL)
2974 kind = c->ext.actual->next->expr->ts.kind;
2976 kind = gfc_default_integer_kind;
2978 name = gfc_get_string (PREFIX("umask_i%d_sub"), kind);
2979 c->resolved_sym = gfc_get_intrinsic_sub_symbol (name);
2982 /* Resolve the UNLINK intrinsic subroutine. */
2985 gfc_resolve_unlink_sub (gfc_code * c)
2990 if (c->ext.actual->next->expr != NULL)
2991 kind = c->ext.actual->next->expr->ts.kind;
2993 kind = gfc_default_integer_kind;
2995 name = gfc_get_string (PREFIX("unlink_i%d_sub"), kind);
2996 c->resolved_sym = gfc_get_intrinsic_sub_symbol (name);