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 gfc_resolve_dim_arg (dim);
1889 gfc_resolve_index (ncopies, 1);
1894 gfc_resolve_sqrt (gfc_expr * f, gfc_expr * x)
1897 f->value.function.name =
1898 gfc_get_string ("__sqrt_%c%d", gfc_type_letter (x->ts.type), x->ts.kind);
1902 /* Resolve the g77 compatibility function STAT AND FSTAT. */
1905 gfc_resolve_stat (gfc_expr * f, gfc_expr * n ATTRIBUTE_UNUSED,
1906 gfc_expr * a ATTRIBUTE_UNUSED)
1908 f->ts.type = BT_INTEGER;
1909 f->ts.kind = gfc_default_integer_kind;
1910 f->value.function.name = gfc_get_string (PREFIX("stat_i%d"), f->ts.kind);
1915 gfc_resolve_lstat (gfc_expr * f, gfc_expr * n ATTRIBUTE_UNUSED,
1916 gfc_expr * a ATTRIBUTE_UNUSED)
1918 f->ts.type = BT_INTEGER;
1919 f->ts.kind = gfc_default_integer_kind;
1920 f->value.function.name = gfc_get_string (PREFIX("lstat_i%d"), f->ts.kind);
1925 gfc_resolve_fstat (gfc_expr * f, gfc_expr * n, gfc_expr * a ATTRIBUTE_UNUSED)
1927 f->ts.type = BT_INTEGER;
1928 f->ts.kind = gfc_default_integer_kind;
1929 if (n->ts.kind != f->ts.kind)
1930 gfc_convert_type (n, &f->ts, 2);
1932 f->value.function.name = gfc_get_string (PREFIX("fstat_i%d"), f->ts.kind);
1937 gfc_resolve_fgetc (gfc_expr * f, gfc_expr * u, gfc_expr * c ATTRIBUTE_UNUSED)
1941 f->ts.type = BT_INTEGER;
1942 f->ts.kind = gfc_c_int_kind;
1943 if (u->ts.kind != gfc_c_int_kind)
1945 ts.type = BT_INTEGER;
1946 ts.kind = gfc_c_int_kind;
1949 gfc_convert_type (u, &ts, 2);
1952 f->value.function.name = gfc_get_string (PREFIX("fgetc"));
1957 gfc_resolve_fget (gfc_expr * f, gfc_expr * c ATTRIBUTE_UNUSED)
1959 f->ts.type = BT_INTEGER;
1960 f->ts.kind = gfc_c_int_kind;
1961 f->value.function.name = gfc_get_string (PREFIX("fget"));
1966 gfc_resolve_fputc (gfc_expr * f, gfc_expr * u, gfc_expr * c ATTRIBUTE_UNUSED)
1970 f->ts.type = BT_INTEGER;
1971 f->ts.kind = gfc_c_int_kind;
1972 if (u->ts.kind != gfc_c_int_kind)
1974 ts.type = BT_INTEGER;
1975 ts.kind = gfc_c_int_kind;
1978 gfc_convert_type (u, &ts, 2);
1981 f->value.function.name = gfc_get_string (PREFIX("fputc"));
1986 gfc_resolve_fput (gfc_expr * f, gfc_expr * c ATTRIBUTE_UNUSED)
1988 f->ts.type = BT_INTEGER;
1989 f->ts.kind = gfc_c_int_kind;
1990 f->value.function.name = gfc_get_string (PREFIX("fput"));
1995 gfc_resolve_ftell (gfc_expr * f, gfc_expr * u)
1999 f->ts.type = BT_INTEGER;
2000 f->ts.kind = gfc_index_integer_kind;
2001 if (u->ts.kind != gfc_c_int_kind)
2003 ts.type = BT_INTEGER;
2004 ts.kind = gfc_c_int_kind;
2007 gfc_convert_type (u, &ts, 2);
2010 f->value.function.name = gfc_get_string (PREFIX("ftell"));
2015 gfc_resolve_sum (gfc_expr * f, gfc_expr * array, gfc_expr * dim,
2024 if (mask->rank == 0)
2029 /* The mask can be kind 4 or 8 for the array case. For the
2030 scalar case, coerce it to default kind unconditionally. */
2031 if ((mask->ts.kind < gfc_default_logical_kind)
2032 || (mask->rank == 0 && mask->ts.kind != gfc_default_logical_kind))
2035 ts.type = BT_LOGICAL;
2036 ts.kind = gfc_default_logical_kind;
2037 gfc_convert_type_warn (mask, &ts, 2, 0);
2045 f->rank = array->rank - 1;
2046 gfc_resolve_dim_arg (dim);
2049 f->value.function.name =
2050 gfc_get_string (PREFIX("%s_%c%d"), name,
2051 gfc_type_letter (array->ts.type), array->ts.kind);
2056 gfc_resolve_symlnk (gfc_expr * f, gfc_expr * p1 ATTRIBUTE_UNUSED,
2057 gfc_expr * p2 ATTRIBUTE_UNUSED)
2059 f->ts.type = BT_INTEGER;
2060 f->ts.kind = gfc_default_integer_kind;
2061 f->value.function.name = gfc_get_string (PREFIX("symlnk_i%d"), f->ts.kind);
2065 /* Resolve the g77 compatibility function SYSTEM. */
2068 gfc_resolve_system (gfc_expr * f, gfc_expr * n ATTRIBUTE_UNUSED)
2070 f->ts.type = BT_INTEGER;
2072 f->value.function.name = gfc_get_string (PREFIX("system"));
2077 gfc_resolve_tan (gfc_expr * f, gfc_expr * x)
2080 f->value.function.name =
2081 gfc_get_string ("__tan_%c%d", gfc_type_letter (x->ts.type), x->ts.kind);
2086 gfc_resolve_tanh (gfc_expr * f, gfc_expr * x)
2089 f->value.function.name =
2090 gfc_get_string ("__tanh_%c%d", gfc_type_letter (x->ts.type), x->ts.kind);
2095 gfc_resolve_time (gfc_expr * f)
2097 f->ts.type = BT_INTEGER;
2099 f->value.function.name = gfc_get_string (PREFIX("time_func"));
2104 gfc_resolve_time8 (gfc_expr * f)
2106 f->ts.type = BT_INTEGER;
2108 f->value.function.name = gfc_get_string (PREFIX("time8_func"));
2113 gfc_resolve_transfer (gfc_expr * f, gfc_expr * source ATTRIBUTE_UNUSED,
2114 gfc_expr * mold, gfc_expr * size)
2116 /* TODO: Make this do something meaningful. */
2117 static char transfer0[] = "__transfer0", transfer1[] = "__transfer1";
2121 if (size == NULL && mold->rank == 0)
2124 f->value.function.name = transfer0;
2129 f->value.function.name = transfer1;
2130 if (size && gfc_is_constant_expr (size))
2132 f->shape = gfc_get_shape (1);
2133 mpz_init_set (f->shape[0], size->value.integer);
2140 gfc_resolve_transpose (gfc_expr * f, gfc_expr * matrix)
2146 f->shape = gfc_get_shape (2);
2147 mpz_init_set (f->shape[0], matrix->shape[1]);
2148 mpz_init_set (f->shape[1], matrix->shape[0]);
2151 switch (matrix->ts.kind)
2157 switch (matrix->ts.type)
2161 f->value.function.name =
2162 gfc_get_string (PREFIX("transpose_%c%d"),
2163 gfc_type_letter (matrix->ts.type),
2169 /* Use the integer routines for real and logical cases. This
2170 assumes they all have the same alignment requirements. */
2171 f->value.function.name =
2172 gfc_get_string (PREFIX("transpose_i%d"), matrix->ts.kind);
2176 f->value.function.name = PREFIX("transpose");
2182 f->value.function.name = (matrix->ts.type == BT_CHARACTER
2183 ? PREFIX("transpose_char")
2184 : PREFIX("transpose"));
2191 gfc_resolve_trim (gfc_expr * f, gfc_expr * string)
2193 f->ts.type = BT_CHARACTER;
2194 f->ts.kind = string->ts.kind;
2195 f->value.function.name = gfc_get_string ("__trim_%d", string->ts.kind);
2200 gfc_resolve_ubound (gfc_expr * f, gfc_expr * array,
2203 static char ubound[] = "__ubound";
2205 f->ts.type = BT_INTEGER;
2206 f->ts.kind = gfc_default_integer_kind;
2211 f->shape = gfc_get_shape (1);
2212 mpz_init_set_ui (f->shape[0], array->rank);
2215 f->value.function.name = ubound;
2219 /* Resolve the g77 compatibility function UMASK. */
2222 gfc_resolve_umask (gfc_expr * f, gfc_expr * n)
2224 f->ts.type = BT_INTEGER;
2225 f->ts.kind = n->ts.kind;
2226 f->value.function.name = gfc_get_string (PREFIX("umask_i%d"), n->ts.kind);
2230 /* Resolve the g77 compatibility function UNLINK. */
2233 gfc_resolve_unlink (gfc_expr * f, gfc_expr * n ATTRIBUTE_UNUSED)
2235 f->ts.type = BT_INTEGER;
2237 f->value.function.name = gfc_get_string (PREFIX("unlink"));
2242 gfc_resolve_ttynam (gfc_expr * f, gfc_expr * unit)
2246 f->ts.type = BT_CHARACTER;
2247 f->ts.kind = gfc_default_character_kind;
2249 if (unit->ts.kind != gfc_c_int_kind)
2251 ts.type = BT_INTEGER;
2252 ts.kind = gfc_c_int_kind;
2255 gfc_convert_type (unit, &ts, 2);
2258 f->value.function.name = gfc_get_string (PREFIX("ttynam"));
2263 gfc_resolve_unpack (gfc_expr * f, gfc_expr * vector, gfc_expr * mask,
2264 gfc_expr * field ATTRIBUTE_UNUSED)
2267 f->rank = mask->rank;
2269 f->value.function.name =
2270 gfc_get_string (PREFIX("unpack%d%s"), field->rank > 0 ? 1 : 0,
2271 vector->ts.type == BT_CHARACTER ? "_char" : "");
2276 gfc_resolve_verify (gfc_expr * f, gfc_expr * string,
2277 gfc_expr * set ATTRIBUTE_UNUSED,
2278 gfc_expr * back ATTRIBUTE_UNUSED)
2280 f->ts.type = BT_INTEGER;
2281 f->ts.kind = gfc_default_integer_kind;
2282 f->value.function.name = gfc_get_string ("__verify_%d", string->ts.kind);
2287 gfc_resolve_xor (gfc_expr * f, gfc_expr * i, gfc_expr * j)
2289 f->ts.type = i->ts.type;
2290 f->ts.kind = gfc_kind_max (i,j);
2292 if (i->ts.kind != j->ts.kind)
2294 if (i->ts.kind == gfc_kind_max (i,j))
2295 gfc_convert_type(j, &i->ts, 2);
2297 gfc_convert_type(i, &j->ts, 2);
2300 f->value.function.name = gfc_get_string ("__xor_%c%d",
2301 gfc_type_letter (i->ts.type),
2306 /* Intrinsic subroutine resolution. */
2309 gfc_resolve_alarm_sub (gfc_code * c)
2312 gfc_expr *seconds, *handler, *status;
2315 seconds = c->ext.actual->expr;
2316 handler = c->ext.actual->next->expr;
2317 status = c->ext.actual->next->next->expr;
2318 ts.type = BT_INTEGER;
2319 ts.kind = gfc_c_int_kind;
2321 /* handler can be either BT_INTEGER or BT_PROCEDURE */
2322 if (handler->ts.type == BT_INTEGER)
2324 if (handler->ts.kind != gfc_c_int_kind)
2325 gfc_convert_type (handler, &ts, 2);
2326 name = gfc_get_string (PREFIX("alarm_sub_int"));
2329 name = gfc_get_string (PREFIX("alarm_sub"));
2331 if (seconds->ts.kind != gfc_c_int_kind)
2332 gfc_convert_type (seconds, &ts, 2);
2333 if (status != NULL && status->ts.kind != gfc_c_int_kind)
2334 gfc_convert_type (status, &ts, 2);
2336 c->resolved_sym = gfc_get_intrinsic_sub_symbol (name);
2340 gfc_resolve_cpu_time (gfc_code * c)
2344 name = gfc_get_string (PREFIX("cpu_time_%d"),
2345 c->ext.actual->expr->ts.kind);
2346 c->resolved_sym = gfc_get_intrinsic_sub_symbol (name);
2351 gfc_resolve_mvbits (gfc_code * c)
2356 kind = c->ext.actual->expr->ts.kind;
2357 name = gfc_get_string (PREFIX("mvbits_i%d"), kind);
2359 c->resolved_sym = gfc_get_intrinsic_sub_symbol (name);
2364 gfc_resolve_random_number (gfc_code * c)
2369 kind = c->ext.actual->expr->ts.kind;
2370 if (c->ext.actual->expr->rank == 0)
2371 name = gfc_get_string (PREFIX("random_r%d"), kind);
2373 name = gfc_get_string (PREFIX("arandom_r%d"), kind);
2375 c->resolved_sym = gfc_get_intrinsic_sub_symbol (name);
2380 gfc_resolve_rename_sub (gfc_code * c)
2385 if (c->ext.actual->next->next->expr != NULL)
2386 kind = c->ext.actual->next->next->expr->ts.kind;
2388 kind = gfc_default_integer_kind;
2390 name = gfc_get_string (PREFIX("rename_i%d_sub"), kind);
2391 c->resolved_sym = gfc_get_intrinsic_sub_symbol (name);
2396 gfc_resolve_kill_sub (gfc_code * c)
2401 if (c->ext.actual->next->next->expr != NULL)
2402 kind = c->ext.actual->next->next->expr->ts.kind;
2404 kind = gfc_default_integer_kind;
2406 name = gfc_get_string (PREFIX("kill_i%d_sub"), kind);
2407 c->resolved_sym = gfc_get_intrinsic_sub_symbol (name);
2412 gfc_resolve_link_sub (gfc_code * c)
2417 if (c->ext.actual->next->next->expr != NULL)
2418 kind = c->ext.actual->next->next->expr->ts.kind;
2420 kind = gfc_default_integer_kind;
2422 name = gfc_get_string (PREFIX("link_i%d_sub"), kind);
2423 c->resolved_sym = gfc_get_intrinsic_sub_symbol (name);
2428 gfc_resolve_symlnk_sub (gfc_code * c)
2433 if (c->ext.actual->next->next->expr != NULL)
2434 kind = c->ext.actual->next->next->expr->ts.kind;
2436 kind = gfc_default_integer_kind;
2438 name = gfc_get_string (PREFIX("symlnk_i%d_sub"), kind);
2439 c->resolved_sym = gfc_get_intrinsic_sub_symbol (name);
2443 /* G77 compatibility subroutines etime() and dtime(). */
2446 gfc_resolve_etime_sub (gfc_code * c)
2450 name = gfc_get_string (PREFIX("etime_sub"));
2451 c->resolved_sym = gfc_get_intrinsic_sub_symbol (name);
2455 /* G77 compatibility subroutines itime(), idate(), ltime() and gmtime(). */
2458 gfc_resolve_itime (gfc_code * c)
2460 c->resolved_sym = gfc_get_intrinsic_sub_symbol
2461 (gfc_get_string (PREFIX("itime_i%d"),
2462 gfc_default_integer_kind));
2466 gfc_resolve_idate (gfc_code * c)
2468 c->resolved_sym = gfc_get_intrinsic_sub_symbol
2469 (gfc_get_string (PREFIX("idate_i%d"),
2470 gfc_default_integer_kind));
2474 gfc_resolve_ltime (gfc_code * c)
2476 c->resolved_sym = gfc_get_intrinsic_sub_symbol
2477 (gfc_get_string (PREFIX("ltime_i%d"),
2478 gfc_default_integer_kind));
2482 gfc_resolve_gmtime (gfc_code * c)
2484 c->resolved_sym = gfc_get_intrinsic_sub_symbol
2485 (gfc_get_string (PREFIX("gmtime_i%d"),
2486 gfc_default_integer_kind));
2490 /* G77 compatibility subroutine second(). */
2493 gfc_resolve_second_sub (gfc_code * c)
2497 name = gfc_get_string (PREFIX("second_sub"));
2498 c->resolved_sym = gfc_get_intrinsic_sub_symbol (name);
2503 gfc_resolve_sleep_sub (gfc_code * c)
2508 if (c->ext.actual->expr != NULL)
2509 kind = c->ext.actual->expr->ts.kind;
2511 kind = gfc_default_integer_kind;
2513 name = gfc_get_string (PREFIX("sleep_i%d_sub"), kind);
2514 c->resolved_sym = gfc_get_intrinsic_sub_symbol (name);
2518 /* G77 compatibility function srand(). */
2521 gfc_resolve_srand (gfc_code * c)
2524 name = gfc_get_string (PREFIX("srand"));
2525 c->resolved_sym = gfc_get_intrinsic_sub_symbol (name);
2529 /* Resolve the getarg intrinsic subroutine. */
2532 gfc_resolve_getarg (gfc_code * c)
2537 kind = gfc_default_integer_kind;
2538 name = gfc_get_string (PREFIX("getarg_i%d"), kind);
2539 c->resolved_sym = gfc_get_intrinsic_sub_symbol (name);
2542 /* Resolve the getcwd intrinsic subroutine. */
2545 gfc_resolve_getcwd_sub (gfc_code * c)
2550 if (c->ext.actual->next->expr != NULL)
2551 kind = c->ext.actual->next->expr->ts.kind;
2553 kind = gfc_default_integer_kind;
2555 name = gfc_get_string (PREFIX("getcwd_i%d_sub"), kind);
2556 c->resolved_sym = gfc_get_intrinsic_sub_symbol (name);
2560 /* Resolve the get_command intrinsic subroutine. */
2563 gfc_resolve_get_command (gfc_code * c)
2568 kind = gfc_default_integer_kind;
2569 name = gfc_get_string (PREFIX("get_command_i%d"), kind);
2570 c->resolved_sym = gfc_get_intrinsic_sub_symbol (name);
2574 /* Resolve the get_command_argument intrinsic subroutine. */
2577 gfc_resolve_get_command_argument (gfc_code * c)
2582 kind = gfc_default_integer_kind;
2583 name = gfc_get_string (PREFIX("get_command_argument_i%d"), kind);
2584 c->resolved_sym = gfc_get_intrinsic_sub_symbol (name);
2587 /* Resolve the get_environment_variable intrinsic subroutine. */
2590 gfc_resolve_get_environment_variable (gfc_code * code)
2595 kind = gfc_default_integer_kind;
2596 name = gfc_get_string (PREFIX("get_environment_variable_i%d"), kind);
2597 code->resolved_sym = gfc_get_intrinsic_sub_symbol (name);
2601 gfc_resolve_signal_sub (gfc_code * c)
2604 gfc_expr *number, *handler, *status;
2607 number = c->ext.actual->expr;
2608 handler = c->ext.actual->next->expr;
2609 status = c->ext.actual->next->next->expr;
2610 ts.type = BT_INTEGER;
2611 ts.kind = gfc_c_int_kind;
2613 /* handler can be either BT_INTEGER or BT_PROCEDURE */
2614 if (handler->ts.type == BT_INTEGER)
2616 if (handler->ts.kind != gfc_c_int_kind)
2617 gfc_convert_type (handler, &ts, 2);
2618 name = gfc_get_string (PREFIX("signal_sub_int"));
2621 name = gfc_get_string (PREFIX("signal_sub"));
2623 if (number->ts.kind != gfc_c_int_kind)
2624 gfc_convert_type (number, &ts, 2);
2625 if (status != NULL && status->ts.kind != gfc_c_int_kind)
2626 gfc_convert_type (status, &ts, 2);
2628 c->resolved_sym = gfc_get_intrinsic_sub_symbol (name);
2631 /* Resolve the SYSTEM intrinsic subroutine. */
2634 gfc_resolve_system_sub (gfc_code * c)
2638 name = gfc_get_string (PREFIX("system_sub"));
2639 c->resolved_sym = gfc_get_intrinsic_sub_symbol (name);
2642 /* Determine if the arguments to SYSTEM_CLOCK are INTEGER(4) or INTEGER(8) */
2645 gfc_resolve_system_clock (gfc_code * c)
2650 if (c->ext.actual->expr != NULL)
2651 kind = c->ext.actual->expr->ts.kind;
2652 else if (c->ext.actual->next->expr != NULL)
2653 kind = c->ext.actual->next->expr->ts.kind;
2654 else if (c->ext.actual->next->next->expr != NULL)
2655 kind = c->ext.actual->next->next->expr->ts.kind;
2657 kind = gfc_default_integer_kind;
2659 name = gfc_get_string (PREFIX("system_clock_%d"), kind);
2660 c->resolved_sym = gfc_get_intrinsic_sub_symbol (name);
2663 /* Resolve the EXIT intrinsic subroutine. */
2666 gfc_resolve_exit (gfc_code * c)
2671 if (c->ext.actual->expr != NULL)
2672 kind = c->ext.actual->expr->ts.kind;
2674 kind = gfc_default_integer_kind;
2676 name = gfc_get_string (PREFIX("exit_i%d"), kind);
2677 c->resolved_sym = gfc_get_intrinsic_sub_symbol (name);
2680 /* Resolve the FLUSH intrinsic subroutine. */
2683 gfc_resolve_flush (gfc_code * c)
2689 ts.type = BT_INTEGER;
2690 ts.kind = gfc_default_integer_kind;
2691 n = c->ext.actual->expr;
2693 && n->ts.kind != ts.kind)
2694 gfc_convert_type (n, &ts, 2);
2696 name = gfc_get_string (PREFIX("flush_i%d"), ts.kind);
2697 c->resolved_sym = gfc_get_intrinsic_sub_symbol (name);
2702 gfc_resolve_free (gfc_code * c)
2707 ts.type = BT_INTEGER;
2708 ts.kind = gfc_index_integer_kind;
2709 n = c->ext.actual->expr;
2710 if (n->ts.kind != ts.kind)
2711 gfc_convert_type (n, &ts, 2);
2713 c->resolved_sym = gfc_get_intrinsic_sub_symbol (PREFIX("free"));
2718 gfc_resolve_ctime_sub (gfc_code * c)
2722 /* ctime TIME argument is a INTEGER(KIND=8), says the doc */
2723 if (c->ext.actual->expr->ts.kind != 8)
2725 ts.type = BT_INTEGER;
2729 gfc_convert_type (c->ext.actual->expr, &ts, 2);
2732 c->resolved_sym = gfc_get_intrinsic_sub_symbol (PREFIX("ctime_sub"));
2737 gfc_resolve_fdate_sub (gfc_code * c)
2739 c->resolved_sym = gfc_get_intrinsic_sub_symbol (PREFIX ("fdate_sub"));
2744 gfc_resolve_gerror (gfc_code * c)
2746 c->resolved_sym = gfc_get_intrinsic_sub_symbol (PREFIX ("gerror"));
2751 gfc_resolve_getlog (gfc_code * c)
2753 c->resolved_sym = gfc_get_intrinsic_sub_symbol (PREFIX ("getlog"));
2758 gfc_resolve_hostnm_sub (gfc_code * c)
2763 if (c->ext.actual->next->expr != NULL)
2764 kind = c->ext.actual->next->expr->ts.kind;
2766 kind = gfc_default_integer_kind;
2768 name = gfc_get_string (PREFIX("hostnm_i%d_sub"), kind);
2769 c->resolved_sym = gfc_get_intrinsic_sub_symbol (name);
2774 gfc_resolve_perror (gfc_code * c)
2776 c->resolved_sym = gfc_get_intrinsic_sub_symbol (PREFIX ("perror_sub"));
2779 /* Resolve the STAT and FSTAT intrinsic subroutines. */
2782 gfc_resolve_stat_sub (gfc_code * c)
2786 name = gfc_get_string (PREFIX("stat_i%d_sub"), gfc_default_integer_kind);
2787 c->resolved_sym = gfc_get_intrinsic_sub_symbol (name);
2792 gfc_resolve_lstat_sub (gfc_code * c)
2796 name = gfc_get_string (PREFIX("lstat_i%d_sub"), gfc_default_integer_kind);
2797 c->resolved_sym = gfc_get_intrinsic_sub_symbol (name);
2802 gfc_resolve_fstat_sub (gfc_code * c)
2808 u = c->ext.actual->expr;
2809 ts = &c->ext.actual->next->expr->ts;
2810 if (u->ts.kind != ts->kind)
2811 gfc_convert_type (u, ts, 2);
2812 name = gfc_get_string (PREFIX("fstat_i%d_sub"), ts->kind);
2813 c->resolved_sym = gfc_get_intrinsic_sub_symbol (name);
2818 gfc_resolve_fgetc_sub (gfc_code * c)
2824 u = c->ext.actual->expr;
2825 st = c->ext.actual->next->next->expr;
2827 if (u->ts.kind != gfc_c_int_kind)
2829 ts.type = BT_INTEGER;
2830 ts.kind = gfc_c_int_kind;
2833 gfc_convert_type (u, &ts, 2);
2837 name = gfc_get_string (PREFIX("fgetc_i%d_sub"), st->ts.kind);
2839 name = gfc_get_string (PREFIX("fgetc_i%d_sub"), gfc_default_integer_kind);
2841 c->resolved_sym = gfc_get_intrinsic_sub_symbol (name);
2846 gfc_resolve_fget_sub (gfc_code * c)
2851 st = c->ext.actual->next->expr;
2853 name = gfc_get_string (PREFIX("fget_i%d_sub"), st->ts.kind);
2855 name = gfc_get_string (PREFIX("fget_i%d_sub"), gfc_default_integer_kind);
2857 c->resolved_sym = gfc_get_intrinsic_sub_symbol (name);
2862 gfc_resolve_fputc_sub (gfc_code * c)
2868 u = c->ext.actual->expr;
2869 st = c->ext.actual->next->next->expr;
2871 if (u->ts.kind != gfc_c_int_kind)
2873 ts.type = BT_INTEGER;
2874 ts.kind = gfc_c_int_kind;
2877 gfc_convert_type (u, &ts, 2);
2881 name = gfc_get_string (PREFIX("fputc_i%d_sub"), st->ts.kind);
2883 name = gfc_get_string (PREFIX("fputc_i%d_sub"), gfc_default_integer_kind);
2885 c->resolved_sym = gfc_get_intrinsic_sub_symbol (name);
2890 gfc_resolve_fput_sub (gfc_code * c)
2895 st = c->ext.actual->next->expr;
2897 name = gfc_get_string (PREFIX("fput_i%d_sub"), st->ts.kind);
2899 name = gfc_get_string (PREFIX("fput_i%d_sub"), gfc_default_integer_kind);
2901 c->resolved_sym = gfc_get_intrinsic_sub_symbol (name);
2906 gfc_resolve_ftell_sub (gfc_code * c)
2913 unit = c->ext.actual->expr;
2914 offset = c->ext.actual->next->expr;
2916 if (unit->ts.kind != gfc_c_int_kind)
2918 ts.type = BT_INTEGER;
2919 ts.kind = gfc_c_int_kind;
2922 gfc_convert_type (unit, &ts, 2);
2925 name = gfc_get_string (PREFIX("ftell_i%d_sub"), offset->ts.kind);
2926 c->resolved_sym = gfc_get_intrinsic_sub_symbol (name);
2931 gfc_resolve_ttynam_sub (gfc_code * c)
2935 if (c->ext.actual->expr->ts.kind != gfc_c_int_kind)
2937 ts.type = BT_INTEGER;
2938 ts.kind = gfc_c_int_kind;
2941 gfc_convert_type (c->ext.actual->expr, &ts, 2);
2944 c->resolved_sym = gfc_get_intrinsic_sub_symbol (PREFIX("ttynam_sub"));
2948 /* Resolve the UMASK intrinsic subroutine. */
2951 gfc_resolve_umask_sub (gfc_code * c)
2956 if (c->ext.actual->next->expr != NULL)
2957 kind = c->ext.actual->next->expr->ts.kind;
2959 kind = gfc_default_integer_kind;
2961 name = gfc_get_string (PREFIX("umask_i%d_sub"), kind);
2962 c->resolved_sym = gfc_get_intrinsic_sub_symbol (name);
2965 /* Resolve the UNLINK intrinsic subroutine. */
2968 gfc_resolve_unlink_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("unlink_i%d_sub"), kind);
2979 c->resolved_sym = gfc_get_intrinsic_sub_symbol (name);