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_index_func (gfc_expr * f, gfc_expr * str,
881 ATTRIBUTE_UNUSED gfc_expr * sub_str, gfc_expr * back)
885 f->ts.type = BT_INTEGER;
886 f->ts.kind = gfc_default_integer_kind;
888 if (back && back->ts.kind != gfc_default_integer_kind)
890 ts.type = BT_LOGICAL;
891 ts.kind = gfc_default_integer_kind;
894 gfc_convert_type (back, &ts, 2);
897 f->value.function.name =
898 gfc_get_string ("__index_%d_i%d", str->ts.kind, f->ts.kind);
903 gfc_resolve_int (gfc_expr * f, gfc_expr * a, gfc_expr * kind)
905 f->ts.type = BT_INTEGER;
906 f->ts.kind = (kind == NULL) ? gfc_default_integer_kind
907 : mpz_get_si (kind->value.integer);
909 f->value.function.name =
910 gfc_get_string ("__int_%d_%c%d", f->ts.kind, gfc_type_letter (a->ts.type),
916 gfc_resolve_int2 (gfc_expr * f, gfc_expr * a)
918 f->ts.type = BT_INTEGER;
921 f->value.function.name =
922 gfc_get_string ("__int_%d_%c%d", f->ts.kind, gfc_type_letter (a->ts.type),
928 gfc_resolve_int8 (gfc_expr * f, gfc_expr * a)
930 f->ts.type = BT_INTEGER;
933 f->value.function.name =
934 gfc_get_string ("__int_%d_%c%d", f->ts.kind, gfc_type_letter (a->ts.type),
940 gfc_resolve_long (gfc_expr * f, gfc_expr * a)
942 f->ts.type = BT_INTEGER;
945 f->value.function.name =
946 gfc_get_string ("__int_%d_%c%d", f->ts.kind, gfc_type_letter (a->ts.type),
952 gfc_resolve_isatty (gfc_expr * f, gfc_expr * u)
956 f->ts.type = BT_LOGICAL;
957 f->ts.kind = gfc_default_integer_kind;
958 if (u->ts.kind != gfc_c_int_kind)
960 ts.type = BT_INTEGER;
961 ts.kind = gfc_c_int_kind;
964 gfc_convert_type (u, &ts, 2);
967 f->value.function.name = gfc_get_string (PREFIX("isatty_l%d"), f->ts.kind);
972 gfc_resolve_ishft (gfc_expr * f, gfc_expr * i, gfc_expr * shift)
975 f->value.function.name =
976 gfc_get_string ("__ishft_%d_%d", i->ts.kind, shift->ts.kind);
981 gfc_resolve_rshift (gfc_expr * f, gfc_expr * i, gfc_expr * shift)
984 f->value.function.name =
985 gfc_get_string ("__rshift_%d_%d", i->ts.kind, shift->ts.kind);
990 gfc_resolve_lshift (gfc_expr * f, gfc_expr * i, gfc_expr * shift)
993 f->value.function.name =
994 gfc_get_string ("__lshift_%d_%d", i->ts.kind, shift->ts.kind);
999 gfc_resolve_ishftc (gfc_expr * f, gfc_expr * i, gfc_expr * shift,
1004 s_kind = (size == NULL) ? gfc_default_integer_kind : shift->ts.kind;
1007 f->value.function.name =
1008 gfc_get_string ("__ishftc_%d_%d_%d", i->ts.kind, shift->ts.kind, s_kind);
1013 gfc_resolve_kill (gfc_expr * f, ATTRIBUTE_UNUSED gfc_expr * p,
1014 ATTRIBUTE_UNUSED gfc_expr * s)
1016 f->ts.type = BT_INTEGER;
1017 f->ts.kind = gfc_default_integer_kind;
1019 f->value.function.name = gfc_get_string (PREFIX("kill_i%d"), f->ts.kind);
1024 gfc_resolve_lbound (gfc_expr * f, gfc_expr * array,
1027 static char lbound[] = "__lbound";
1029 f->ts.type = BT_INTEGER;
1030 f->ts.kind = gfc_default_integer_kind;
1035 f->shape = gfc_get_shape (1);
1036 mpz_init_set_ui (f->shape[0], array->rank);
1039 f->value.function.name = lbound;
1044 gfc_resolve_len (gfc_expr * f, gfc_expr * string)
1046 f->ts.type = BT_INTEGER;
1047 f->ts.kind = gfc_default_integer_kind;
1048 f->value.function.name = gfc_get_string ("__len_%d_i%d", string->ts.kind,
1049 gfc_default_integer_kind);
1054 gfc_resolve_len_trim (gfc_expr * f, gfc_expr * string)
1056 f->ts.type = BT_INTEGER;
1057 f->ts.kind = gfc_default_integer_kind;
1058 f->value.function.name = gfc_get_string ("__len_trim%d", string->ts.kind);
1063 gfc_resolve_link (gfc_expr * f, gfc_expr * p1 ATTRIBUTE_UNUSED,
1064 gfc_expr * p2 ATTRIBUTE_UNUSED)
1066 f->ts.type = BT_INTEGER;
1067 f->ts.kind = gfc_default_integer_kind;
1068 f->value.function.name = gfc_get_string (PREFIX("link_i%d"), f->ts.kind);
1073 gfc_resolve_loc (gfc_expr *f, gfc_expr *x)
1075 f->ts.type= BT_INTEGER;
1076 f->ts.kind = gfc_index_integer_kind;
1077 f->value.function.name = gfc_get_string ("__loc_%d", x->ts.kind);
1082 gfc_resolve_log (gfc_expr * f, gfc_expr * x)
1085 f->value.function.name =
1086 gfc_get_string ("__log_%c%d", gfc_type_letter (x->ts.type), x->ts.kind);
1091 gfc_resolve_log10 (gfc_expr * f, gfc_expr * x)
1094 f->value.function.name =
1095 gfc_get_string ("__log10_%c%d", gfc_type_letter (x->ts.type), x->ts.kind);
1100 gfc_resolve_logical (gfc_expr * f, gfc_expr * a, gfc_expr * kind)
1102 f->ts.type = BT_LOGICAL;
1103 f->ts.kind = (kind == NULL) ? gfc_default_logical_kind
1104 : mpz_get_si (kind->value.integer);
1107 f->value.function.name =
1108 gfc_get_string ("__logical_%d_%c%d", f->ts.kind,
1109 gfc_type_letter (a->ts.type), a->ts.kind);
1114 gfc_resolve_malloc (gfc_expr * f, gfc_expr * size)
1116 if (size->ts.kind < gfc_index_integer_kind)
1120 ts.type = BT_INTEGER;
1121 ts.kind = gfc_index_integer_kind;
1122 gfc_convert_type_warn (size, &ts, 2, 0);
1125 f->ts.type = BT_INTEGER;
1126 f->ts.kind = gfc_index_integer_kind;
1127 f->value.function.name = gfc_get_string (PREFIX("malloc"));
1132 gfc_resolve_matmul (gfc_expr * f, gfc_expr * a, gfc_expr * b)
1136 if (a->ts.type == BT_LOGICAL && b->ts.type == BT_LOGICAL)
1138 f->ts.type = BT_LOGICAL;
1139 f->ts.kind = gfc_default_logical_kind;
1143 temp.expr_type = EXPR_OP;
1144 gfc_clear_ts (&temp.ts);
1145 temp.value.op.operator = INTRINSIC_NONE;
1146 temp.value.op.op1 = a;
1147 temp.value.op.op2 = b;
1148 gfc_type_convert_binary (&temp);
1152 f->rank = (a->rank == 2 && b->rank == 2) ? 2 : 1;
1154 f->value.function.name =
1155 gfc_get_string (PREFIX("matmul_%c%d"), gfc_type_letter (f->ts.type),
1161 gfc_resolve_minmax (const char * name, gfc_expr * f, gfc_actual_arglist * args)
1163 gfc_actual_arglist *a;
1165 f->ts.type = args->expr->ts.type;
1166 f->ts.kind = args->expr->ts.kind;
1167 /* Find the largest type kind. */
1168 for (a = args->next; a; a = a->next)
1170 if (a->expr->ts.kind > f->ts.kind)
1171 f->ts.kind = a->expr->ts.kind;
1174 /* Convert all parameters to the required kind. */
1175 for (a = args; a; a = a->next)
1177 if (a->expr->ts.kind != f->ts.kind)
1178 gfc_convert_type (a->expr, &f->ts, 2);
1181 f->value.function.name =
1182 gfc_get_string (name, gfc_type_letter (f->ts.type), f->ts.kind);
1187 gfc_resolve_max (gfc_expr * f, gfc_actual_arglist * args)
1189 gfc_resolve_minmax ("__max_%c%d", f, args);
1194 gfc_resolve_maxloc (gfc_expr * f, gfc_expr * array, gfc_expr * dim,
1200 f->ts.type = BT_INTEGER;
1201 f->ts.kind = gfc_default_integer_kind;
1206 f->shape = gfc_get_shape (1);
1207 mpz_init_set_si (f->shape[0], array->rank);
1211 f->rank = array->rank - 1;
1212 gfc_resolve_dim_arg (dim);
1213 if (array->shape && dim->expr_type == EXPR_CONSTANT)
1215 idim = (int) mpz_get_si (dim->value.integer);
1216 f->shape = gfc_get_shape (f->rank);
1217 for (i = 0, j = 0; i < f->rank; i++, j++)
1219 if (i == (idim - 1))
1221 mpz_init_set (f->shape[i], array->shape[j]);
1228 if (mask->rank == 0)
1233 /* The mask can be kind 4 or 8 for the array case. For the
1234 scalar case, coerce it to default kind unconditionally. */
1235 if ((mask->ts.kind < gfc_default_logical_kind)
1236 || (mask->rank == 0 && mask->ts.kind != gfc_default_logical_kind))
1239 ts.type = BT_LOGICAL;
1240 ts.kind = gfc_default_logical_kind;
1241 gfc_convert_type_warn (mask, &ts, 2, 0);
1247 f->value.function.name =
1248 gfc_get_string (PREFIX("%s%d_%d_%c%d"), name, dim != NULL, f->ts.kind,
1249 gfc_type_letter (array->ts.type), array->ts.kind);
1254 gfc_resolve_maxval (gfc_expr * f, gfc_expr * array, gfc_expr * dim,
1264 f->rank = array->rank - 1;
1265 gfc_resolve_dim_arg (dim);
1267 if (f->rank && array->shape && dim->expr_type == EXPR_CONSTANT)
1269 idim = (int) mpz_get_si (dim->value.integer);
1270 f->shape = gfc_get_shape (f->rank);
1271 for (i = 0, j = 0; i < f->rank; i++, j++)
1273 if (i == (idim - 1))
1275 mpz_init_set (f->shape[i], array->shape[j]);
1282 if (mask->rank == 0)
1287 /* The mask can be kind 4 or 8 for the array case. For the
1288 scalar case, coerce it to default kind unconditionally. */
1289 if ((mask->ts.kind < gfc_default_logical_kind)
1290 || (mask->rank == 0 && mask->ts.kind != gfc_default_logical_kind))
1293 ts.type = BT_LOGICAL;
1294 ts.kind = gfc_default_logical_kind;
1295 gfc_convert_type_warn (mask, &ts, 2, 0);
1301 f->value.function.name =
1302 gfc_get_string (PREFIX("%s_%c%d"), name,
1303 gfc_type_letter (array->ts.type), array->ts.kind);
1308 gfc_resolve_mclock (gfc_expr * f)
1310 f->ts.type = BT_INTEGER;
1312 f->value.function.name = PREFIX("mclock");
1317 gfc_resolve_mclock8 (gfc_expr * f)
1319 f->ts.type = BT_INTEGER;
1321 f->value.function.name = PREFIX("mclock8");
1326 gfc_resolve_merge (gfc_expr * f, gfc_expr * tsource,
1327 gfc_expr * fsource ATTRIBUTE_UNUSED,
1328 gfc_expr * mask ATTRIBUTE_UNUSED)
1330 if (tsource->ts.type == BT_CHARACTER)
1331 check_charlen_present (tsource);
1333 f->ts = tsource->ts;
1334 f->value.function.name =
1335 gfc_get_string ("__merge_%c%d", gfc_type_letter (tsource->ts.type),
1341 gfc_resolve_min (gfc_expr * f, gfc_actual_arglist * args)
1343 gfc_resolve_minmax ("__min_%c%d", f, args);
1348 gfc_resolve_minloc (gfc_expr * f, gfc_expr * array, gfc_expr * dim,
1354 f->ts.type = BT_INTEGER;
1355 f->ts.kind = gfc_default_integer_kind;
1360 f->shape = gfc_get_shape (1);
1361 mpz_init_set_si (f->shape[0], array->rank);
1365 f->rank = array->rank - 1;
1366 gfc_resolve_dim_arg (dim);
1367 if (array->shape && dim->expr_type == EXPR_CONSTANT)
1369 idim = (int) mpz_get_si (dim->value.integer);
1370 f->shape = gfc_get_shape (f->rank);
1371 for (i = 0, j = 0; i < f->rank; i++, j++)
1373 if (i == (idim - 1))
1375 mpz_init_set (f->shape[i], array->shape[j]);
1382 if (mask->rank == 0)
1387 /* The mask can be kind 4 or 8 for the array case. For the
1388 scalar case, coerce it to default kind unconditionally. */
1389 if ((mask->ts.kind < gfc_default_logical_kind)
1390 || (mask->rank == 0 && mask->ts.kind != gfc_default_logical_kind))
1393 ts.type = BT_LOGICAL;
1394 ts.kind = gfc_default_logical_kind;
1395 gfc_convert_type_warn (mask, &ts, 2, 0);
1401 f->value.function.name =
1402 gfc_get_string (PREFIX("%s%d_%d_%c%d"), name, dim != NULL, f->ts.kind,
1403 gfc_type_letter (array->ts.type), array->ts.kind);
1408 gfc_resolve_minval (gfc_expr * f, gfc_expr * array, gfc_expr * dim,
1418 f->rank = array->rank - 1;
1419 gfc_resolve_dim_arg (dim);
1421 if (f->rank && array->shape && dim->expr_type == EXPR_CONSTANT)
1423 idim = (int) mpz_get_si (dim->value.integer);
1424 f->shape = gfc_get_shape (f->rank);
1425 for (i = 0, j = 0; i < f->rank; i++, j++)
1427 if (i == (idim - 1))
1429 mpz_init_set (f->shape[i], array->shape[j]);
1436 if (mask->rank == 0)
1441 /* The mask can be kind 4 or 8 for the array case. For the
1442 scalar case, coerce it to default kind unconditionally. */
1443 if ((mask->ts.kind < gfc_default_logical_kind)
1444 || (mask->rank == 0 && mask->ts.kind != gfc_default_logical_kind))
1447 ts.type = BT_LOGICAL;
1448 ts.kind = gfc_default_logical_kind;
1449 gfc_convert_type_warn (mask, &ts, 2, 0);
1455 f->value.function.name =
1456 gfc_get_string (PREFIX("%s_%c%d"), name,
1457 gfc_type_letter (array->ts.type), array->ts.kind);
1462 gfc_resolve_mod (gfc_expr * f, gfc_expr * a, gfc_expr * p)
1464 f->ts.type = a->ts.type;
1466 f->ts.kind = gfc_kind_max (a,p);
1468 f->ts.kind = a->ts.kind;
1470 if (p != NULL && a->ts.kind != p->ts.kind)
1472 if (a->ts.kind == gfc_kind_max (a,p))
1473 gfc_convert_type(p, &a->ts, 2);
1475 gfc_convert_type(a, &p->ts, 2);
1478 f->value.function.name =
1479 gfc_get_string ("__mod_%c%d", gfc_type_letter (f->ts.type), f->ts.kind);
1484 gfc_resolve_modulo (gfc_expr * f, gfc_expr * a, gfc_expr * p)
1486 f->ts.type = a->ts.type;
1488 f->ts.kind = gfc_kind_max (a,p);
1490 f->ts.kind = a->ts.kind;
1492 if (p != NULL && a->ts.kind != p->ts.kind)
1494 if (a->ts.kind == gfc_kind_max (a,p))
1495 gfc_convert_type(p, &a->ts, 2);
1497 gfc_convert_type(a, &p->ts, 2);
1500 f->value.function.name =
1501 gfc_get_string ("__modulo_%c%d", gfc_type_letter (f->ts.type),
1506 gfc_resolve_nearest (gfc_expr * f, gfc_expr * a, gfc_expr *p ATTRIBUTE_UNUSED)
1509 f->value.function.name =
1510 gfc_get_string ("__nearest_%c%d", gfc_type_letter (a->ts.type),
1515 gfc_resolve_nint (gfc_expr * f, gfc_expr * a, gfc_expr * kind)
1517 f->ts.type = BT_INTEGER;
1518 f->ts.kind = (kind == NULL) ? gfc_default_integer_kind
1519 : mpz_get_si (kind->value.integer);
1521 f->value.function.name =
1522 gfc_get_string ("__nint_%d_%d", f->ts.kind, a->ts.kind);
1527 gfc_resolve_not (gfc_expr * f, gfc_expr * i)
1530 f->value.function.name = gfc_get_string ("__not_%d", i->ts.kind);
1535 gfc_resolve_or (gfc_expr * f, gfc_expr * i, gfc_expr * j)
1537 f->ts.type = i->ts.type;
1538 f->ts.kind = gfc_kind_max (i,j);
1540 if (i->ts.kind != j->ts.kind)
1542 if (i->ts.kind == gfc_kind_max (i,j))
1543 gfc_convert_type(j, &i->ts, 2);
1545 gfc_convert_type(i, &j->ts, 2);
1548 f->value.function.name = gfc_get_string ("__or_%c%d",
1549 gfc_type_letter (i->ts.type),
1555 gfc_resolve_pack (gfc_expr * f, gfc_expr * array, gfc_expr * mask,
1556 gfc_expr * vector ATTRIBUTE_UNUSED)
1561 if (mask->rank != 0)
1562 f->value.function.name = (array->ts.type == BT_CHARACTER
1563 ? PREFIX("pack_char")
1567 /* We convert mask to default logical only in the scalar case.
1568 In the array case we can simply read the array as if it were
1569 of type default logical. */
1570 if (mask->ts.kind != gfc_default_logical_kind)
1574 ts.type = BT_LOGICAL;
1575 ts.kind = gfc_default_logical_kind;
1576 gfc_convert_type (mask, &ts, 2);
1579 f->value.function.name = (array->ts.type == BT_CHARACTER
1580 ? PREFIX("pack_s_char")
1581 : PREFIX("pack_s"));
1587 gfc_resolve_product (gfc_expr * f, gfc_expr * array, gfc_expr * dim,
1596 f->rank = array->rank - 1;
1597 gfc_resolve_dim_arg (dim);
1602 if (mask->rank == 0)
1607 /* The mask can be kind 4 or 8 for the array case. For the
1608 scalar case, coerce it to default kind unconditionally. */
1609 if ((mask->ts.kind < gfc_default_logical_kind)
1610 || (mask->rank == 0 && mask->ts.kind != gfc_default_logical_kind))
1613 ts.type = BT_LOGICAL;
1614 ts.kind = gfc_default_logical_kind;
1615 gfc_convert_type_warn (mask, &ts, 2, 0);
1621 f->value.function.name =
1622 gfc_get_string (PREFIX("%s_%c%d"), name,
1623 gfc_type_letter (array->ts.type), array->ts.kind);
1628 gfc_resolve_real (gfc_expr * f, gfc_expr * a, gfc_expr * kind)
1630 f->ts.type = BT_REAL;
1633 f->ts.kind = mpz_get_si (kind->value.integer);
1635 f->ts.kind = (a->ts.type == BT_COMPLEX) ?
1636 a->ts.kind : gfc_default_real_kind;
1638 f->value.function.name =
1639 gfc_get_string ("__real_%d_%c%d", f->ts.kind,
1640 gfc_type_letter (a->ts.type), a->ts.kind);
1645 gfc_resolve_realpart (gfc_expr * f, gfc_expr * a)
1647 f->ts.type = BT_REAL;
1648 f->ts.kind = a->ts.kind;
1649 f->value.function.name =
1650 gfc_get_string ("__real_%d_%c%d", f->ts.kind,
1651 gfc_type_letter (a->ts.type), a->ts.kind);
1656 gfc_resolve_rename (gfc_expr * f, gfc_expr * p1 ATTRIBUTE_UNUSED,
1657 gfc_expr * p2 ATTRIBUTE_UNUSED)
1659 f->ts.type = BT_INTEGER;
1660 f->ts.kind = gfc_default_integer_kind;
1661 f->value.function.name = gfc_get_string (PREFIX("rename_i%d"), f->ts.kind);
1666 gfc_resolve_repeat (gfc_expr * f, gfc_expr * string,
1667 gfc_expr * ncopies ATTRIBUTE_UNUSED)
1669 f->ts.type = BT_CHARACTER;
1670 f->ts.kind = string->ts.kind;
1671 f->value.function.name = gfc_get_string ("__repeat_%d", string->ts.kind);
1676 gfc_resolve_reshape (gfc_expr * f, gfc_expr * source, gfc_expr * shape,
1677 gfc_expr * pad ATTRIBUTE_UNUSED,
1678 gfc_expr * order ATTRIBUTE_UNUSED)
1686 gfc_array_size (shape, &rank);
1687 f->rank = mpz_get_si (rank);
1689 switch (source->ts.type)
1695 kind = source->ts.kind;
1709 if (source->ts.type == BT_COMPLEX || source->ts.type == BT_REAL)
1710 f->value.function.name =
1711 gfc_get_string (PREFIX("reshape_%c%d"),
1712 gfc_type_letter (source->ts.type), source->ts.kind);
1714 f->value.function.name =
1715 gfc_get_string (PREFIX("reshape_%d"), source->ts.kind);
1720 f->value.function.name = (source->ts.type == BT_CHARACTER
1721 ? PREFIX("reshape_char")
1722 : PREFIX("reshape"));
1726 /* TODO: Make this work with a constant ORDER parameter. */
1727 if (shape->expr_type == EXPR_ARRAY
1728 && gfc_is_constant_expr (shape)
1732 f->shape = gfc_get_shape (f->rank);
1733 c = shape->value.constructor;
1734 for (i = 0; i < f->rank; i++)
1736 mpz_init_set (f->shape[i], c->expr->value.integer);
1741 /* Force-convert both SHAPE and ORDER to index_kind so that we don't need
1742 so many runtime variations. */
1743 if (shape->ts.kind != gfc_index_integer_kind)
1745 gfc_typespec ts = shape->ts;
1746 ts.kind = gfc_index_integer_kind;
1747 gfc_convert_type_warn (shape, &ts, 2, 0);
1749 if (order && order->ts.kind != gfc_index_integer_kind)
1750 gfc_convert_type_warn (order, &shape->ts, 2, 0);
1755 gfc_resolve_rrspacing (gfc_expr * f, gfc_expr * x)
1758 f->value.function.name = gfc_get_string ("__rrspacing_%d", x->ts.kind);
1763 gfc_resolve_scale (gfc_expr * f, gfc_expr * x, gfc_expr * i)
1767 /* The implementation calls scalbn which takes an int as the
1769 if (i->ts.kind != gfc_c_int_kind)
1773 ts.type = BT_INTEGER;
1774 ts.kind = gfc_default_integer_kind;
1776 gfc_convert_type_warn (i, &ts, 2, 0);
1779 f->value.function.name = gfc_get_string ("__scale_%d", x->ts.kind);
1784 gfc_resolve_scan (gfc_expr * f, gfc_expr * string,
1785 gfc_expr * set ATTRIBUTE_UNUSED,
1786 gfc_expr * back ATTRIBUTE_UNUSED)
1788 f->ts.type = BT_INTEGER;
1789 f->ts.kind = gfc_default_integer_kind;
1790 f->value.function.name = gfc_get_string ("__scan_%d", string->ts.kind);
1795 gfc_resolve_secnds (gfc_expr * t1, gfc_expr * t0)
1798 t1->value.function.name =
1799 gfc_get_string (PREFIX("secnds"));
1804 gfc_resolve_set_exponent (gfc_expr * f, gfc_expr * x, gfc_expr * i)
1808 /* The library implementation uses GFC_INTEGER_4 unconditionally,
1809 convert type so we don't have to implement all possible
1811 if (i->ts.kind != 4)
1815 ts.type = BT_INTEGER;
1816 ts.kind = gfc_default_integer_kind;
1818 gfc_convert_type_warn (i, &ts, 2, 0);
1821 f->value.function.name = gfc_get_string ("__set_exponent_%d", x->ts.kind);
1826 gfc_resolve_shape (gfc_expr * f, gfc_expr * array)
1828 f->ts.type = BT_INTEGER;
1829 f->ts.kind = gfc_default_integer_kind;
1831 f->value.function.name = gfc_get_string (PREFIX("shape_%d"), f->ts.kind);
1832 f->shape = gfc_get_shape (1);
1833 mpz_init_set_ui (f->shape[0], array->rank);
1838 gfc_resolve_sign (gfc_expr * f, gfc_expr * a, gfc_expr * b ATTRIBUTE_UNUSED)
1841 f->value.function.name =
1842 gfc_get_string ("__sign_%c%d", gfc_type_letter (a->ts.type), a->ts.kind);
1847 gfc_resolve_signal (gfc_expr * f, gfc_expr *number, gfc_expr *handler)
1849 f->ts.type = BT_INTEGER;
1850 f->ts.kind = gfc_c_int_kind;
1852 /* handler can be either BT_INTEGER or BT_PROCEDURE */
1853 if (handler->ts.type == BT_INTEGER)
1855 if (handler->ts.kind != gfc_c_int_kind)
1856 gfc_convert_type (handler, &f->ts, 2);
1857 f->value.function.name = gfc_get_string (PREFIX("signal_func_int"));
1860 f->value.function.name = gfc_get_string (PREFIX("signal_func"));
1862 if (number->ts.kind != gfc_c_int_kind)
1863 gfc_convert_type (number, &f->ts, 2);
1868 gfc_resolve_sin (gfc_expr * f, gfc_expr * x)
1871 f->value.function.name =
1872 gfc_get_string ("__sin_%c%d", gfc_type_letter (x->ts.type), x->ts.kind);
1877 gfc_resolve_sinh (gfc_expr * f, gfc_expr * x)
1880 f->value.function.name =
1881 gfc_get_string ("__sinh_%c%d", gfc_type_letter (x->ts.type), x->ts.kind);
1886 gfc_resolve_spacing (gfc_expr * f, gfc_expr * x)
1889 f->value.function.name = gfc_get_string ("__spacing_%d", x->ts.kind);
1894 gfc_resolve_spread (gfc_expr * f, gfc_expr * source,
1898 if (source->ts.type == BT_CHARACTER)
1899 check_charlen_present (source);
1902 f->rank = source->rank + 1;
1903 if (source->rank == 0)
1904 f->value.function.name = (source->ts.type == BT_CHARACTER
1905 ? PREFIX("spread_char_scalar")
1906 : PREFIX("spread_scalar"));
1908 f->value.function.name = (source->ts.type == BT_CHARACTER
1909 ? PREFIX("spread_char")
1910 : PREFIX("spread"));
1912 if (dim && gfc_is_constant_expr (dim)
1913 && ncopies && gfc_is_constant_expr (ncopies)
1914 && source->shape[0])
1917 idim = mpz_get_ui (dim->value.integer);
1918 f->shape = gfc_get_shape (f->rank);
1919 for (i = 0; i < (idim - 1); i++)
1920 mpz_init_set (f->shape[i], source->shape[i]);
1922 mpz_init_set (f->shape[idim - 1], ncopies->value.integer);
1924 for (i = idim; i < f->rank ; i++)
1925 mpz_init_set (f->shape[i], source->shape[i-1]);
1929 gfc_resolve_dim_arg (dim);
1930 gfc_resolve_index (ncopies, 1);
1935 gfc_resolve_sqrt (gfc_expr * f, gfc_expr * x)
1938 f->value.function.name =
1939 gfc_get_string ("__sqrt_%c%d", gfc_type_letter (x->ts.type), x->ts.kind);
1943 /* Resolve the g77 compatibility function STAT AND FSTAT. */
1946 gfc_resolve_stat (gfc_expr * f, gfc_expr * n ATTRIBUTE_UNUSED,
1947 gfc_expr * a ATTRIBUTE_UNUSED)
1949 f->ts.type = BT_INTEGER;
1950 f->ts.kind = gfc_default_integer_kind;
1951 f->value.function.name = gfc_get_string (PREFIX("stat_i%d"), f->ts.kind);
1956 gfc_resolve_lstat (gfc_expr * f, gfc_expr * n ATTRIBUTE_UNUSED,
1957 gfc_expr * a ATTRIBUTE_UNUSED)
1959 f->ts.type = BT_INTEGER;
1960 f->ts.kind = gfc_default_integer_kind;
1961 f->value.function.name = gfc_get_string (PREFIX("lstat_i%d"), f->ts.kind);
1966 gfc_resolve_fstat (gfc_expr * f, gfc_expr * n, gfc_expr * a ATTRIBUTE_UNUSED)
1968 f->ts.type = BT_INTEGER;
1969 f->ts.kind = gfc_default_integer_kind;
1970 if (n->ts.kind != f->ts.kind)
1971 gfc_convert_type (n, &f->ts, 2);
1973 f->value.function.name = gfc_get_string (PREFIX("fstat_i%d"), f->ts.kind);
1978 gfc_resolve_fgetc (gfc_expr * f, gfc_expr * u, gfc_expr * c ATTRIBUTE_UNUSED)
1982 f->ts.type = BT_INTEGER;
1983 f->ts.kind = gfc_c_int_kind;
1984 if (u->ts.kind != gfc_c_int_kind)
1986 ts.type = BT_INTEGER;
1987 ts.kind = gfc_c_int_kind;
1990 gfc_convert_type (u, &ts, 2);
1993 f->value.function.name = gfc_get_string (PREFIX("fgetc"));
1998 gfc_resolve_fget (gfc_expr * f, gfc_expr * c ATTRIBUTE_UNUSED)
2000 f->ts.type = BT_INTEGER;
2001 f->ts.kind = gfc_c_int_kind;
2002 f->value.function.name = gfc_get_string (PREFIX("fget"));
2007 gfc_resolve_fputc (gfc_expr * f, gfc_expr * u, gfc_expr * c ATTRIBUTE_UNUSED)
2011 f->ts.type = BT_INTEGER;
2012 f->ts.kind = gfc_c_int_kind;
2013 if (u->ts.kind != gfc_c_int_kind)
2015 ts.type = BT_INTEGER;
2016 ts.kind = gfc_c_int_kind;
2019 gfc_convert_type (u, &ts, 2);
2022 f->value.function.name = gfc_get_string (PREFIX("fputc"));
2027 gfc_resolve_fput (gfc_expr * f, gfc_expr * c ATTRIBUTE_UNUSED)
2029 f->ts.type = BT_INTEGER;
2030 f->ts.kind = gfc_c_int_kind;
2031 f->value.function.name = gfc_get_string (PREFIX("fput"));
2036 gfc_resolve_ftell (gfc_expr * f, gfc_expr * u)
2040 f->ts.type = BT_INTEGER;
2041 f->ts.kind = gfc_index_integer_kind;
2042 if (u->ts.kind != gfc_c_int_kind)
2044 ts.type = BT_INTEGER;
2045 ts.kind = gfc_c_int_kind;
2048 gfc_convert_type (u, &ts, 2);
2051 f->value.function.name = gfc_get_string (PREFIX("ftell"));
2056 gfc_resolve_sum (gfc_expr * f, gfc_expr * array, gfc_expr * dim,
2065 if (mask->rank == 0)
2070 /* The mask can be kind 4 or 8 for the array case. For the
2071 scalar case, coerce it to default kind unconditionally. */
2072 if ((mask->ts.kind < gfc_default_logical_kind)
2073 || (mask->rank == 0 && mask->ts.kind != gfc_default_logical_kind))
2076 ts.type = BT_LOGICAL;
2077 ts.kind = gfc_default_logical_kind;
2078 gfc_convert_type_warn (mask, &ts, 2, 0);
2086 f->rank = array->rank - 1;
2087 gfc_resolve_dim_arg (dim);
2090 f->value.function.name =
2091 gfc_get_string (PREFIX("%s_%c%d"), name,
2092 gfc_type_letter (array->ts.type), array->ts.kind);
2097 gfc_resolve_symlnk (gfc_expr * f, gfc_expr * p1 ATTRIBUTE_UNUSED,
2098 gfc_expr * p2 ATTRIBUTE_UNUSED)
2100 f->ts.type = BT_INTEGER;
2101 f->ts.kind = gfc_default_integer_kind;
2102 f->value.function.name = gfc_get_string (PREFIX("symlnk_i%d"), f->ts.kind);
2106 /* Resolve the g77 compatibility function SYSTEM. */
2109 gfc_resolve_system (gfc_expr * f, gfc_expr * n ATTRIBUTE_UNUSED)
2111 f->ts.type = BT_INTEGER;
2113 f->value.function.name = gfc_get_string (PREFIX("system"));
2118 gfc_resolve_tan (gfc_expr * f, gfc_expr * x)
2121 f->value.function.name =
2122 gfc_get_string ("__tan_%c%d", gfc_type_letter (x->ts.type), x->ts.kind);
2127 gfc_resolve_tanh (gfc_expr * f, gfc_expr * x)
2130 f->value.function.name =
2131 gfc_get_string ("__tanh_%c%d", gfc_type_letter (x->ts.type), x->ts.kind);
2136 gfc_resolve_time (gfc_expr * f)
2138 f->ts.type = BT_INTEGER;
2140 f->value.function.name = gfc_get_string (PREFIX("time_func"));
2145 gfc_resolve_time8 (gfc_expr * f)
2147 f->ts.type = BT_INTEGER;
2149 f->value.function.name = gfc_get_string (PREFIX("time8_func"));
2154 gfc_resolve_transfer (gfc_expr * f, gfc_expr * source ATTRIBUTE_UNUSED,
2155 gfc_expr * mold, gfc_expr * size)
2157 /* TODO: Make this do something meaningful. */
2158 static char transfer0[] = "__transfer0", transfer1[] = "__transfer1";
2162 if (size == NULL && mold->rank == 0)
2165 f->value.function.name = transfer0;
2170 f->value.function.name = transfer1;
2171 if (size && gfc_is_constant_expr (size))
2173 f->shape = gfc_get_shape (1);
2174 mpz_init_set (f->shape[0], size->value.integer);
2181 gfc_resolve_transpose (gfc_expr * f, gfc_expr * matrix)
2187 f->shape = gfc_get_shape (2);
2188 mpz_init_set (f->shape[0], matrix->shape[1]);
2189 mpz_init_set (f->shape[1], matrix->shape[0]);
2192 switch (matrix->ts.kind)
2198 switch (matrix->ts.type)
2202 f->value.function.name =
2203 gfc_get_string (PREFIX("transpose_%c%d"),
2204 gfc_type_letter (matrix->ts.type),
2210 /* Use the integer routines for real and logical cases. This
2211 assumes they all have the same alignment requirements. */
2212 f->value.function.name =
2213 gfc_get_string (PREFIX("transpose_i%d"), matrix->ts.kind);
2217 f->value.function.name = PREFIX("transpose");
2223 f->value.function.name = (matrix->ts.type == BT_CHARACTER
2224 ? PREFIX("transpose_char")
2225 : PREFIX("transpose"));
2232 gfc_resolve_trim (gfc_expr * f, gfc_expr * string)
2234 f->ts.type = BT_CHARACTER;
2235 f->ts.kind = string->ts.kind;
2236 f->value.function.name = gfc_get_string ("__trim_%d", string->ts.kind);
2241 gfc_resolve_ubound (gfc_expr * f, gfc_expr * array,
2244 static char ubound[] = "__ubound";
2246 f->ts.type = BT_INTEGER;
2247 f->ts.kind = gfc_default_integer_kind;
2252 f->shape = gfc_get_shape (1);
2253 mpz_init_set_ui (f->shape[0], array->rank);
2256 f->value.function.name = ubound;
2260 /* Resolve the g77 compatibility function UMASK. */
2263 gfc_resolve_umask (gfc_expr * f, gfc_expr * n)
2265 f->ts.type = BT_INTEGER;
2266 f->ts.kind = n->ts.kind;
2267 f->value.function.name = gfc_get_string (PREFIX("umask_i%d"), n->ts.kind);
2271 /* Resolve the g77 compatibility function UNLINK. */
2274 gfc_resolve_unlink (gfc_expr * f, gfc_expr * n ATTRIBUTE_UNUSED)
2276 f->ts.type = BT_INTEGER;
2278 f->value.function.name = gfc_get_string (PREFIX("unlink"));
2283 gfc_resolve_ttynam (gfc_expr * f, gfc_expr * unit)
2287 f->ts.type = BT_CHARACTER;
2288 f->ts.kind = gfc_default_character_kind;
2290 if (unit->ts.kind != gfc_c_int_kind)
2292 ts.type = BT_INTEGER;
2293 ts.kind = gfc_c_int_kind;
2296 gfc_convert_type (unit, &ts, 2);
2299 f->value.function.name = gfc_get_string (PREFIX("ttynam"));
2304 gfc_resolve_unpack (gfc_expr * f, gfc_expr * vector, gfc_expr * mask,
2305 gfc_expr * field ATTRIBUTE_UNUSED)
2308 f->rank = mask->rank;
2310 f->value.function.name =
2311 gfc_get_string (PREFIX("unpack%d%s"), field->rank > 0 ? 1 : 0,
2312 vector->ts.type == BT_CHARACTER ? "_char" : "");
2317 gfc_resolve_verify (gfc_expr * f, gfc_expr * string,
2318 gfc_expr * set ATTRIBUTE_UNUSED,
2319 gfc_expr * back ATTRIBUTE_UNUSED)
2321 f->ts.type = BT_INTEGER;
2322 f->ts.kind = gfc_default_integer_kind;
2323 f->value.function.name = gfc_get_string ("__verify_%d", string->ts.kind);
2328 gfc_resolve_xor (gfc_expr * f, gfc_expr * i, gfc_expr * j)
2330 f->ts.type = i->ts.type;
2331 f->ts.kind = gfc_kind_max (i,j);
2333 if (i->ts.kind != j->ts.kind)
2335 if (i->ts.kind == gfc_kind_max (i,j))
2336 gfc_convert_type(j, &i->ts, 2);
2338 gfc_convert_type(i, &j->ts, 2);
2341 f->value.function.name = gfc_get_string ("__xor_%c%d",
2342 gfc_type_letter (i->ts.type),
2347 /* Intrinsic subroutine resolution. */
2350 gfc_resolve_alarm_sub (gfc_code * c)
2353 gfc_expr *seconds, *handler, *status;
2356 seconds = c->ext.actual->expr;
2357 handler = c->ext.actual->next->expr;
2358 status = c->ext.actual->next->next->expr;
2359 ts.type = BT_INTEGER;
2360 ts.kind = gfc_c_int_kind;
2362 /* handler can be either BT_INTEGER or BT_PROCEDURE */
2363 if (handler->ts.type == BT_INTEGER)
2365 if (handler->ts.kind != gfc_c_int_kind)
2366 gfc_convert_type (handler, &ts, 2);
2367 name = gfc_get_string (PREFIX("alarm_sub_int"));
2370 name = gfc_get_string (PREFIX("alarm_sub"));
2372 if (seconds->ts.kind != gfc_c_int_kind)
2373 gfc_convert_type (seconds, &ts, 2);
2374 if (status != NULL && status->ts.kind != gfc_c_int_kind)
2375 gfc_convert_type (status, &ts, 2);
2377 c->resolved_sym = gfc_get_intrinsic_sub_symbol (name);
2381 gfc_resolve_cpu_time (gfc_code * c)
2385 name = gfc_get_string (PREFIX("cpu_time_%d"),
2386 c->ext.actual->expr->ts.kind);
2387 c->resolved_sym = gfc_get_intrinsic_sub_symbol (name);
2392 gfc_resolve_mvbits (gfc_code * c)
2397 kind = c->ext.actual->expr->ts.kind;
2398 name = gfc_get_string (PREFIX("mvbits_i%d"), kind);
2400 c->resolved_sym = gfc_get_intrinsic_sub_symbol (name);
2405 gfc_resolve_random_number (gfc_code * c)
2410 kind = c->ext.actual->expr->ts.kind;
2411 if (c->ext.actual->expr->rank == 0)
2412 name = gfc_get_string (PREFIX("random_r%d"), kind);
2414 name = gfc_get_string (PREFIX("arandom_r%d"), kind);
2416 c->resolved_sym = gfc_get_intrinsic_sub_symbol (name);
2421 gfc_resolve_rename_sub (gfc_code * c)
2426 if (c->ext.actual->next->next->expr != NULL)
2427 kind = c->ext.actual->next->next->expr->ts.kind;
2429 kind = gfc_default_integer_kind;
2431 name = gfc_get_string (PREFIX("rename_i%d_sub"), kind);
2432 c->resolved_sym = gfc_get_intrinsic_sub_symbol (name);
2437 gfc_resolve_kill_sub (gfc_code * c)
2442 if (c->ext.actual->next->next->expr != NULL)
2443 kind = c->ext.actual->next->next->expr->ts.kind;
2445 kind = gfc_default_integer_kind;
2447 name = gfc_get_string (PREFIX("kill_i%d_sub"), kind);
2448 c->resolved_sym = gfc_get_intrinsic_sub_symbol (name);
2453 gfc_resolve_link_sub (gfc_code * c)
2458 if (c->ext.actual->next->next->expr != NULL)
2459 kind = c->ext.actual->next->next->expr->ts.kind;
2461 kind = gfc_default_integer_kind;
2463 name = gfc_get_string (PREFIX("link_i%d_sub"), kind);
2464 c->resolved_sym = gfc_get_intrinsic_sub_symbol (name);
2469 gfc_resolve_symlnk_sub (gfc_code * c)
2474 if (c->ext.actual->next->next->expr != NULL)
2475 kind = c->ext.actual->next->next->expr->ts.kind;
2477 kind = gfc_default_integer_kind;
2479 name = gfc_get_string (PREFIX("symlnk_i%d_sub"), kind);
2480 c->resolved_sym = gfc_get_intrinsic_sub_symbol (name);
2484 /* G77 compatibility subroutines etime() and dtime(). */
2487 gfc_resolve_etime_sub (gfc_code * c)
2491 name = gfc_get_string (PREFIX("etime_sub"));
2492 c->resolved_sym = gfc_get_intrinsic_sub_symbol (name);
2496 /* G77 compatibility subroutines itime(), idate(), ltime() and gmtime(). */
2499 gfc_resolve_itime (gfc_code * c)
2501 c->resolved_sym = gfc_get_intrinsic_sub_symbol
2502 (gfc_get_string (PREFIX("itime_i%d"),
2503 gfc_default_integer_kind));
2507 gfc_resolve_idate (gfc_code * c)
2509 c->resolved_sym = gfc_get_intrinsic_sub_symbol
2510 (gfc_get_string (PREFIX("idate_i%d"),
2511 gfc_default_integer_kind));
2515 gfc_resolve_ltime (gfc_code * c)
2517 c->resolved_sym = gfc_get_intrinsic_sub_symbol
2518 (gfc_get_string (PREFIX("ltime_i%d"),
2519 gfc_default_integer_kind));
2523 gfc_resolve_gmtime (gfc_code * c)
2525 c->resolved_sym = gfc_get_intrinsic_sub_symbol
2526 (gfc_get_string (PREFIX("gmtime_i%d"),
2527 gfc_default_integer_kind));
2531 /* G77 compatibility subroutine second(). */
2534 gfc_resolve_second_sub (gfc_code * c)
2538 name = gfc_get_string (PREFIX("second_sub"));
2539 c->resolved_sym = gfc_get_intrinsic_sub_symbol (name);
2544 gfc_resolve_sleep_sub (gfc_code * c)
2549 if (c->ext.actual->expr != NULL)
2550 kind = c->ext.actual->expr->ts.kind;
2552 kind = gfc_default_integer_kind;
2554 name = gfc_get_string (PREFIX("sleep_i%d_sub"), kind);
2555 c->resolved_sym = gfc_get_intrinsic_sub_symbol (name);
2559 /* G77 compatibility function srand(). */
2562 gfc_resolve_srand (gfc_code * c)
2565 name = gfc_get_string (PREFIX("srand"));
2566 c->resolved_sym = gfc_get_intrinsic_sub_symbol (name);
2570 /* Resolve the getarg intrinsic subroutine. */
2573 gfc_resolve_getarg (gfc_code * c)
2578 kind = gfc_default_integer_kind;
2579 name = gfc_get_string (PREFIX("getarg_i%d"), kind);
2580 c->resolved_sym = gfc_get_intrinsic_sub_symbol (name);
2583 /* Resolve the getcwd intrinsic subroutine. */
2586 gfc_resolve_getcwd_sub (gfc_code * c)
2591 if (c->ext.actual->next->expr != NULL)
2592 kind = c->ext.actual->next->expr->ts.kind;
2594 kind = gfc_default_integer_kind;
2596 name = gfc_get_string (PREFIX("getcwd_i%d_sub"), kind);
2597 c->resolved_sym = gfc_get_intrinsic_sub_symbol (name);
2601 /* Resolve the get_command intrinsic subroutine. */
2604 gfc_resolve_get_command (gfc_code * c)
2609 kind = gfc_default_integer_kind;
2610 name = gfc_get_string (PREFIX("get_command_i%d"), kind);
2611 c->resolved_sym = gfc_get_intrinsic_sub_symbol (name);
2615 /* Resolve the get_command_argument intrinsic subroutine. */
2618 gfc_resolve_get_command_argument (gfc_code * c)
2623 kind = gfc_default_integer_kind;
2624 name = gfc_get_string (PREFIX("get_command_argument_i%d"), kind);
2625 c->resolved_sym = gfc_get_intrinsic_sub_symbol (name);
2628 /* Resolve the get_environment_variable intrinsic subroutine. */
2631 gfc_resolve_get_environment_variable (gfc_code * code)
2636 kind = gfc_default_integer_kind;
2637 name = gfc_get_string (PREFIX("get_environment_variable_i%d"), kind);
2638 code->resolved_sym = gfc_get_intrinsic_sub_symbol (name);
2642 gfc_resolve_signal_sub (gfc_code * c)
2645 gfc_expr *number, *handler, *status;
2648 number = c->ext.actual->expr;
2649 handler = c->ext.actual->next->expr;
2650 status = c->ext.actual->next->next->expr;
2651 ts.type = BT_INTEGER;
2652 ts.kind = gfc_c_int_kind;
2654 /* handler can be either BT_INTEGER or BT_PROCEDURE */
2655 if (handler->ts.type == BT_INTEGER)
2657 if (handler->ts.kind != gfc_c_int_kind)
2658 gfc_convert_type (handler, &ts, 2);
2659 name = gfc_get_string (PREFIX("signal_sub_int"));
2662 name = gfc_get_string (PREFIX("signal_sub"));
2664 if (number->ts.kind != gfc_c_int_kind)
2665 gfc_convert_type (number, &ts, 2);
2666 if (status != NULL && status->ts.kind != gfc_c_int_kind)
2667 gfc_convert_type (status, &ts, 2);
2669 c->resolved_sym = gfc_get_intrinsic_sub_symbol (name);
2672 /* Resolve the SYSTEM intrinsic subroutine. */
2675 gfc_resolve_system_sub (gfc_code * c)
2679 name = gfc_get_string (PREFIX("system_sub"));
2680 c->resolved_sym = gfc_get_intrinsic_sub_symbol (name);
2683 /* Determine if the arguments to SYSTEM_CLOCK are INTEGER(4) or INTEGER(8) */
2686 gfc_resolve_system_clock (gfc_code * c)
2691 if (c->ext.actual->expr != NULL)
2692 kind = c->ext.actual->expr->ts.kind;
2693 else if (c->ext.actual->next->expr != NULL)
2694 kind = c->ext.actual->next->expr->ts.kind;
2695 else if (c->ext.actual->next->next->expr != NULL)
2696 kind = c->ext.actual->next->next->expr->ts.kind;
2698 kind = gfc_default_integer_kind;
2700 name = gfc_get_string (PREFIX("system_clock_%d"), kind);
2701 c->resolved_sym = gfc_get_intrinsic_sub_symbol (name);
2704 /* Resolve the EXIT intrinsic subroutine. */
2707 gfc_resolve_exit (gfc_code * c)
2712 if (c->ext.actual->expr != NULL)
2713 kind = c->ext.actual->expr->ts.kind;
2715 kind = gfc_default_integer_kind;
2717 name = gfc_get_string (PREFIX("exit_i%d"), kind);
2718 c->resolved_sym = gfc_get_intrinsic_sub_symbol (name);
2721 /* Resolve the FLUSH intrinsic subroutine. */
2724 gfc_resolve_flush (gfc_code * c)
2730 ts.type = BT_INTEGER;
2731 ts.kind = gfc_default_integer_kind;
2732 n = c->ext.actual->expr;
2734 && n->ts.kind != ts.kind)
2735 gfc_convert_type (n, &ts, 2);
2737 name = gfc_get_string (PREFIX("flush_i%d"), ts.kind);
2738 c->resolved_sym = gfc_get_intrinsic_sub_symbol (name);
2743 gfc_resolve_free (gfc_code * c)
2748 ts.type = BT_INTEGER;
2749 ts.kind = gfc_index_integer_kind;
2750 n = c->ext.actual->expr;
2751 if (n->ts.kind != ts.kind)
2752 gfc_convert_type (n, &ts, 2);
2754 c->resolved_sym = gfc_get_intrinsic_sub_symbol (PREFIX("free"));
2759 gfc_resolve_ctime_sub (gfc_code * c)
2763 /* ctime TIME argument is a INTEGER(KIND=8), says the doc */
2764 if (c->ext.actual->expr->ts.kind != 8)
2766 ts.type = BT_INTEGER;
2770 gfc_convert_type (c->ext.actual->expr, &ts, 2);
2773 c->resolved_sym = gfc_get_intrinsic_sub_symbol (PREFIX("ctime_sub"));
2778 gfc_resolve_fdate_sub (gfc_code * c)
2780 c->resolved_sym = gfc_get_intrinsic_sub_symbol (PREFIX ("fdate_sub"));
2785 gfc_resolve_gerror (gfc_code * c)
2787 c->resolved_sym = gfc_get_intrinsic_sub_symbol (PREFIX ("gerror"));
2792 gfc_resolve_getlog (gfc_code * c)
2794 c->resolved_sym = gfc_get_intrinsic_sub_symbol (PREFIX ("getlog"));
2799 gfc_resolve_hostnm_sub (gfc_code * c)
2804 if (c->ext.actual->next->expr != NULL)
2805 kind = c->ext.actual->next->expr->ts.kind;
2807 kind = gfc_default_integer_kind;
2809 name = gfc_get_string (PREFIX("hostnm_i%d_sub"), kind);
2810 c->resolved_sym = gfc_get_intrinsic_sub_symbol (name);
2815 gfc_resolve_perror (gfc_code * c)
2817 c->resolved_sym = gfc_get_intrinsic_sub_symbol (PREFIX ("perror_sub"));
2820 /* Resolve the STAT and FSTAT intrinsic subroutines. */
2823 gfc_resolve_stat_sub (gfc_code * c)
2827 name = gfc_get_string (PREFIX("stat_i%d_sub"), gfc_default_integer_kind);
2828 c->resolved_sym = gfc_get_intrinsic_sub_symbol (name);
2833 gfc_resolve_lstat_sub (gfc_code * c)
2837 name = gfc_get_string (PREFIX("lstat_i%d_sub"), gfc_default_integer_kind);
2838 c->resolved_sym = gfc_get_intrinsic_sub_symbol (name);
2843 gfc_resolve_fstat_sub (gfc_code * c)
2849 u = c->ext.actual->expr;
2850 ts = &c->ext.actual->next->expr->ts;
2851 if (u->ts.kind != ts->kind)
2852 gfc_convert_type (u, ts, 2);
2853 name = gfc_get_string (PREFIX("fstat_i%d_sub"), ts->kind);
2854 c->resolved_sym = gfc_get_intrinsic_sub_symbol (name);
2859 gfc_resolve_fgetc_sub (gfc_code * c)
2865 u = c->ext.actual->expr;
2866 st = c->ext.actual->next->next->expr;
2868 if (u->ts.kind != gfc_c_int_kind)
2870 ts.type = BT_INTEGER;
2871 ts.kind = gfc_c_int_kind;
2874 gfc_convert_type (u, &ts, 2);
2878 name = gfc_get_string (PREFIX("fgetc_i%d_sub"), st->ts.kind);
2880 name = gfc_get_string (PREFIX("fgetc_i%d_sub"), gfc_default_integer_kind);
2882 c->resolved_sym = gfc_get_intrinsic_sub_symbol (name);
2887 gfc_resolve_fget_sub (gfc_code * c)
2892 st = c->ext.actual->next->expr;
2894 name = gfc_get_string (PREFIX("fget_i%d_sub"), st->ts.kind);
2896 name = gfc_get_string (PREFIX("fget_i%d_sub"), gfc_default_integer_kind);
2898 c->resolved_sym = gfc_get_intrinsic_sub_symbol (name);
2903 gfc_resolve_fputc_sub (gfc_code * c)
2909 u = c->ext.actual->expr;
2910 st = c->ext.actual->next->next->expr;
2912 if (u->ts.kind != gfc_c_int_kind)
2914 ts.type = BT_INTEGER;
2915 ts.kind = gfc_c_int_kind;
2918 gfc_convert_type (u, &ts, 2);
2922 name = gfc_get_string (PREFIX("fputc_i%d_sub"), st->ts.kind);
2924 name = gfc_get_string (PREFIX("fputc_i%d_sub"), gfc_default_integer_kind);
2926 c->resolved_sym = gfc_get_intrinsic_sub_symbol (name);
2931 gfc_resolve_fput_sub (gfc_code * c)
2936 st = c->ext.actual->next->expr;
2938 name = gfc_get_string (PREFIX("fput_i%d_sub"), st->ts.kind);
2940 name = gfc_get_string (PREFIX("fput_i%d_sub"), gfc_default_integer_kind);
2942 c->resolved_sym = gfc_get_intrinsic_sub_symbol (name);
2947 gfc_resolve_ftell_sub (gfc_code * c)
2954 unit = c->ext.actual->expr;
2955 offset = c->ext.actual->next->expr;
2957 if (unit->ts.kind != gfc_c_int_kind)
2959 ts.type = BT_INTEGER;
2960 ts.kind = gfc_c_int_kind;
2963 gfc_convert_type (unit, &ts, 2);
2966 name = gfc_get_string (PREFIX("ftell_i%d_sub"), offset->ts.kind);
2967 c->resolved_sym = gfc_get_intrinsic_sub_symbol (name);
2972 gfc_resolve_ttynam_sub (gfc_code * c)
2976 if (c->ext.actual->expr->ts.kind != gfc_c_int_kind)
2978 ts.type = BT_INTEGER;
2979 ts.kind = gfc_c_int_kind;
2982 gfc_convert_type (c->ext.actual->expr, &ts, 2);
2985 c->resolved_sym = gfc_get_intrinsic_sub_symbol (PREFIX("ttynam_sub"));
2989 /* Resolve the UMASK intrinsic subroutine. */
2992 gfc_resolve_umask_sub (gfc_code * c)
2997 if (c->ext.actual->next->expr != NULL)
2998 kind = c->ext.actual->next->expr->ts.kind;
3000 kind = gfc_default_integer_kind;
3002 name = gfc_get_string (PREFIX("umask_i%d_sub"), kind);
3003 c->resolved_sym = gfc_get_intrinsic_sub_symbol (name);
3006 /* Resolve the UNLINK intrinsic subroutine. */
3009 gfc_resolve_unlink_sub (gfc_code * c)
3014 if (c->ext.actual->next->expr != NULL)
3015 kind = c->ext.actual->next->expr->ts.kind;
3017 kind = gfc_default_integer_kind;
3019 name = gfc_get_string (PREFIX("unlink_i%d_sub"), kind);
3020 c->resolved_sym = gfc_get_intrinsic_sub_symbol (name);