1 /* Build up a list of intrinsic subroutines and functions for the
3 Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007
4 Free Software Foundation, Inc.
5 Contributed by Andy Vaught & Katherine Holcomb
7 This file is part of GCC.
9 GCC is free software; you can redistribute it and/or modify it under
10 the terms of the GNU General Public License as published by the Free
11 Software Foundation; either version 3, or (at your option) any later
14 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
15 WARRANTY; without even the implied warranty of MERCHANTABILITY or
16 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
19 You should have received a copy of the GNU General Public License
20 along with GCC; see the file COPYING3. If not see
21 <http://www.gnu.org/licenses/>. */
27 #include "intrinsic.h"
29 /* Namespace to hold the resolved symbols for intrinsic subroutines. */
30 static gfc_namespace *gfc_intrinsic_namespace;
32 int gfc_init_expr = 0;
34 /* Pointers to an intrinsic function and its argument names that are being
37 const char *gfc_current_intrinsic;
38 const char *gfc_current_intrinsic_arg[MAX_INTRINSIC_ARGS];
39 locus *gfc_current_intrinsic_where;
41 static gfc_intrinsic_sym *functions, *subroutines, *conversion, *next_sym;
42 static gfc_intrinsic_arg *next_arg;
44 static int nfunc, nsub, nargs, nconv;
47 { SZ_NOTHING = 0, SZ_SUBS, SZ_FUNCS, SZ_CONVS }
51 { NO_CLASS = 0, CLASS_ELEMENTAL, CLASS_INQUIRY, CLASS_TRANSFORMATIONAL };
60 /* Return a letter based on the passed type. Used to construct the
61 name of a type-dependent subroutine. */
64 gfc_type_letter (bt type)
99 /* Get a symbol for a resolved name. */
102 gfc_get_intrinsic_sub_symbol (const char *name)
106 gfc_get_symbol (name, gfc_intrinsic_namespace, &sym);
107 sym->attr.always_explicit = 1;
108 sym->attr.subroutine = 1;
109 sym->attr.flavor = FL_PROCEDURE;
110 sym->attr.proc = PROC_INTRINSIC;
116 /* Return a pointer to the name of a conversion function given two
120 conv_name (gfc_typespec *from, gfc_typespec *to)
122 return gfc_get_string ("__convert_%c%d_%c%d",
123 gfc_type_letter (from->type), from->kind,
124 gfc_type_letter (to->type), to->kind);
128 /* Given a pair of typespecs, find the gfc_intrinsic_sym node that
129 corresponds to the conversion. Returns NULL if the conversion
132 static gfc_intrinsic_sym *
133 find_conv (gfc_typespec *from, gfc_typespec *to)
135 gfc_intrinsic_sym *sym;
139 target = conv_name (from, to);
142 for (i = 0; i < nconv; i++, sym++)
143 if (target == sym->name)
150 /* Interface to the check functions. We break apart an argument list
151 and call the proper check function rather than forcing each
152 function to manipulate the argument list. */
155 do_check (gfc_intrinsic_sym *specific, gfc_actual_arglist *arg)
157 gfc_expr *a1, *a2, *a3, *a4, *a5;
160 return (*specific->check.f0) ();
165 return (*specific->check.f1) (a1);
170 return (*specific->check.f2) (a1, a2);
175 return (*specific->check.f3) (a1, a2, a3);
180 return (*specific->check.f4) (a1, a2, a3, a4);
185 return (*specific->check.f5) (a1, a2, a3, a4, a5);
187 gfc_internal_error ("do_check(): too many args");
191 /*********** Subroutines to build the intrinsic list ****************/
193 /* Add a single intrinsic symbol to the current list.
196 char * name of function
197 int whether function is elemental
198 int If the function can be used as an actual argument [1]
199 bt return type of function
200 int kind of return type of function
201 int Fortran standard version
202 check pointer to check function
203 simplify pointer to simplification function
204 resolve pointer to resolution function
206 Optional arguments come in multiples of four:
207 char * name of argument
210 int arg optional flag (1=optional, 0=required)
212 The sequence is terminated by a NULL name.
215 [1] Whether a function can or cannot be used as an actual argument is
216 determined by its presence on the 13.6 list in Fortran 2003. The
217 following intrinsics, which are GNU extensions, are considered allowed
218 as actual arguments: ACOSH ATANH DACOSH DASINH DATANH DCONJG DIMAG
219 ZABS ZCOS ZEXP ZLOG ZSIN ZSQRT. */
222 add_sym (const char *name, gfc_isym_id id, enum class cl, int actual_ok, bt type, int kind,
223 int standard, gfc_check_f check, gfc_simplify_f simplify,
224 gfc_resolve_f resolve, ...)
226 char buf[GFC_MAX_SYMBOL_LEN + 11]; /* 10 for '_gfortran_', 1 for '\0' */
227 int optional, first_flag;
241 next_sym->name = gfc_get_string (name);
243 strcpy (buf, "_gfortran_");
245 next_sym->lib_name = gfc_get_string (buf);
247 next_sym->elemental = (cl == CLASS_ELEMENTAL);
248 next_sym->inquiry = (cl == CLASS_INQUIRY);
249 next_sym->transformational = (cl == CLASS_TRANSFORMATIONAL);
250 next_sym->actual_ok = actual_ok;
251 next_sym->ts.type = type;
252 next_sym->ts.kind = kind;
253 next_sym->standard = standard;
254 next_sym->simplify = simplify;
255 next_sym->check = check;
256 next_sym->resolve = resolve;
257 next_sym->specific = 0;
258 next_sym->generic = 0;
259 next_sym->conversion = 0;
264 gfc_internal_error ("add_sym(): Bad sizing mode");
267 va_start (argp, resolve);
273 name = va_arg (argp, char *);
277 type = (bt) va_arg (argp, int);
278 kind = va_arg (argp, int);
279 optional = va_arg (argp, int);
281 if (sizing != SZ_NOTHING)
288 next_sym->formal = next_arg;
290 (next_arg - 1)->next = next_arg;
294 strcpy (next_arg->name, name);
295 next_arg->ts.type = type;
296 next_arg->ts.kind = kind;
297 next_arg->optional = optional;
307 /* Add a symbol to the function list where the function takes
311 add_sym_0 (const char *name, gfc_isym_id id, enum class cl, int actual_ok, bt type,
312 int kind, int standard,
314 gfc_expr *(*simplify) (void),
315 void (*resolve) (gfc_expr *))
325 add_sym (name, id, cl, actual_ok, type, kind, standard, cf, sf, rf,
330 /* Add a symbol to the subroutine list where the subroutine takes
334 add_sym_0s (const char *name, gfc_isym_id id, int standard, void (*resolve) (gfc_code *))
344 add_sym (name, id, NO_CLASS, ACTUAL_NO, BT_UNKNOWN, 0, standard, cf, sf, rf,
349 /* Add a symbol to the function list where the function takes
353 add_sym_1 (const char *name, gfc_isym_id id, enum class cl, int actual_ok, bt type,
354 int kind, int standard,
355 try (*check) (gfc_expr *),
356 gfc_expr *(*simplify) (gfc_expr *),
357 void (*resolve) (gfc_expr *, gfc_expr *),
358 const char *a1, bt type1, int kind1, int optional1)
368 add_sym (name, id, cl, actual_ok, type, kind, standard, cf, sf, rf,
369 a1, type1, kind1, optional1,
374 /* Add a symbol to the subroutine list where the subroutine takes
378 add_sym_1s (const char *name, gfc_isym_id id, enum class cl, bt type, int kind, int standard,
379 try (*check) (gfc_expr *),
380 gfc_expr *(*simplify) (gfc_expr *),
381 void (*resolve) (gfc_code *),
382 const char *a1, bt type1, int kind1, int optional1)
392 add_sym (name, id, cl, ACTUAL_NO, type, kind, standard, cf, sf, rf,
393 a1, type1, kind1, optional1,
398 /* Add a symbol from the MAX/MIN family of intrinsic functions to the
399 function. MAX et al take 2 or more arguments. */
402 add_sym_1m (const char *name, gfc_isym_id id, enum class cl, int actual_ok, bt type,
403 int kind, int standard,
404 try (*check) (gfc_actual_arglist *),
405 gfc_expr *(*simplify) (gfc_expr *),
406 void (*resolve) (gfc_expr *, gfc_actual_arglist *),
407 const char *a1, bt type1, int kind1, int optional1,
408 const char *a2, bt type2, int kind2, int optional2)
418 add_sym (name, id, cl, actual_ok, type, kind, standard, cf, sf, rf,
419 a1, type1, kind1, optional1,
420 a2, type2, kind2, optional2,
425 /* Add a symbol to the function list where the function takes
429 add_sym_2 (const char *name, gfc_isym_id id, enum class cl, int actual_ok, bt type,
430 int kind, int standard,
431 try (*check) (gfc_expr *, gfc_expr *),
432 gfc_expr *(*simplify) (gfc_expr *, gfc_expr *),
433 void (*resolve) (gfc_expr *, gfc_expr *, gfc_expr *),
434 const char *a1, bt type1, int kind1, int optional1,
435 const char *a2, bt type2, int kind2, int optional2)
445 add_sym (name, id, cl, actual_ok, type, kind, standard, cf, sf, rf,
446 a1, type1, kind1, optional1,
447 a2, type2, kind2, optional2,
452 /* Add a symbol to the subroutine list where the subroutine takes
456 add_sym_2s (const char *name, gfc_isym_id id, enum class cl, bt type, int kind, int standard,
457 try (*check) (gfc_expr *, gfc_expr *),
458 gfc_expr *(*simplify) (gfc_expr *, gfc_expr *),
459 void (*resolve) (gfc_code *),
460 const char *a1, bt type1, int kind1, int optional1,
461 const char *a2, bt type2, int kind2, int optional2)
471 add_sym (name, id, cl, ACTUAL_NO, type, kind, standard, cf, sf, rf,
472 a1, type1, kind1, optional1,
473 a2, type2, kind2, optional2,
478 /* Add a symbol to the function list where the function takes
482 add_sym_3 (const char *name, gfc_isym_id id, enum class cl, int actual_ok, bt type,
483 int kind, int standard,
484 try (*check) (gfc_expr *, gfc_expr *, gfc_expr *),
485 gfc_expr *(*simplify) (gfc_expr *, gfc_expr *, gfc_expr *),
486 void (*resolve) (gfc_expr *, gfc_expr *, gfc_expr *, gfc_expr *),
487 const char *a1, bt type1, int kind1, int optional1,
488 const char *a2, bt type2, int kind2, int optional2,
489 const char *a3, bt type3, int kind3, int optional3)
499 add_sym (name, id, cl, actual_ok, type, kind, standard, cf, sf, rf,
500 a1, type1, kind1, optional1,
501 a2, type2, kind2, optional2,
502 a3, type3, kind3, optional3,
507 /* MINLOC and MAXLOC get special treatment because their argument
508 might have to be reordered. */
511 add_sym_3ml (const char *name, gfc_isym_id id, enum class cl, int actual_ok, bt type,
512 int kind, int standard,
513 try (*check) (gfc_actual_arglist *),
514 gfc_expr *(*simplify) (gfc_expr *, gfc_expr *, gfc_expr *),
515 void (*resolve) (gfc_expr *, gfc_expr *, gfc_expr *, gfc_expr *),
516 const char *a1, bt type1, int kind1, int optional1,
517 const char *a2, bt type2, int kind2, int optional2,
518 const char *a3, bt type3, int kind3, int optional3)
528 add_sym (name, id, cl, actual_ok, type, kind, standard, cf, sf, rf,
529 a1, type1, kind1, optional1,
530 a2, type2, kind2, optional2,
531 a3, type3, kind3, optional3,
536 /* MINVAL, MAXVAL, PRODUCT, and SUM also get special treatment because
537 their argument also might have to be reordered. */
540 add_sym_3red (const char *name, gfc_isym_id id, enum class cl, int actual_ok, bt type,
541 int kind, int standard,
542 try (*check) (gfc_actual_arglist *),
543 gfc_expr *(*simplify) (gfc_expr *, gfc_expr *, gfc_expr *),
544 void (*resolve) (gfc_expr *, gfc_expr *, gfc_expr *, gfc_expr *),
545 const char *a1, bt type1, int kind1, int optional1,
546 const char *a2, bt type2, int kind2, int optional2,
547 const char *a3, bt type3, int kind3, int optional3)
557 add_sym (name, id, cl, actual_ok, type, kind, standard, cf, sf, rf,
558 a1, type1, kind1, optional1,
559 a2, type2, kind2, optional2,
560 a3, type3, kind3, optional3,
565 /* Add a symbol to the subroutine list where the subroutine takes
569 add_sym_3s (const char *name, gfc_isym_id id, enum class cl, bt type, int kind, int standard,
570 try (*check) (gfc_expr *, gfc_expr *, gfc_expr *),
571 gfc_expr *(*simplify) (gfc_expr *, gfc_expr *, gfc_expr *),
572 void (*resolve) (gfc_code *),
573 const char *a1, bt type1, int kind1, int optional1,
574 const char *a2, bt type2, int kind2, int optional2,
575 const char *a3, bt type3, int kind3, int optional3)
585 add_sym (name, id, cl, ACTUAL_NO, type, kind, standard, cf, sf, rf,
586 a1, type1, kind1, optional1,
587 a2, type2, kind2, optional2,
588 a3, type3, kind3, optional3,
593 /* Add a symbol to the function list where the function takes
597 add_sym_4 (const char *name, gfc_isym_id id, enum class cl, int actual_ok, bt type,
598 int kind, int standard,
599 try (*check) (gfc_expr *, gfc_expr *, gfc_expr *, gfc_expr *),
600 gfc_expr *(*simplify) (gfc_expr *, gfc_expr *, gfc_expr *,
602 void (*resolve) (gfc_expr *, gfc_expr *, gfc_expr *, gfc_expr *,
604 const char *a1, bt type1, int kind1, int optional1,
605 const char *a2, bt type2, int kind2, int optional2,
606 const char *a3, bt type3, int kind3, int optional3,
607 const char *a4, bt type4, int kind4, int optional4 )
617 add_sym (name, id, cl, actual_ok, type, kind, standard, cf, sf, rf,
618 a1, type1, kind1, optional1,
619 a2, type2, kind2, optional2,
620 a3, type3, kind3, optional3,
621 a4, type4, kind4, optional4,
626 /* Add a symbol to the subroutine list where the subroutine takes
630 add_sym_4s (const char *name, gfc_isym_id id, enum class cl, bt type, int kind, int standard,
631 try (*check) (gfc_expr *, gfc_expr *, gfc_expr *, gfc_expr *),
632 gfc_expr *(*simplify) (gfc_expr *, gfc_expr *, gfc_expr *,
634 void (*resolve) (gfc_code *),
635 const char *a1, bt type1, int kind1, int optional1,
636 const char *a2, bt type2, int kind2, int optional2,
637 const char *a3, bt type3, int kind3, int optional3,
638 const char *a4, bt type4, int kind4, int optional4)
648 add_sym (name, id, cl, ACTUAL_NO, type, kind, standard, cf, sf, rf,
649 a1, type1, kind1, optional1,
650 a2, type2, kind2, optional2,
651 a3, type3, kind3, optional3,
652 a4, type4, kind4, optional4,
657 /* Add a symbol to the subroutine list where the subroutine takes
661 add_sym_5s (const char *name, gfc_isym_id id, enum class cl, bt type, int kind, int standard,
662 try (*check) (gfc_expr *, gfc_expr *, gfc_expr *, gfc_expr *,
664 gfc_expr *(*simplify) (gfc_expr *, gfc_expr *, gfc_expr *,
665 gfc_expr *, gfc_expr *),
666 void (*resolve) (gfc_code *),
667 const char *a1, bt type1, int kind1, int optional1,
668 const char *a2, bt type2, int kind2, int optional2,
669 const char *a3, bt type3, int kind3, int optional3,
670 const char *a4, bt type4, int kind4, int optional4,
671 const char *a5, bt type5, int kind5, int optional5)
681 add_sym (name, id, cl, ACTUAL_NO, type, kind, standard, cf, sf, rf,
682 a1, type1, kind1, optional1,
683 a2, type2, kind2, optional2,
684 a3, type3, kind3, optional3,
685 a4, type4, kind4, optional4,
686 a5, type5, kind5, optional5,
691 /* Locate an intrinsic symbol given a base pointer, number of elements
692 in the table and a pointer to a name. Returns the NULL pointer if
693 a name is not found. */
695 static gfc_intrinsic_sym *
696 find_sym (gfc_intrinsic_sym *start, int n, const char *name)
698 /* name may be a user-supplied string, so we must first make sure
699 that we're comparing against a pointer into the global string
701 const char *p = gfc_get_string (name);
705 if (p == start->name)
716 /* Given a name, find a function in the intrinsic function table.
717 Returns NULL if not found. */
720 gfc_find_function (const char *name)
722 gfc_intrinsic_sym *sym;
724 sym = find_sym (functions, nfunc, name);
726 sym = find_sym (conversion, nconv, name);
732 /* Given a name, find a function in the intrinsic subroutine table.
733 Returns NULL if not found. */
736 gfc_find_subroutine (const char *name)
738 return find_sym (subroutines, nsub, name);
742 /* Given a string, figure out if it is the name of a generic intrinsic
746 gfc_generic_intrinsic (const char *name)
748 gfc_intrinsic_sym *sym;
750 sym = gfc_find_function (name);
751 return (sym == NULL) ? 0 : sym->generic;
755 /* Given a string, figure out if it is the name of a specific
756 intrinsic function or not. */
759 gfc_specific_intrinsic (const char *name)
761 gfc_intrinsic_sym *sym;
763 sym = gfc_find_function (name);
764 return (sym == NULL) ? 0 : sym->specific;
768 /* Given a string, figure out if it is the name of an intrinsic function
769 or subroutine allowed as an actual argument or not. */
771 gfc_intrinsic_actual_ok (const char *name, const bool subroutine_flag)
773 gfc_intrinsic_sym *sym;
775 /* Intrinsic subroutines are not allowed as actual arguments. */
780 sym = gfc_find_function (name);
781 return (sym == NULL) ? 0 : sym->actual_ok;
786 /* Given a string, figure out if it is the name of an intrinsic
787 subroutine or function. There are no generic intrinsic
788 subroutines, they are all specific. */
791 gfc_intrinsic_name (const char *name, int subroutine_flag)
793 return subroutine_flag ? gfc_find_subroutine (name) != NULL
794 : gfc_find_function (name) != NULL;
798 /* Collect a set of intrinsic functions into a generic collection.
799 The first argument is the name of the generic function, which is
800 also the name of a specific function. The rest of the specifics
801 currently in the table are placed into the list of specific
802 functions associated with that generic.
805 FIXME: Remove the argument STANDARD if no regressions are
806 encountered. Change all callers (approx. 360).
810 make_generic (const char *name, gfc_isym_id id, int standard ATTRIBUTE_UNUSED)
812 gfc_intrinsic_sym *g;
814 if (sizing != SZ_NOTHING)
817 g = gfc_find_function (name);
819 gfc_internal_error ("make_generic(): Can't find generic symbol '%s'",
822 gcc_assert (g->id == id);
826 if ((g + 1)->name != NULL)
827 g->specific_head = g + 1;
830 while (g->name != NULL)
832 gcc_assert (g->id == id);
844 /* Create a duplicate intrinsic function entry for the current
845 function, the only differences being the alternate name and
846 a different standard if necessary. Note that we use argument
847 lists more than once, but all argument lists are freed as a
851 make_alias (const char *name, int standard)
864 next_sym[0] = next_sym[-1];
865 next_sym->name = gfc_get_string (name);
866 next_sym->standard = standard;
876 /* Make the current subroutine noreturn. */
881 if (sizing == SZ_NOTHING)
882 next_sym[-1].noreturn = 1;
886 /* Add intrinsic functions. */
891 /* Argument names as in the standard (to be used as argument keywords). */
893 *a = "a", *f = "field", *pt = "pointer", *tg = "target",
894 *b = "b", *m = "matrix", *ma = "matrix_a", *mb = "matrix_b",
895 *c = "c", *n = "n", *ncopies= "ncopies", *pos = "pos", *bck = "back",
896 *i = "i", *v = "vector", *va = "vector_a", *vb = "vector_b",
897 *j = "j", *a1 = "a1", *fs = "fsource", *ts = "tsource",
898 *l = "l", *a2 = "a2", *mo = "mold", *ord = "order",
899 *p = "p", *ar = "array", *shp = "shape", *src = "source",
900 *r = "r", *bd = "boundary", *pad = "pad", *set = "set",
901 *s = "s", *dm = "dim", *kind = "kind", *msk = "mask",
902 *x = "x", *sh = "shift", *stg = "string", *ssg = "substring",
903 *y = "y", *sz = "size", *sta = "string_a", *stb = "string_b",
904 *z = "z", *ln = "len", *ut = "unit", *han = "handler",
905 *num = "number", *tm = "time", *nm = "name", *md = "mode";
907 int di, dr, dd, dl, dc, dz, ii;
909 di = gfc_default_integer_kind;
910 dr = gfc_default_real_kind;
911 dd = gfc_default_double_kind;
912 dl = gfc_default_logical_kind;
913 dc = gfc_default_character_kind;
914 dz = gfc_default_complex_kind;
915 ii = gfc_index_integer_kind;
917 add_sym_1 ("abs", GFC_ISYM_ABS, CLASS_ELEMENTAL, ACTUAL_YES, BT_REAL, dr, GFC_STD_F77,
918 gfc_check_abs, gfc_simplify_abs, gfc_resolve_abs,
919 a, BT_REAL, dr, REQUIRED);
921 add_sym_1 ("iabs", GFC_ISYM_ABS, CLASS_ELEMENTAL, ACTUAL_YES, BT_INTEGER, di, GFC_STD_F77,
922 NULL, gfc_simplify_abs, gfc_resolve_abs,
923 a, BT_INTEGER, di, REQUIRED);
925 add_sym_1 ("dabs", GFC_ISYM_ABS, CLASS_ELEMENTAL, ACTUAL_YES, BT_REAL, dd, GFC_STD_F77,
926 NULL, gfc_simplify_abs, gfc_resolve_abs,
927 a, BT_REAL, dd, REQUIRED);
929 add_sym_1 ("cabs", GFC_ISYM_ABS, CLASS_ELEMENTAL, ACTUAL_YES, BT_REAL, dr, GFC_STD_F77,
930 NULL, gfc_simplify_abs, gfc_resolve_abs,
931 a, BT_COMPLEX, dz, REQUIRED);
933 add_sym_1 ("zabs", GFC_ISYM_ABS, CLASS_ELEMENTAL, ACTUAL_YES, BT_REAL, dd, GFC_STD_GNU,
934 NULL, gfc_simplify_abs, gfc_resolve_abs,
935 a, BT_COMPLEX, dd, REQUIRED);
937 make_alias ("cdabs", GFC_STD_GNU);
939 make_generic ("abs", GFC_ISYM_ABS, GFC_STD_F77);
941 /* The checking function for ACCESS is called gfc_check_access_func
942 because the name gfc_check_access is already used in module.c. */
943 add_sym_2 ("access", GFC_ISYM_ACCESS, NO_CLASS, ACTUAL_NO, BT_INTEGER, di, GFC_STD_GNU,
944 gfc_check_access_func, NULL, gfc_resolve_access,
945 nm, BT_CHARACTER, dc, REQUIRED, md, BT_CHARACTER, dc, REQUIRED);
947 make_generic ("access", GFC_ISYM_ACCESS, GFC_STD_GNU);
949 add_sym_1 ("achar", GFC_ISYM_ACHAR, CLASS_ELEMENTAL, ACTUAL_NO, BT_CHARACTER, dc, GFC_STD_F95,
950 gfc_check_achar, gfc_simplify_achar, gfc_resolve_achar,
951 i, BT_INTEGER, di, REQUIRED);
953 make_generic ("achar", GFC_ISYM_ACHAR, GFC_STD_F95);
955 add_sym_1 ("acos", GFC_ISYM_ACOS, CLASS_ELEMENTAL, ACTUAL_YES, BT_REAL, dr, GFC_STD_F77,
956 gfc_check_fn_r, gfc_simplify_acos, gfc_resolve_acos,
957 x, BT_REAL, dr, REQUIRED);
959 add_sym_1 ("dacos", GFC_ISYM_ACOS, CLASS_ELEMENTAL, ACTUAL_YES, BT_REAL, dd, GFC_STD_F77,
960 NULL, gfc_simplify_acos, gfc_resolve_acos,
961 x, BT_REAL, dd, REQUIRED);
963 make_generic ("acos", GFC_ISYM_ACOS, GFC_STD_F77);
965 add_sym_1 ("acosh", GFC_ISYM_ACOSH, CLASS_ELEMENTAL, ACTUAL_YES, BT_REAL, dr, GFC_STD_GNU,
966 gfc_check_fn_r, gfc_simplify_acosh, gfc_resolve_acosh,
967 x, BT_REAL, dr, REQUIRED);
969 add_sym_1 ("dacosh", GFC_ISYM_ACOSH, CLASS_ELEMENTAL, ACTUAL_YES, BT_REAL, dd, GFC_STD_GNU,
970 NULL, gfc_simplify_acosh, gfc_resolve_acosh,
971 x, BT_REAL, dd, REQUIRED);
973 make_generic ("acosh", GFC_ISYM_ACOSH, GFC_STD_GNU);
975 add_sym_1 ("adjustl", GFC_ISYM_ADJUSTL, CLASS_ELEMENTAL, ACTUAL_NO, BT_CHARACTER, dc, GFC_STD_F95,
976 NULL, gfc_simplify_adjustl, NULL,
977 stg, BT_CHARACTER, dc, REQUIRED);
979 make_generic ("adjustl", GFC_ISYM_ADJUSTL, GFC_STD_F95);
981 add_sym_1 ("adjustr", GFC_ISYM_ADJUSTR, CLASS_ELEMENTAL, ACTUAL_NO, BT_CHARACTER, dc, GFC_STD_F95,
982 NULL, gfc_simplify_adjustr, NULL,
983 stg, BT_CHARACTER, dc, REQUIRED);
985 make_generic ("adjustr", GFC_ISYM_ADJUSTR, GFC_STD_F95);
987 add_sym_1 ("aimag", GFC_ISYM_AIMAG, CLASS_ELEMENTAL, ACTUAL_YES, BT_REAL, dr, GFC_STD_F77,
988 gfc_check_fn_c, gfc_simplify_aimag, gfc_resolve_aimag,
989 z, BT_COMPLEX, dz, REQUIRED);
991 make_alias ("imag", GFC_STD_GNU);
992 make_alias ("imagpart", GFC_STD_GNU);
994 add_sym_1 ("dimag", GFC_ISYM_AIMAG, CLASS_ELEMENTAL, ACTUAL_YES, BT_REAL, dd, GFC_STD_GNU,
995 NULL, gfc_simplify_aimag, gfc_resolve_aimag,
996 z, BT_COMPLEX, dd, REQUIRED);
998 make_generic ("aimag", GFC_ISYM_AIMAG, GFC_STD_F77);
1000 add_sym_2 ("aint", GFC_ISYM_AINT, CLASS_ELEMENTAL, ACTUAL_YES, BT_REAL, dr, GFC_STD_F77,
1001 gfc_check_a_xkind, gfc_simplify_aint, gfc_resolve_aint,
1002 a, BT_REAL, dr, REQUIRED, kind, BT_INTEGER, di, OPTIONAL);
1004 add_sym_1 ("dint", GFC_ISYM_AINT, CLASS_ELEMENTAL, ACTUAL_YES, BT_REAL, dd, GFC_STD_F77,
1005 NULL, gfc_simplify_dint, gfc_resolve_dint,
1006 a, BT_REAL, dd, REQUIRED);
1008 make_generic ("aint", GFC_ISYM_AINT, GFC_STD_F77);
1010 add_sym_2 ("all", GFC_ISYM_ALL, CLASS_TRANSFORMATIONAL, ACTUAL_NO, BT_LOGICAL, dl, GFC_STD_F95,
1011 gfc_check_all_any, NULL, gfc_resolve_all,
1012 msk, BT_LOGICAL, dl, REQUIRED, dm, BT_INTEGER, ii, OPTIONAL);
1014 make_generic ("all", GFC_ISYM_ALL, GFC_STD_F95);
1016 add_sym_1 ("allocated", GFC_ISYM_ALLOCATED, CLASS_INQUIRY, ACTUAL_NO, BT_LOGICAL, dl, GFC_STD_F95,
1017 gfc_check_allocated, NULL, NULL,
1018 ar, BT_UNKNOWN, 0, REQUIRED);
1020 make_generic ("allocated", GFC_ISYM_ALLOCATED, GFC_STD_F95);
1022 add_sym_2 ("anint", GFC_ISYM_ANINT, CLASS_ELEMENTAL, ACTUAL_YES, BT_REAL, dr, GFC_STD_F77,
1023 gfc_check_a_xkind, gfc_simplify_anint, gfc_resolve_anint,
1024 a, BT_REAL, dr, REQUIRED, kind, BT_INTEGER, di, OPTIONAL);
1026 add_sym_1 ("dnint", GFC_ISYM_ANINT, CLASS_ELEMENTAL, ACTUAL_YES, BT_REAL, dd, GFC_STD_F77,
1027 NULL, gfc_simplify_dnint, gfc_resolve_dnint,
1028 a, BT_REAL, dd, REQUIRED);
1030 make_generic ("anint", GFC_ISYM_ANINT, GFC_STD_F77);
1032 add_sym_2 ("any", GFC_ISYM_ANY, CLASS_TRANSFORMATIONAL, ACTUAL_NO, BT_LOGICAL, dl, GFC_STD_F95,
1033 gfc_check_all_any, NULL, gfc_resolve_any,
1034 msk, BT_LOGICAL, dl, REQUIRED, dm, BT_INTEGER, ii, OPTIONAL);
1036 make_generic ("any", GFC_ISYM_ANY, GFC_STD_F95);
1038 add_sym_1 ("asin", GFC_ISYM_ASIN, CLASS_ELEMENTAL, ACTUAL_YES, BT_REAL, dr, GFC_STD_F77,
1039 gfc_check_fn_r, gfc_simplify_asin, gfc_resolve_asin,
1040 x, BT_REAL, dr, REQUIRED);
1042 add_sym_1 ("dasin", GFC_ISYM_ASIN, CLASS_ELEMENTAL, ACTUAL_YES, BT_REAL, dd, GFC_STD_F77,
1043 NULL, gfc_simplify_asin, gfc_resolve_asin,
1044 x, BT_REAL, dd, REQUIRED);
1046 make_generic ("asin", GFC_ISYM_ASIN, GFC_STD_F77);
1048 add_sym_1 ("asinh", GFC_ISYM_ASINH, CLASS_ELEMENTAL, ACTUAL_YES, BT_REAL, dr, GFC_STD_GNU,
1049 gfc_check_fn_r, gfc_simplify_asinh, gfc_resolve_asinh,
1050 x, BT_REAL, dr, REQUIRED);
1052 add_sym_1 ("dasinh", GFC_ISYM_ASINH, CLASS_ELEMENTAL, ACTUAL_YES, BT_REAL, dd, GFC_STD_GNU,
1053 NULL, gfc_simplify_asinh, gfc_resolve_asinh,
1054 x, BT_REAL, dd, REQUIRED);
1056 make_generic ("asinh", GFC_ISYM_ASINH, GFC_STD_GNU);
1058 add_sym_2 ("associated", GFC_ISYM_ASSOCIATED, CLASS_INQUIRY, ACTUAL_NO, BT_LOGICAL, dl,
1059 GFC_STD_F95, gfc_check_associated, NULL, NULL,
1060 pt, BT_UNKNOWN, 0, REQUIRED, tg, BT_UNKNOWN, 0, OPTIONAL);
1062 make_generic ("associated", GFC_ISYM_ASSOCIATED, GFC_STD_F95);
1064 add_sym_1 ("atan", GFC_ISYM_ATAN, CLASS_ELEMENTAL, ACTUAL_YES, BT_REAL, dr, GFC_STD_F77,
1065 gfc_check_fn_r, gfc_simplify_atan, gfc_resolve_atan,
1066 x, BT_REAL, dr, REQUIRED);
1068 add_sym_1 ("datan", GFC_ISYM_ATAN, CLASS_ELEMENTAL, ACTUAL_YES, BT_REAL, dd, GFC_STD_F77,
1069 NULL, gfc_simplify_atan, gfc_resolve_atan,
1070 x, BT_REAL, dd, REQUIRED);
1072 make_generic ("atan", GFC_ISYM_ATAN, GFC_STD_F77);
1074 add_sym_1 ("atanh", GFC_ISYM_ATANH, CLASS_ELEMENTAL, ACTUAL_YES, BT_REAL, dr, GFC_STD_GNU,
1075 gfc_check_fn_r, gfc_simplify_atanh, gfc_resolve_atanh,
1076 x, BT_REAL, dr, REQUIRED);
1078 add_sym_1 ("datanh", GFC_ISYM_ATANH, CLASS_ELEMENTAL, ACTUAL_YES, BT_REAL, dd, GFC_STD_GNU,
1079 NULL, gfc_simplify_atanh, gfc_resolve_atanh,
1080 x, BT_REAL, dd, REQUIRED);
1082 make_generic ("atanh", GFC_ISYM_ATANH, GFC_STD_GNU);
1084 add_sym_2 ("atan2", GFC_ISYM_ATAN2, CLASS_ELEMENTAL, ACTUAL_YES, BT_REAL, dr, GFC_STD_F77,
1085 gfc_check_atan2, gfc_simplify_atan2, gfc_resolve_atan2,
1086 y, BT_REAL, dr, REQUIRED, x, BT_REAL, dr, REQUIRED);
1088 add_sym_2 ("datan2", GFC_ISYM_ATAN2, CLASS_ELEMENTAL, ACTUAL_YES, BT_REAL, dd, GFC_STD_F77,
1089 NULL, gfc_simplify_atan2, gfc_resolve_atan2,
1090 y, BT_REAL, dd, REQUIRED, x, BT_REAL, dd, REQUIRED);
1092 make_generic ("atan2", GFC_ISYM_ATAN2, GFC_STD_F77);
1094 /* Bessel and Neumann functions for G77 compatibility. */
1095 add_sym_1 ("besj0", GFC_ISYM_J0, CLASS_ELEMENTAL, ACTUAL_NO, BT_REAL, dr, GFC_STD_GNU,
1096 gfc_check_fn_r, NULL, gfc_resolve_g77_math1,
1097 x, BT_REAL, dr, REQUIRED);
1099 add_sym_1 ("dbesj0", GFC_ISYM_J0, CLASS_ELEMENTAL, ACTUAL_NO, BT_REAL, dd, GFC_STD_GNU,
1100 gfc_check_fn_r, NULL, gfc_resolve_g77_math1,
1101 x, BT_REAL, dd, REQUIRED);
1103 make_generic ("besj0", GFC_ISYM_J0, GFC_STD_GNU);
1105 add_sym_1 ("besj1", GFC_ISYM_J1, CLASS_ELEMENTAL, ACTUAL_NO, BT_REAL, dr, GFC_STD_GNU,
1106 gfc_check_fn_r, NULL, gfc_resolve_g77_math1,
1107 x, BT_REAL, dr, REQUIRED);
1109 add_sym_1 ("dbesj1", GFC_ISYM_J1, CLASS_ELEMENTAL, ACTUAL_NO, BT_REAL, dd, GFC_STD_GNU,
1110 gfc_check_fn_r, NULL, gfc_resolve_g77_math1,
1111 x, BT_REAL, dd, REQUIRED);
1113 make_generic ("besj1", GFC_ISYM_J1, GFC_STD_GNU);
1115 add_sym_2 ("besjn", GFC_ISYM_JN, CLASS_ELEMENTAL, ACTUAL_NO, BT_REAL, dr, GFC_STD_GNU,
1116 gfc_check_besn, NULL, gfc_resolve_besn,
1117 n, BT_INTEGER, di, REQUIRED, x, BT_REAL, dr, REQUIRED);
1119 add_sym_2 ("dbesjn", GFC_ISYM_JN, CLASS_ELEMENTAL, ACTUAL_NO, BT_REAL, dd, GFC_STD_GNU,
1120 gfc_check_besn, NULL, gfc_resolve_besn,
1121 n, BT_INTEGER, di, REQUIRED, x, BT_REAL, dd, REQUIRED);
1123 make_generic ("besjn", GFC_ISYM_JN, GFC_STD_GNU);
1125 add_sym_1 ("besy0", GFC_ISYM_Y0, CLASS_ELEMENTAL, ACTUAL_NO, BT_REAL, dr, GFC_STD_GNU,
1126 gfc_check_fn_r, NULL, gfc_resolve_g77_math1,
1127 x, BT_REAL, dr, REQUIRED);
1129 add_sym_1 ("dbesy0", GFC_ISYM_Y0, CLASS_ELEMENTAL, ACTUAL_NO, BT_REAL, dd, GFC_STD_GNU,
1130 gfc_check_fn_r, NULL, gfc_resolve_g77_math1,
1131 x, BT_REAL, dd, REQUIRED);
1133 make_generic ("besy0", GFC_ISYM_Y0, GFC_STD_GNU);
1135 add_sym_1 ("besy1", GFC_ISYM_Y1, CLASS_ELEMENTAL, ACTUAL_NO, BT_REAL, dr, GFC_STD_GNU,
1136 gfc_check_fn_r, NULL, gfc_resolve_g77_math1,
1137 x, BT_REAL, dr, REQUIRED);
1139 add_sym_1 ("dbesy1", GFC_ISYM_Y1, CLASS_ELEMENTAL, ACTUAL_NO, BT_REAL, dd, GFC_STD_GNU,
1140 gfc_check_fn_r, NULL, gfc_resolve_g77_math1,
1141 x, BT_REAL, dd, REQUIRED);
1143 make_generic ("besy1", GFC_ISYM_Y1, GFC_STD_GNU);
1145 add_sym_2 ("besyn", GFC_ISYM_YN, CLASS_ELEMENTAL, ACTUAL_NO, BT_REAL, dr, GFC_STD_GNU,
1146 gfc_check_besn, NULL, gfc_resolve_besn,
1147 n, BT_INTEGER, di, REQUIRED, x, BT_REAL, dr, REQUIRED);
1149 add_sym_2 ("dbesyn", GFC_ISYM_YN, CLASS_ELEMENTAL, ACTUAL_NO, BT_REAL, dd, GFC_STD_GNU,
1150 gfc_check_besn, NULL, gfc_resolve_besn,
1151 n, BT_INTEGER, di, REQUIRED, x, BT_REAL, dd, REQUIRED);
1153 make_generic ("besyn", GFC_ISYM_YN, GFC_STD_GNU);
1155 add_sym_1 ("bit_size", GFC_ISYM_BIT_SIZE, CLASS_INQUIRY, ACTUAL_NO, BT_INTEGER, di, GFC_STD_F95,
1156 gfc_check_i, gfc_simplify_bit_size, NULL,
1157 i, BT_INTEGER, di, REQUIRED);
1159 make_generic ("bit_size", GFC_ISYM_BIT_SIZE, GFC_STD_F95);
1161 add_sym_2 ("btest", GFC_ISYM_BTEST, CLASS_ELEMENTAL, ACTUAL_NO, BT_LOGICAL, dl, GFC_STD_F95,
1162 gfc_check_btest, gfc_simplify_btest, gfc_resolve_btest,
1163 i, BT_INTEGER, di, REQUIRED, pos, BT_INTEGER, di, REQUIRED);
1165 make_generic ("btest", GFC_ISYM_BTEST, GFC_STD_F95);
1167 add_sym_2 ("ceiling", GFC_ISYM_CEILING, CLASS_ELEMENTAL, ACTUAL_NO, BT_INTEGER, di, GFC_STD_F95,
1168 gfc_check_a_ikind, gfc_simplify_ceiling, gfc_resolve_ceiling,
1169 a, BT_REAL, dr, REQUIRED, kind, BT_INTEGER, di, OPTIONAL);
1171 make_generic ("ceiling", GFC_ISYM_CEILING, GFC_STD_F95);
1173 add_sym_2 ("char", GFC_ISYM_CHAR, CLASS_ELEMENTAL, ACTUAL_NO, BT_CHARACTER, dc, GFC_STD_F77,
1174 gfc_check_char, gfc_simplify_char, gfc_resolve_char,
1175 i, BT_INTEGER, di, REQUIRED, kind, BT_INTEGER, di, OPTIONAL);
1177 make_generic ("char", GFC_ISYM_CHAR, GFC_STD_F77);
1179 add_sym_1 ("chdir", GFC_ISYM_CHDIR, NO_CLASS, ACTUAL_NO, BT_INTEGER, di,
1180 GFC_STD_GNU, gfc_check_chdir, NULL, gfc_resolve_chdir,
1181 nm, BT_CHARACTER, dc, REQUIRED);
1183 make_generic ("chdir", GFC_ISYM_CHDIR, GFC_STD_GNU);
1185 add_sym_2 ("chmod", GFC_ISYM_CHMOD, NO_CLASS, ACTUAL_NO, BT_INTEGER, di, GFC_STD_GNU,
1186 gfc_check_chmod, NULL, gfc_resolve_chmod,
1187 nm, BT_CHARACTER, dc, REQUIRED, md, BT_CHARACTER, dc, REQUIRED);
1189 make_generic ("chmod", GFC_ISYM_CHMOD, GFC_STD_GNU);
1191 add_sym_3 ("cmplx", GFC_ISYM_CMPLX, CLASS_ELEMENTAL, ACTUAL_NO, BT_COMPLEX, dz, GFC_STD_F77,
1192 gfc_check_cmplx, gfc_simplify_cmplx, gfc_resolve_cmplx,
1193 x, BT_UNKNOWN, dr, REQUIRED, y, BT_UNKNOWN, dr, OPTIONAL,
1194 kind, BT_INTEGER, di, OPTIONAL);
1196 make_generic ("cmplx", GFC_ISYM_CMPLX, GFC_STD_F77);
1198 add_sym_0 ("command_argument_count", GFC_ISYM_COMMAND_ARGUMENT_COUNT, CLASS_INQUIRY,
1199 ACTUAL_NO, BT_INTEGER, di, GFC_STD_F2003, NULL, NULL, NULL);
1201 make_generic ("command_argument_count", GFC_ISYM_COMMAND_ARGUMENT_COUNT,
1204 add_sym_2 ("complex", GFC_ISYM_COMPLEX, CLASS_ELEMENTAL, ACTUAL_NO, BT_COMPLEX, dz, GFC_STD_GNU,
1205 gfc_check_complex, gfc_simplify_complex, gfc_resolve_complex,
1206 x, BT_UNKNOWN, dr, REQUIRED, y, BT_UNKNOWN, dr, REQUIRED);
1208 make_generic ("complex", GFC_ISYM_COMPLEX, GFC_STD_GNU);
1210 /* Making dcmplx a specific of cmplx causes cmplx to return a double
1211 complex instead of the default complex. */
1213 add_sym_2 ("dcmplx", GFC_ISYM_CMPLX, CLASS_ELEMENTAL, ACTUAL_NO, BT_COMPLEX, dd, GFC_STD_GNU,
1214 gfc_check_dcmplx, gfc_simplify_dcmplx, gfc_resolve_dcmplx,
1215 x, BT_REAL, dd, REQUIRED, y, BT_REAL, dd, OPTIONAL);
1217 make_generic ("dcmplx", GFC_ISYM_CMPLX, GFC_STD_GNU);
1219 add_sym_1 ("conjg", GFC_ISYM_CONJG, CLASS_ELEMENTAL, ACTUAL_YES, BT_COMPLEX, dz, GFC_STD_F77,
1220 gfc_check_fn_c, gfc_simplify_conjg, gfc_resolve_conjg,
1221 z, BT_COMPLEX, dz, REQUIRED);
1223 add_sym_1 ("dconjg", GFC_ISYM_CONJG, CLASS_ELEMENTAL, ACTUAL_YES, BT_COMPLEX, dd, GFC_STD_GNU,
1224 NULL, gfc_simplify_conjg, gfc_resolve_conjg,
1225 z, BT_COMPLEX, dd, REQUIRED);
1227 make_generic ("conjg", GFC_ISYM_CONJG, GFC_STD_F77);
1229 add_sym_1 ("cos", GFC_ISYM_COS, CLASS_ELEMENTAL, ACTUAL_YES, BT_REAL, dr, GFC_STD_F77,
1230 gfc_check_fn_rc, gfc_simplify_cos, gfc_resolve_cos,
1231 x, BT_REAL, dr, REQUIRED);
1233 add_sym_1 ("dcos", GFC_ISYM_COS, CLASS_ELEMENTAL, ACTUAL_YES, BT_REAL, dd, GFC_STD_F77,
1234 gfc_check_fn_rc, gfc_simplify_cos, gfc_resolve_cos,
1235 x, BT_REAL, dd, REQUIRED);
1237 add_sym_1 ("ccos", GFC_ISYM_COS, CLASS_ELEMENTAL, ACTUAL_YES, BT_COMPLEX, dz, GFC_STD_F77,
1238 NULL, gfc_simplify_cos, gfc_resolve_cos,
1239 x, BT_COMPLEX, dz, REQUIRED);
1241 add_sym_1 ("zcos", GFC_ISYM_COS, CLASS_ELEMENTAL, ACTUAL_YES, BT_COMPLEX, dd, GFC_STD_GNU,
1242 NULL, gfc_simplify_cos, gfc_resolve_cos,
1243 x, BT_COMPLEX, dd, REQUIRED);
1245 make_alias ("cdcos", GFC_STD_GNU);
1247 make_generic ("cos", GFC_ISYM_COS, GFC_STD_F77);
1249 add_sym_1 ("cosh", GFC_ISYM_COSH, CLASS_ELEMENTAL, ACTUAL_YES, BT_REAL, dr, GFC_STD_F77,
1250 gfc_check_fn_r, gfc_simplify_cosh, gfc_resolve_cosh,
1251 x, BT_REAL, dr, REQUIRED);
1253 add_sym_1 ("dcosh", GFC_ISYM_COSH, CLASS_ELEMENTAL, ACTUAL_YES, BT_REAL, dd, GFC_STD_F77,
1254 NULL, gfc_simplify_cosh, gfc_resolve_cosh,
1255 x, BT_REAL, dd, REQUIRED);
1257 make_generic ("cosh", GFC_ISYM_COSH, GFC_STD_F77);
1259 add_sym_3 ("count", GFC_ISYM_COUNT, CLASS_TRANSFORMATIONAL, ACTUAL_NO,
1260 BT_INTEGER, di, GFC_STD_F95,
1261 gfc_check_count, NULL, gfc_resolve_count,
1262 msk, BT_LOGICAL, dl, REQUIRED, dm, BT_INTEGER, ii, OPTIONAL,
1263 kind, BT_INTEGER, di, OPTIONAL);
1265 make_generic ("count", GFC_ISYM_COUNT, GFC_STD_F95);
1267 add_sym_3 ("cshift", GFC_ISYM_CSHIFT, CLASS_TRANSFORMATIONAL, ACTUAL_NO, BT_REAL, dr, GFC_STD_F95,
1268 gfc_check_cshift, NULL, gfc_resolve_cshift,
1269 ar, BT_REAL, dr, REQUIRED, sh, BT_INTEGER, di, REQUIRED,
1270 dm, BT_INTEGER, ii, OPTIONAL);
1272 make_generic ("cshift", GFC_ISYM_CSHIFT, GFC_STD_F95);
1274 add_sym_1 ("ctime", GFC_ISYM_CTIME, NO_CLASS, ACTUAL_NO, BT_CHARACTER, 0, GFC_STD_GNU,
1275 gfc_check_ctime, NULL, gfc_resolve_ctime,
1276 tm, BT_INTEGER, di, REQUIRED);
1278 make_generic ("ctime", GFC_ISYM_CTIME, GFC_STD_GNU);
1280 add_sym_1 ("dble", GFC_ISYM_DBLE, CLASS_ELEMENTAL, ACTUAL_NO, BT_REAL, dd, GFC_STD_F77,
1281 gfc_check_dble, gfc_simplify_dble, gfc_resolve_dble,
1282 a, BT_REAL, dr, REQUIRED);
1284 make_alias ("dfloat", GFC_STD_GNU);
1286 make_generic ("dble", GFC_ISYM_DBLE, GFC_STD_F77);
1288 add_sym_1 ("digits", GFC_ISYM_DIGITS, CLASS_INQUIRY, ACTUAL_NO, BT_INTEGER, di, GFC_STD_F95,
1289 gfc_check_digits, gfc_simplify_digits, NULL,
1290 x, BT_UNKNOWN, dr, REQUIRED);
1292 make_generic ("digits", GFC_ISYM_DIGITS, GFC_STD_F95);
1294 add_sym_2 ("dim", GFC_ISYM_DIM, CLASS_ELEMENTAL, ACTUAL_YES, BT_REAL, dr, GFC_STD_F77,
1295 gfc_check_a_p, gfc_simplify_dim, gfc_resolve_dim,
1296 x, BT_REAL, dr, REQUIRED, y, BT_UNKNOWN, dr, REQUIRED);
1298 add_sym_2 ("idim", GFC_ISYM_DIM, CLASS_ELEMENTAL, ACTUAL_YES, BT_INTEGER, di, GFC_STD_F77,
1299 NULL, gfc_simplify_dim, gfc_resolve_dim,
1300 x, BT_INTEGER, di, REQUIRED, y, BT_INTEGER, di, REQUIRED);
1302 add_sym_2 ("ddim", GFC_ISYM_DIM, CLASS_ELEMENTAL, ACTUAL_YES, BT_REAL, dd, GFC_STD_F77,
1303 NULL, gfc_simplify_dim, gfc_resolve_dim,
1304 x, BT_REAL, dd, REQUIRED, y, BT_REAL, dd, REQUIRED);
1306 make_generic ("dim", GFC_ISYM_DIM, GFC_STD_F77);
1308 add_sym_2 ("dot_product", GFC_ISYM_DOT_PRODUCT, CLASS_TRANSFORMATIONAL, ACTUAL_NO, BT_REAL, dr,
1309 GFC_STD_F95, gfc_check_dot_product, NULL, gfc_resolve_dot_product,
1310 va, BT_REAL, dr, REQUIRED, vb, BT_REAL, dr, REQUIRED);
1312 make_generic ("dot_product", GFC_ISYM_DOT_PRODUCT, GFC_STD_F95);
1314 add_sym_2 ("dprod", GFC_ISYM_DPROD,CLASS_ELEMENTAL, ACTUAL_YES, BT_REAL, dd, GFC_STD_F77,
1315 NULL, gfc_simplify_dprod, gfc_resolve_dprod,
1316 x, BT_REAL, dr, REQUIRED, y, BT_REAL, dr, REQUIRED);
1318 make_generic ("dprod", GFC_ISYM_DPROD, GFC_STD_F77);
1320 add_sym_1 ("dreal", GFC_ISYM_REAL, CLASS_ELEMENTAL, ACTUAL_NO, BT_REAL, dd, GFC_STD_GNU,
1322 a, BT_COMPLEX, dd, REQUIRED);
1324 make_generic ("dreal", GFC_ISYM_REAL, GFC_STD_GNU);
1326 add_sym_4 ("eoshift", GFC_ISYM_EOSHIFT, CLASS_TRANSFORMATIONAL, ACTUAL_NO, BT_REAL, dr, GFC_STD_F95,
1327 gfc_check_eoshift, NULL, gfc_resolve_eoshift,
1328 ar, BT_REAL, dr, 0, sh, BT_INTEGER, ii, REQUIRED,
1329 bd, BT_REAL, dr, 1, dm, BT_INTEGER, ii, OPTIONAL);
1331 make_generic ("eoshift", GFC_ISYM_EOSHIFT, GFC_STD_F95);
1333 add_sym_1 ("epsilon", GFC_ISYM_EPSILON, CLASS_INQUIRY, ACTUAL_NO, BT_REAL, dr, GFC_STD_F95,
1334 gfc_check_x, gfc_simplify_epsilon, NULL,
1335 x, BT_REAL, dr, REQUIRED);
1337 make_generic ("epsilon", GFC_ISYM_EPSILON, GFC_STD_F95);
1339 /* G77 compatibility for the ERF() and ERFC() functions. */
1340 add_sym_1 ("erf", GFC_ISYM_ERF, CLASS_ELEMENTAL, ACTUAL_NO, BT_REAL, dr, GFC_STD_GNU,
1341 gfc_check_fn_r, NULL, gfc_resolve_g77_math1,
1342 x, BT_REAL, dr, REQUIRED);
1344 add_sym_1 ("derf", GFC_ISYM_ERF, CLASS_ELEMENTAL, ACTUAL_NO, BT_REAL, dd, GFC_STD_GNU,
1345 gfc_check_fn_r, NULL, gfc_resolve_g77_math1,
1346 x, BT_REAL, dd, REQUIRED);
1348 make_generic ("erf", GFC_ISYM_ERF, GFC_STD_GNU);
1350 add_sym_1 ("erfc", GFC_ISYM_ERFC, CLASS_ELEMENTAL, ACTUAL_NO, BT_REAL, dr, GFC_STD_GNU,
1351 gfc_check_fn_r, NULL, gfc_resolve_g77_math1,
1352 x, BT_REAL, dr, REQUIRED);
1354 add_sym_1 ("derfc", GFC_ISYM_ERFC, CLASS_ELEMENTAL, ACTUAL_NO, BT_REAL, dd, GFC_STD_GNU,
1355 gfc_check_fn_r, NULL, gfc_resolve_g77_math1,
1356 x, BT_REAL, dd, REQUIRED);
1358 make_generic ("erfc", GFC_ISYM_ERFC, GFC_STD_GNU);
1360 /* G77 compatibility */
1361 add_sym_1 ("etime", GFC_ISYM_ETIME, NO_CLASS, ACTUAL_NO, BT_REAL, 4, GFC_STD_GNU,
1362 gfc_check_etime, NULL, NULL,
1363 x, BT_REAL, 4, REQUIRED);
1365 make_alias ("dtime", GFC_STD_GNU);
1367 make_generic ("etime", GFC_ISYM_ETIME, GFC_STD_GNU);
1369 add_sym_1 ("exp", GFC_ISYM_EXP, CLASS_ELEMENTAL, ACTUAL_YES, BT_REAL, dr, GFC_STD_F77,
1370 gfc_check_fn_rc, gfc_simplify_exp, gfc_resolve_exp,
1371 x, BT_REAL, dr, REQUIRED);
1373 add_sym_1 ("dexp", GFC_ISYM_EXP, CLASS_ELEMENTAL, ACTUAL_YES, BT_REAL, dd, GFC_STD_F77,
1374 NULL, gfc_simplify_exp, gfc_resolve_exp,
1375 x, BT_REAL, dd, REQUIRED);
1377 add_sym_1 ("cexp", GFC_ISYM_EXP, CLASS_ELEMENTAL, ACTUAL_YES, BT_COMPLEX, dz, GFC_STD_F77,
1378 NULL, gfc_simplify_exp, gfc_resolve_exp,
1379 x, BT_COMPLEX, dz, REQUIRED);
1381 add_sym_1 ("zexp", GFC_ISYM_EXP, CLASS_ELEMENTAL, ACTUAL_YES, BT_COMPLEX, dd, GFC_STD_GNU,
1382 NULL, gfc_simplify_exp, gfc_resolve_exp,
1383 x, BT_COMPLEX, dd, REQUIRED);
1385 make_alias ("cdexp", GFC_STD_GNU);
1387 make_generic ("exp", GFC_ISYM_EXP, GFC_STD_F77);
1389 add_sym_1 ("exponent", GFC_ISYM_EXPONENT, CLASS_ELEMENTAL, ACTUAL_NO, BT_INTEGER, di, GFC_STD_F95,
1390 gfc_check_x, gfc_simplify_exponent, gfc_resolve_exponent,
1391 x, BT_REAL, dr, REQUIRED);
1393 make_generic ("exponent", GFC_ISYM_EXPONENT, GFC_STD_F95);
1395 add_sym_0 ("fdate", GFC_ISYM_FDATE, NO_CLASS, ACTUAL_NO, BT_CHARACTER, dc, GFC_STD_GNU,
1396 NULL, NULL, gfc_resolve_fdate);
1398 make_generic ("fdate", GFC_ISYM_FDATE, GFC_STD_GNU);
1400 add_sym_2 ("floor", GFC_ISYM_FLOOR, CLASS_ELEMENTAL, ACTUAL_NO, BT_INTEGER, di, GFC_STD_F95,
1401 gfc_check_a_ikind, gfc_simplify_floor, gfc_resolve_floor,
1402 a, BT_REAL, dr, REQUIRED, kind, BT_INTEGER, di, OPTIONAL);
1404 make_generic ("floor", GFC_ISYM_FLOOR, GFC_STD_F95);
1406 /* G77 compatible fnum */
1407 add_sym_1 ("fnum", GFC_ISYM_FNUM, NO_CLASS, ACTUAL_NO, BT_INTEGER, di, GFC_STD_GNU,
1408 gfc_check_fnum, NULL, gfc_resolve_fnum,
1409 ut, BT_INTEGER, di, REQUIRED);
1411 make_generic ("fnum", GFC_ISYM_FNUM, GFC_STD_GNU);
1413 add_sym_1 ("fraction", GFC_ISYM_FRACTION, CLASS_ELEMENTAL, ACTUAL_NO, BT_REAL, dr, GFC_STD_F95,
1414 gfc_check_x, gfc_simplify_fraction, gfc_resolve_fraction,
1415 x, BT_REAL, dr, REQUIRED);
1417 make_generic ("fraction", GFC_ISYM_FRACTION, GFC_STD_F95);
1419 add_sym_2 ("fstat", GFC_ISYM_FSTAT, NO_CLASS, ACTUAL_NO, BT_INTEGER, di, GFC_STD_GNU,
1420 gfc_check_fstat, NULL, gfc_resolve_fstat,
1421 a, BT_INTEGER, di, REQUIRED, b, BT_INTEGER, di, REQUIRED);
1423 make_generic ("fstat", GFC_ISYM_FSTAT, GFC_STD_GNU);
1425 add_sym_1 ("ftell", GFC_ISYM_FTELL, NO_CLASS, ACTUAL_NO, BT_INTEGER, ii, GFC_STD_GNU,
1426 gfc_check_ftell, NULL, gfc_resolve_ftell,
1427 ut, BT_INTEGER, di, REQUIRED);
1429 make_generic ("ftell", GFC_ISYM_FTELL, GFC_STD_GNU);
1431 add_sym_2 ("fgetc", GFC_ISYM_FGETC, NO_CLASS, ACTUAL_NO, BT_INTEGER, di, GFC_STD_GNU,
1432 gfc_check_fgetputc, NULL, gfc_resolve_fgetc,
1433 ut, BT_INTEGER, di, REQUIRED, c, BT_CHARACTER, dc, REQUIRED);
1435 make_generic ("fgetc", GFC_ISYM_FGETC, GFC_STD_GNU);
1437 add_sym_1 ("fget", GFC_ISYM_FGET, NO_CLASS, ACTUAL_NO, BT_INTEGER, di, GFC_STD_GNU,
1438 gfc_check_fgetput, NULL, gfc_resolve_fget,
1439 c, BT_CHARACTER, dc, REQUIRED);
1441 make_generic ("fget", GFC_ISYM_FGET, GFC_STD_GNU);
1443 add_sym_2 ("fputc", GFC_ISYM_FPUTC, NO_CLASS, ACTUAL_NO, BT_INTEGER, di, GFC_STD_GNU,
1444 gfc_check_fgetputc, NULL, gfc_resolve_fputc,
1445 ut, BT_INTEGER, di, REQUIRED, c, BT_CHARACTER, dc, REQUIRED);
1447 make_generic ("fputc", GFC_ISYM_FPUTC, GFC_STD_GNU);
1449 add_sym_1 ("fput", GFC_ISYM_FPUT, NO_CLASS, ACTUAL_NO, BT_INTEGER, di, GFC_STD_GNU,
1450 gfc_check_fgetput, NULL, gfc_resolve_fput,
1451 c, BT_CHARACTER, dc, REQUIRED);
1453 make_generic ("fput", GFC_ISYM_FPUT, GFC_STD_GNU);
1455 /* Unix IDs (g77 compatibility) */
1456 add_sym_1 ("getcwd", GFC_ISYM_GETCWD, NO_CLASS, ACTUAL_NO, BT_INTEGER, di, GFC_STD_GNU,
1457 NULL, NULL, gfc_resolve_getcwd,
1458 c, BT_CHARACTER, dc, REQUIRED);
1460 make_generic ("getcwd", GFC_ISYM_GETCWD, GFC_STD_GNU);
1462 add_sym_0 ("getgid", GFC_ISYM_GETGID, NO_CLASS, ACTUAL_NO, BT_INTEGER, di, GFC_STD_GNU,
1463 NULL, NULL, gfc_resolve_getgid);
1465 make_generic ("getgid", GFC_ISYM_GETGID, GFC_STD_GNU);
1467 add_sym_0 ("getpid", GFC_ISYM_GETPID, NO_CLASS, ACTUAL_NO, BT_INTEGER, di, GFC_STD_GNU,
1468 NULL, NULL, gfc_resolve_getpid);
1470 make_generic ("getpid", GFC_ISYM_GETPID, GFC_STD_GNU);
1472 add_sym_0 ("getuid", GFC_ISYM_GETUID, NO_CLASS, ACTUAL_NO, BT_INTEGER, di, GFC_STD_GNU,
1473 NULL, NULL, gfc_resolve_getuid);
1475 make_generic ("getuid", GFC_ISYM_GETUID, GFC_STD_GNU);
1477 add_sym_1 ("hostnm", GFC_ISYM_HOSTNM, NO_CLASS, ACTUAL_NO, BT_INTEGER, di, GFC_STD_GNU,
1478 gfc_check_hostnm, NULL, gfc_resolve_hostnm,
1479 a, BT_CHARACTER, dc, REQUIRED);
1481 make_generic ("hostnm", GFC_ISYM_HOSTNM, GFC_STD_GNU);
1483 add_sym_1 ("huge", GFC_ISYM_HUGE, CLASS_INQUIRY, ACTUAL_NO, BT_REAL, dr, GFC_STD_F95,
1484 gfc_check_huge, gfc_simplify_huge, NULL,
1485 x, BT_UNKNOWN, dr, REQUIRED);
1487 make_generic ("huge", GFC_ISYM_HUGE, GFC_STD_F95);
1489 add_sym_2 ("iachar", GFC_ISYM_IACHAR, CLASS_ELEMENTAL, ACTUAL_NO,
1490 BT_INTEGER, di, GFC_STD_F95,
1491 gfc_check_ichar_iachar, gfc_simplify_iachar, gfc_resolve_iachar,
1492 c, BT_CHARACTER, dc, REQUIRED, kind, BT_INTEGER, di, OPTIONAL);
1494 make_generic ("iachar", GFC_ISYM_IACHAR, GFC_STD_F95);
1496 add_sym_2 ("iand", GFC_ISYM_IAND, CLASS_ELEMENTAL, ACTUAL_NO, BT_INTEGER, di, GFC_STD_F95,
1497 gfc_check_iand, gfc_simplify_iand, gfc_resolve_iand,
1498 i, BT_INTEGER, di, REQUIRED, j, BT_INTEGER, di, REQUIRED);
1500 make_generic ("iand", GFC_ISYM_IAND, GFC_STD_F95);
1502 add_sym_2 ("and", GFC_ISYM_AND, NO_CLASS, ACTUAL_NO, BT_LOGICAL, dl, GFC_STD_GNU,
1503 gfc_check_and, gfc_simplify_and, gfc_resolve_and,
1504 i, BT_UNKNOWN, 0, REQUIRED, j, BT_UNKNOWN, 0, REQUIRED);
1506 make_generic ("and", GFC_ISYM_AND, GFC_STD_GNU);
1508 add_sym_0 ("iargc", GFC_ISYM_IARGC, NO_CLASS, ACTUAL_NO, BT_INTEGER, di, GFC_STD_GNU,
1511 make_generic ("iargc", GFC_ISYM_IARGC, GFC_STD_GNU);
1513 add_sym_2 ("ibclr", GFC_ISYM_IBCLR, CLASS_ELEMENTAL, ACTUAL_NO, BT_INTEGER, di, GFC_STD_F95,
1514 gfc_check_ibclr, gfc_simplify_ibclr, gfc_resolve_ibclr,
1515 i, BT_INTEGER, di, REQUIRED, pos, BT_INTEGER, di, REQUIRED);
1517 make_generic ("ibclr", GFC_ISYM_IBCLR, GFC_STD_F95);
1519 add_sym_3 ("ibits", GFC_ISYM_IBITS, CLASS_ELEMENTAL, ACTUAL_NO, BT_INTEGER, di, GFC_STD_F95,
1520 gfc_check_ibits, gfc_simplify_ibits, gfc_resolve_ibits,
1521 i, BT_INTEGER, di, REQUIRED, pos, BT_INTEGER, di, REQUIRED,
1522 ln, BT_INTEGER, di, REQUIRED);
1524 make_generic ("ibits", GFC_ISYM_IBITS, GFC_STD_F95);
1526 add_sym_2 ("ibset", GFC_ISYM_IBSET, CLASS_ELEMENTAL, ACTUAL_NO, BT_INTEGER, di, GFC_STD_F95,
1527 gfc_check_ibset, gfc_simplify_ibset, gfc_resolve_ibset,
1528 i, BT_INTEGER, di, REQUIRED, pos, BT_INTEGER, di, REQUIRED);
1530 make_generic ("ibset", GFC_ISYM_IBSET, GFC_STD_F95);
1532 add_sym_2 ("ichar", GFC_ISYM_ICHAR, CLASS_ELEMENTAL, ACTUAL_NO,
1533 BT_INTEGER, di, GFC_STD_F77,
1534 gfc_check_ichar_iachar, gfc_simplify_ichar, gfc_resolve_ichar,
1535 c, BT_CHARACTER, dc, REQUIRED, kind, BT_INTEGER, di, OPTIONAL);
1537 make_generic ("ichar", GFC_ISYM_ICHAR, GFC_STD_F77);
1539 add_sym_2 ("ieor", GFC_ISYM_IEOR, CLASS_ELEMENTAL, ACTUAL_NO, BT_INTEGER, di, GFC_STD_F95,
1540 gfc_check_ieor, gfc_simplify_ieor, gfc_resolve_ieor,
1541 i, BT_INTEGER, di, REQUIRED, j, BT_INTEGER, di, REQUIRED);
1543 make_generic ("ieor", GFC_ISYM_IEOR, GFC_STD_F95);
1545 add_sym_2 ("xor", GFC_ISYM_XOR, NO_CLASS, ACTUAL_NO, BT_LOGICAL, dl, GFC_STD_GNU,
1546 gfc_check_and, gfc_simplify_xor, gfc_resolve_xor,
1547 i, BT_UNKNOWN, 0, REQUIRED, j, BT_UNKNOWN, 0, REQUIRED);
1549 make_generic ("xor", GFC_ISYM_XOR, GFC_STD_GNU);
1551 add_sym_0 ("ierrno", GFC_ISYM_IERRNO, NO_CLASS, ACTUAL_NO, BT_INTEGER, di, GFC_STD_GNU,
1552 NULL, NULL, gfc_resolve_ierrno);
1554 make_generic ("ierrno", GFC_ISYM_IERRNO, GFC_STD_GNU);
1556 /* The resolution function for INDEX is called gfc_resolve_index_func
1557 because the name gfc_resolve_index is already used in resolve.c. */
1558 add_sym_4 ("index", GFC_ISYM_INDEX, CLASS_ELEMENTAL, ACTUAL_YES,
1559 BT_INTEGER, di, GFC_STD_F77,
1560 gfc_check_index, gfc_simplify_index, gfc_resolve_index_func,
1561 stg, BT_CHARACTER, dc, REQUIRED, ssg, BT_CHARACTER, dc, REQUIRED,
1562 bck, BT_LOGICAL, dl, OPTIONAL, kind, BT_INTEGER, di, OPTIONAL);
1564 make_generic ("index", GFC_ISYM_INDEX, GFC_STD_F77);
1566 add_sym_2 ("int", GFC_ISYM_INT, CLASS_ELEMENTAL, ACTUAL_NO, BT_INTEGER, di, GFC_STD_F77,
1567 gfc_check_int, gfc_simplify_int, gfc_resolve_int,
1568 a, BT_REAL, dr, REQUIRED, kind, BT_INTEGER, di, OPTIONAL);
1570 add_sym_1 ("ifix", GFC_ISYM_INT, CLASS_ELEMENTAL, ACTUAL_NO, BT_INTEGER, di, GFC_STD_F77,
1571 NULL, gfc_simplify_ifix, NULL,
1572 a, BT_REAL, dr, REQUIRED);
1574 add_sym_1 ("idint", GFC_ISYM_INT, CLASS_ELEMENTAL, ACTUAL_NO, BT_INTEGER, di, GFC_STD_F77,
1575 NULL, gfc_simplify_idint, NULL,
1576 a, BT_REAL, dd, REQUIRED);
1578 make_generic ("int", GFC_ISYM_INT, GFC_STD_F77);
1580 add_sym_1 ("int2", GFC_ISYM_INT2, CLASS_ELEMENTAL, ACTUAL_NO, BT_INTEGER, di, GFC_STD_GNU,
1581 gfc_check_intconv, gfc_simplify_int2, gfc_resolve_int2,
1582 a, BT_REAL, dr, REQUIRED);
1584 make_alias ("short", GFC_STD_GNU);
1586 make_generic ("int2", GFC_ISYM_INT2, GFC_STD_GNU);
1588 add_sym_1 ("int8", GFC_ISYM_INT8, CLASS_ELEMENTAL, ACTUAL_NO, BT_INTEGER, di, GFC_STD_GNU,
1589 gfc_check_intconv, gfc_simplify_int8, gfc_resolve_int8,
1590 a, BT_REAL, dr, REQUIRED);
1592 make_generic ("int8", GFC_ISYM_INT8, GFC_STD_GNU);
1594 add_sym_1 ("long", GFC_ISYM_LONG, CLASS_ELEMENTAL, ACTUAL_NO, BT_INTEGER, di, GFC_STD_GNU,
1595 gfc_check_intconv, gfc_simplify_long, gfc_resolve_long,
1596 a, BT_REAL, dr, REQUIRED);
1598 make_generic ("long", GFC_ISYM_LONG, GFC_STD_GNU);
1600 add_sym_2 ("ior", GFC_ISYM_IOR, CLASS_ELEMENTAL, ACTUAL_NO, BT_INTEGER, di, GFC_STD_F95,
1601 gfc_check_ior, gfc_simplify_ior, gfc_resolve_ior,
1602 i, BT_INTEGER, di, REQUIRED, j, BT_INTEGER, di, REQUIRED);
1604 make_generic ("ior", GFC_ISYM_IOR, GFC_STD_F95);
1606 add_sym_2 ("or", GFC_ISYM_OR, NO_CLASS, ACTUAL_NO, BT_LOGICAL, dl, GFC_STD_GNU,
1607 gfc_check_and, gfc_simplify_or, gfc_resolve_or,
1608 i, BT_UNKNOWN, 0, REQUIRED, j, BT_UNKNOWN, 0, REQUIRED);
1610 make_generic ("or", GFC_ISYM_OR, GFC_STD_GNU);
1612 /* The following function is for G77 compatibility. */
1613 add_sym_1 ("irand", GFC_ISYM_IRAND, NO_CLASS, ACTUAL_NO, BT_INTEGER, 4, GFC_STD_GNU,
1614 gfc_check_irand, NULL, NULL,
1615 i, BT_INTEGER, 4, OPTIONAL);
1617 make_generic ("irand", GFC_ISYM_IRAND, GFC_STD_GNU);
1619 add_sym_1 ("isatty", GFC_ISYM_ISATTY, NO_CLASS, ACTUAL_NO, BT_LOGICAL, dl, GFC_STD_GNU,
1620 gfc_check_isatty, NULL, gfc_resolve_isatty,
1621 ut, BT_INTEGER, di, REQUIRED);
1623 make_generic ("isatty", GFC_ISYM_ISATTY, GFC_STD_GNU);
1625 add_sym_1 ("isnan", GFC_ISYM_ISNAN, CLASS_ELEMENTAL, ACTUAL_NO, BT_LOGICAL,
1626 dl, GFC_STD_GNU, gfc_check_isnan, NULL, NULL,
1627 x, BT_REAL, 0, REQUIRED);
1629 make_generic ("isnan", GFC_ISYM_ISNAN, GFC_STD_GNU);
1631 add_sym_2 ("rshift", GFC_ISYM_RSHIFT, CLASS_ELEMENTAL, ACTUAL_NO, BT_INTEGER, di, GFC_STD_GNU,
1632 gfc_check_ishft, NULL, gfc_resolve_rshift,
1633 i, BT_INTEGER, di, REQUIRED, sh, BT_INTEGER, di, REQUIRED);
1635 make_generic ("rshift", GFC_ISYM_RSHIFT, GFC_STD_GNU);
1637 add_sym_2 ("lshift", GFC_ISYM_LSHIFT, CLASS_ELEMENTAL, ACTUAL_NO, BT_INTEGER, di, GFC_STD_GNU,
1638 gfc_check_ishft, NULL, gfc_resolve_lshift,
1639 i, BT_INTEGER, di, REQUIRED, sh, BT_INTEGER, di, REQUIRED);
1641 make_generic ("lshift", GFC_ISYM_LSHIFT, GFC_STD_GNU);
1643 add_sym_2 ("ishft", GFC_ISYM_ISHFT, CLASS_ELEMENTAL, ACTUAL_NO, BT_INTEGER, di, GFC_STD_F95,
1644 gfc_check_ishft, gfc_simplify_ishft, gfc_resolve_ishft,
1645 i, BT_INTEGER, di, REQUIRED, sh, BT_INTEGER, di, REQUIRED);
1647 make_generic ("ishft", GFC_ISYM_ISHFT, GFC_STD_F95);
1649 add_sym_3 ("ishftc", GFC_ISYM_ISHFTC, CLASS_ELEMENTAL, ACTUAL_NO, BT_INTEGER, di, GFC_STD_F95,
1650 gfc_check_ishftc, gfc_simplify_ishftc, gfc_resolve_ishftc,
1651 i, BT_INTEGER, di, REQUIRED, sh, BT_INTEGER, di, REQUIRED,
1652 sz, BT_INTEGER, di, OPTIONAL);
1654 make_generic ("ishftc", GFC_ISYM_ISHFTC, GFC_STD_F95);
1656 add_sym_2 ("kill", GFC_ISYM_KILL, NO_CLASS, ACTUAL_NO, BT_INTEGER, di, GFC_STD_GNU,
1657 gfc_check_kill, NULL, gfc_resolve_kill,
1658 a, BT_INTEGER, di, REQUIRED, b, BT_INTEGER, di, REQUIRED);
1660 make_generic ("kill", GFC_ISYM_KILL, GFC_STD_GNU);
1662 add_sym_1 ("kind", GFC_ISYM_KIND, CLASS_INQUIRY, ACTUAL_NO, BT_INTEGER, di, GFC_STD_F95,
1663 gfc_check_kind, gfc_simplify_kind, NULL,
1664 x, BT_REAL, dr, REQUIRED);
1666 make_generic ("kind", GFC_ISYM_KIND, GFC_STD_F95);
1668 add_sym_3 ("lbound", GFC_ISYM_LBOUND, CLASS_INQUIRY, ACTUAL_NO,
1669 BT_INTEGER, di, GFC_STD_F95,
1670 gfc_check_lbound, gfc_simplify_lbound, gfc_resolve_lbound,
1671 ar, BT_REAL, dr, REQUIRED, dm, BT_INTEGER, di, OPTIONAL,
1672 kind, BT_INTEGER, di, OPTIONAL);
1674 make_generic ("lbound", GFC_ISYM_LBOUND, GFC_STD_F95);
1676 add_sym_2 ("len", GFC_ISYM_LEN, CLASS_INQUIRY, ACTUAL_YES,
1677 BT_INTEGER, di, GFC_STD_F77,
1678 gfc_check_len_lentrim, gfc_simplify_len, gfc_resolve_len,
1679 stg, BT_CHARACTER, dc, REQUIRED, kind, BT_INTEGER, di, OPTIONAL);
1681 make_generic ("len", GFC_ISYM_LEN, GFC_STD_F77);
1683 add_sym_2 ("len_trim", GFC_ISYM_LEN_TRIM, CLASS_ELEMENTAL, ACTUAL_NO,
1684 BT_INTEGER, di, GFC_STD_F95,
1685 gfc_check_len_lentrim, gfc_simplify_len_trim, gfc_resolve_len_trim,
1686 stg, BT_CHARACTER, dc, REQUIRED, kind, BT_INTEGER, di, OPTIONAL);
1688 make_alias ("lnblnk", GFC_STD_GNU);
1690 make_generic ("len_trim", GFC_ISYM_LEN_TRIM, GFC_STD_F95);
1692 add_sym_2 ("lge", GFC_ISYM_LGE, CLASS_ELEMENTAL, ACTUAL_NO, BT_LOGICAL, dl, GFC_STD_F77,
1693 NULL, gfc_simplify_lge, NULL,
1694 sta, BT_CHARACTER, dc, REQUIRED, stb, BT_CHARACTER, dc, REQUIRED);
1696 make_generic ("lge", GFC_ISYM_LGE, GFC_STD_F77);
1698 add_sym_2 ("lgt", GFC_ISYM_LGT, CLASS_ELEMENTAL, ACTUAL_NO, BT_LOGICAL, dl, GFC_STD_F77,
1699 NULL, gfc_simplify_lgt, NULL,
1700 sta, BT_CHARACTER, dc, REQUIRED, stb, BT_CHARACTER, dc, REQUIRED);
1702 make_generic ("lgt", GFC_ISYM_LGT, GFC_STD_F77);
1704 add_sym_2 ("lle",GFC_ISYM_LLE, CLASS_ELEMENTAL, ACTUAL_NO, BT_LOGICAL, dl, GFC_STD_F77,
1705 NULL, gfc_simplify_lle, NULL,
1706 sta, BT_CHARACTER, dc, REQUIRED, stb, BT_CHARACTER, dc, REQUIRED);
1708 make_generic ("lle", GFC_ISYM_LLE, GFC_STD_F77);
1710 add_sym_2 ("llt", GFC_ISYM_LLT, CLASS_ELEMENTAL, ACTUAL_NO, BT_LOGICAL, dl, GFC_STD_F77,
1711 NULL, gfc_simplify_llt, NULL,
1712 sta, BT_CHARACTER, dc, REQUIRED, stb, BT_CHARACTER, dc, REQUIRED);
1714 make_generic ("llt", GFC_ISYM_LLT, GFC_STD_F77);
1716 add_sym_2 ("link", GFC_ISYM_LINK, NO_CLASS, ACTUAL_NO, BT_INTEGER, di, GFC_STD_GNU,
1717 gfc_check_link, NULL, gfc_resolve_link,
1718 a, BT_CHARACTER, dc, REQUIRED, b, BT_CHARACTER, dc, REQUIRED);
1720 make_generic ("link", GFC_ISYM_LINK, GFC_STD_GNU);
1722 add_sym_1 ("log", GFC_ISYM_LOG, CLASS_ELEMENTAL, ACTUAL_NO, BT_REAL, dr, GFC_STD_F77,
1723 gfc_check_fn_rc, gfc_simplify_log, gfc_resolve_log,
1724 x, BT_REAL, dr, REQUIRED);
1726 add_sym_1 ("alog", GFC_ISYM_LOG, CLASS_ELEMENTAL, ACTUAL_YES, BT_REAL, dr, GFC_STD_F77,
1727 NULL, gfc_simplify_log, gfc_resolve_log,
1728 x, BT_REAL, dr, REQUIRED);
1730 add_sym_1 ("dlog", GFC_ISYM_LOG, CLASS_ELEMENTAL, ACTUAL_YES, BT_REAL, dd, GFC_STD_F77,
1731 NULL, gfc_simplify_log, gfc_resolve_log,
1732 x, BT_REAL, dd, REQUIRED);
1734 add_sym_1 ("clog", GFC_ISYM_LOG, CLASS_ELEMENTAL, ACTUAL_YES, BT_COMPLEX, dz, GFC_STD_F77,
1735 NULL, gfc_simplify_log, gfc_resolve_log,
1736 x, BT_COMPLEX, dz, REQUIRED);
1738 add_sym_1 ("zlog", GFC_ISYM_LOG, CLASS_ELEMENTAL, ACTUAL_YES, BT_COMPLEX, dd, GFC_STD_GNU,
1739 NULL, gfc_simplify_log, gfc_resolve_log,
1740 x, BT_COMPLEX, dd, REQUIRED);
1742 make_alias ("cdlog", GFC_STD_GNU);
1744 make_generic ("log", GFC_ISYM_LOG, GFC_STD_F77);
1746 add_sym_1 ("log10", GFC_ISYM_LOG10, CLASS_ELEMENTAL, ACTUAL_NO, BT_REAL, dr, GFC_STD_F77,
1747 gfc_check_fn_r, gfc_simplify_log10, gfc_resolve_log10,
1748 x, BT_REAL, dr, REQUIRED);
1750 add_sym_1 ("alog10", GFC_ISYM_LOG10, CLASS_ELEMENTAL, ACTUAL_YES, BT_REAL, dr, GFC_STD_F77,
1751 NULL, gfc_simplify_log10, gfc_resolve_log10,
1752 x, BT_REAL, dr, REQUIRED);
1754 add_sym_1 ("dlog10", GFC_ISYM_LOG10, CLASS_ELEMENTAL, ACTUAL_YES, BT_REAL, dd, GFC_STD_F77,
1755 NULL, gfc_simplify_log10, gfc_resolve_log10,
1756 x, BT_REAL, dd, REQUIRED);
1758 make_generic ("log10", GFC_ISYM_LOG10, GFC_STD_F77);
1760 add_sym_2 ("logical", GFC_ISYM_LOGICAL, CLASS_ELEMENTAL, ACTUAL_NO, BT_LOGICAL, dl, GFC_STD_F95,
1761 gfc_check_logical, gfc_simplify_logical, gfc_resolve_logical,
1762 l, BT_LOGICAL, dl, REQUIRED, kind, BT_INTEGER, di, OPTIONAL);
1764 make_generic ("logical", GFC_ISYM_LOGICAL, GFC_STD_F95);
1766 add_sym_2 ("lstat", GFC_ISYM_LSTAT, NO_CLASS, ACTUAL_NO, BT_INTEGER, di, GFC_STD_GNU,
1767 gfc_check_stat, NULL, gfc_resolve_lstat,
1768 a, BT_CHARACTER, dc, REQUIRED, b, BT_INTEGER, di, REQUIRED);
1770 make_generic ("lstat", GFC_ISYM_LSTAT, GFC_STD_GNU);
1772 add_sym_1 ("malloc", GFC_ISYM_MALLOC, NO_CLASS, ACTUAL_NO, BT_INTEGER, ii, GFC_STD_GNU,
1773 gfc_check_malloc, NULL, gfc_resolve_malloc, a, BT_INTEGER, di,
1776 make_generic ("malloc", GFC_ISYM_MALLOC, GFC_STD_GNU);
1778 add_sym_2 ("matmul", GFC_ISYM_MATMUL, CLASS_TRANSFORMATIONAL, ACTUAL_NO, BT_REAL, dr, GFC_STD_F95,
1779 gfc_check_matmul, NULL, gfc_resolve_matmul,
1780 ma, BT_REAL, dr, REQUIRED, mb, BT_REAL, dr, REQUIRED);
1782 make_generic ("matmul", GFC_ISYM_MATMUL, GFC_STD_F95);
1784 /* Note: amax0 is equivalent to real(max), max1 is equivalent to
1785 int(max). The max function must take at least two arguments. */
1787 add_sym_1m ("max", GFC_ISYM_MAX, CLASS_ELEMENTAL, ACTUAL_NO, BT_UNKNOWN, 0, GFC_STD_F77,
1788 gfc_check_min_max, gfc_simplify_max, gfc_resolve_max,
1789 a1, BT_UNKNOWN, dr, REQUIRED, a2, BT_UNKNOWN, dr, REQUIRED);
1791 add_sym_1m ("max0", GFC_ISYM_MAX, CLASS_ELEMENTAL, ACTUAL_NO, BT_INTEGER, di, GFC_STD_F77,
1792 gfc_check_min_max_integer, gfc_simplify_max, NULL,
1793 a1, BT_INTEGER, di, REQUIRED, a2, BT_INTEGER, di, REQUIRED);
1795 add_sym_1m ("amax0", GFC_ISYM_MAX, CLASS_ELEMENTAL, ACTUAL_NO, BT_REAL, dr, GFC_STD_F77,
1796 gfc_check_min_max_integer, gfc_simplify_max, NULL,
1797 a1, BT_INTEGER, di, REQUIRED, a2, BT_INTEGER, di, REQUIRED);
1799 add_sym_1m ("amax1", GFC_ISYM_MAX, CLASS_ELEMENTAL, ACTUAL_NO, BT_REAL, dr, GFC_STD_F77,
1800 gfc_check_min_max_real, gfc_simplify_max, NULL,
1801 a1, BT_REAL, dr, REQUIRED, a2, BT_REAL, dr, REQUIRED);
1803 add_sym_1m ("max1", GFC_ISYM_MAX, CLASS_ELEMENTAL, ACTUAL_NO, BT_INTEGER, di, GFC_STD_F77,
1804 gfc_check_min_max_real, gfc_simplify_max, NULL,
1805 a1, BT_REAL, dr, REQUIRED, a2, BT_REAL, dr, REQUIRED);
1807 add_sym_1m ("dmax1", GFC_ISYM_MAX, CLASS_ELEMENTAL, ACTUAL_NO, BT_REAL, dd, GFC_STD_F77,
1808 gfc_check_min_max_double, gfc_simplify_max, NULL,
1809 a1, BT_REAL, dd, REQUIRED, a2, BT_REAL, dd, REQUIRED);
1811 make_generic ("max", GFC_ISYM_MAX, GFC_STD_F77);
1813 add_sym_1 ("maxexponent", GFC_ISYM_MAXEXPONENT, CLASS_INQUIRY, ACTUAL_NO, BT_INTEGER, di,
1814 GFC_STD_F95, gfc_check_x, gfc_simplify_maxexponent, NULL,
1815 x, BT_UNKNOWN, dr, REQUIRED);
1817 make_generic ("maxexponent", GFC_ISYM_MAXEXPONENT, GFC_STD_F95);
1819 add_sym_3ml ("maxloc", GFC_ISYM_MAXLOC, CLASS_TRANSFORMATIONAL, ACTUAL_NO, BT_INTEGER, di, GFC_STD_F95,
1820 gfc_check_minloc_maxloc, NULL, gfc_resolve_maxloc,
1821 ar, BT_REAL, dr, REQUIRED, dm, BT_INTEGER, ii, OPTIONAL,
1822 msk, BT_LOGICAL, dl, OPTIONAL);
1824 make_generic ("maxloc", GFC_ISYM_MAXLOC, GFC_STD_F95);
1826 add_sym_3red ("maxval", GFC_ISYM_MAXVAL, CLASS_TRANSFORMATIONAL, ACTUAL_NO, BT_REAL, dr, GFC_STD_F95,
1827 gfc_check_minval_maxval, NULL, gfc_resolve_maxval,
1828 ar, BT_REAL, dr, REQUIRED, dm, BT_INTEGER, ii, OPTIONAL,
1829 msk, BT_LOGICAL, dl, OPTIONAL);
1831 make_generic ("maxval", GFC_ISYM_MAXVAL, GFC_STD_F95);
1833 add_sym_0 ("mclock", GFC_ISYM_MCLOCK, NO_CLASS, ACTUAL_NO, BT_INTEGER, di, GFC_STD_GNU,
1834 NULL, NULL, gfc_resolve_mclock);
1836 make_generic ("mclock", GFC_ISYM_MCLOCK, GFC_STD_GNU);
1838 add_sym_0 ("mclock8", GFC_ISYM_MCLOCK8, NO_CLASS, ACTUAL_NO, BT_INTEGER, di, GFC_STD_GNU,
1839 NULL, NULL, gfc_resolve_mclock8);
1841 make_generic ("mclock8", GFC_ISYM_MCLOCK8, GFC_STD_GNU);
1843 add_sym_3 ("merge", GFC_ISYM_MERGE, CLASS_ELEMENTAL, ACTUAL_NO, BT_REAL, dr, GFC_STD_F95,
1844 gfc_check_merge, NULL, gfc_resolve_merge,
1845 ts, BT_REAL, dr, REQUIRED, fs, BT_REAL, dr, REQUIRED,
1846 msk, BT_LOGICAL, dl, REQUIRED);
1848 make_generic ("merge", GFC_ISYM_MERGE, GFC_STD_F95);
1850 /* Note: amin0 is equivalent to real(min), min1 is equivalent to
1853 add_sym_1m ("min", GFC_ISYM_MIN, CLASS_ELEMENTAL, ACTUAL_NO, BT_UNKNOWN, 0, GFC_STD_F77,
1854 gfc_check_min_max, gfc_simplify_min, gfc_resolve_min,
1855 a1, BT_REAL, dr, REQUIRED, a2, BT_REAL, dr, REQUIRED);
1857 add_sym_1m ("min0", GFC_ISYM_MIN, CLASS_ELEMENTAL, ACTUAL_NO, BT_INTEGER, di, GFC_STD_F77,
1858 gfc_check_min_max_integer, gfc_simplify_min, NULL,
1859 a1, BT_INTEGER, di, REQUIRED, a2, BT_INTEGER, di, REQUIRED);
1861 add_sym_1m ("amin0", GFC_ISYM_MIN, CLASS_ELEMENTAL, ACTUAL_NO, BT_REAL, dr, GFC_STD_F77,
1862 gfc_check_min_max_integer, gfc_simplify_min, NULL,
1863 a1, BT_INTEGER, di, REQUIRED, a2, BT_INTEGER, di, REQUIRED);
1865 add_sym_1m ("amin1", GFC_ISYM_MIN, CLASS_ELEMENTAL, ACTUAL_NO, BT_REAL, dr, GFC_STD_F77,
1866 gfc_check_min_max_real, gfc_simplify_min, NULL,
1867 a1, BT_REAL, dr, REQUIRED, a2, BT_REAL, dr, REQUIRED);
1869 add_sym_1m ("min1", GFC_ISYM_MIN, CLASS_ELEMENTAL, ACTUAL_NO, BT_INTEGER, di, GFC_STD_F77,
1870 gfc_check_min_max_real, gfc_simplify_min, NULL,
1871 a1, BT_REAL, dr, REQUIRED, a2, BT_REAL, dr, REQUIRED);
1873 add_sym_1m ("dmin1", GFC_ISYM_MIN, CLASS_ELEMENTAL, ACTUAL_NO, BT_REAL, dd, GFC_STD_F77,
1874 gfc_check_min_max_double, gfc_simplify_min, NULL,
1875 a1, BT_REAL, dd, REQUIRED, a2, BT_REAL, dd, REQUIRED);
1877 make_generic ("min", GFC_ISYM_MIN, GFC_STD_F77);
1879 add_sym_1 ("minexponent", GFC_ISYM_MINEXPONENT, CLASS_INQUIRY, ACTUAL_NO, BT_INTEGER, di,
1880 GFC_STD_F95, gfc_check_x, gfc_simplify_minexponent, NULL,
1881 x, BT_UNKNOWN, dr, REQUIRED);
1883 make_generic ("minexponent", GFC_ISYM_MINEXPONENT, GFC_STD_F95);
1885 add_sym_3ml ("minloc", GFC_ISYM_MINLOC, CLASS_TRANSFORMATIONAL, ACTUAL_NO, BT_INTEGER, di, GFC_STD_F95,
1886 gfc_check_minloc_maxloc, NULL, gfc_resolve_minloc,
1887 ar, BT_REAL, dr, REQUIRED, dm, BT_INTEGER, ii, OPTIONAL,
1888 msk, BT_LOGICAL, dl, OPTIONAL);
1890 make_generic ("minloc", GFC_ISYM_MINLOC, GFC_STD_F95);
1892 add_sym_3red ("minval", GFC_ISYM_MINVAL, CLASS_TRANSFORMATIONAL, ACTUAL_NO, BT_REAL, dr, GFC_STD_F95,
1893 gfc_check_minval_maxval, NULL, gfc_resolve_minval,
1894 ar, BT_REAL, dr, REQUIRED, dm, BT_INTEGER, ii, OPTIONAL,
1895 msk, BT_LOGICAL, dl, OPTIONAL);
1897 make_generic ("minval", GFC_ISYM_MINVAL, GFC_STD_F95);
1899 add_sym_2 ("mod", GFC_ISYM_MOD, CLASS_ELEMENTAL, ACTUAL_YES, BT_INTEGER, di, GFC_STD_F77,
1900 gfc_check_a_p, gfc_simplify_mod, gfc_resolve_mod,
1901 a, BT_INTEGER, di, REQUIRED, p, BT_INTEGER, di, REQUIRED);
1903 add_sym_2 ("amod", GFC_ISYM_MOD, CLASS_ELEMENTAL, ACTUAL_YES, BT_REAL, dr, GFC_STD_F77,
1904 NULL, gfc_simplify_mod, gfc_resolve_mod,
1905 a, BT_REAL, dr, REQUIRED, p, BT_REAL, dr, REQUIRED);
1907 add_sym_2 ("dmod", GFC_ISYM_MOD, CLASS_ELEMENTAL, ACTUAL_YES, BT_REAL, dd, GFC_STD_F77,
1908 NULL, gfc_simplify_mod, gfc_resolve_mod,
1909 a, BT_REAL, dd, REQUIRED, p, BT_REAL, dd, REQUIRED);
1911 make_generic ("mod", GFC_ISYM_MOD, GFC_STD_F77);
1913 add_sym_2 ("modulo", GFC_ISYM_MODULO, CLASS_ELEMENTAL, ACTUAL_NO, BT_REAL, di, GFC_STD_F95,
1914 gfc_check_a_p, gfc_simplify_modulo, gfc_resolve_modulo,
1915 a, BT_REAL, di, REQUIRED, p, BT_REAL, di, REQUIRED);
1917 make_generic ("modulo", GFC_ISYM_MODULO, GFC_STD_F95);
1919 add_sym_2 ("nearest", GFC_ISYM_NEAREST, CLASS_ELEMENTAL, ACTUAL_NO, BT_REAL, dr, GFC_STD_F95,
1920 gfc_check_nearest, gfc_simplify_nearest, gfc_resolve_nearest,
1921 x, BT_REAL, dr, REQUIRED, s, BT_REAL, dr, REQUIRED);
1923 make_generic ("nearest", GFC_ISYM_NEAREST, GFC_STD_F95);
1925 add_sym_1 ("new_line", GFC_ISYM_NEW_LINE, CLASS_INQUIRY, ACTUAL_NO, BT_CHARACTER, dc,
1926 GFC_STD_F2003, gfc_check_new_line, gfc_simplify_new_line, NULL,
1927 a, BT_CHARACTER, dc, REQUIRED);
1929 make_generic ("new_line", GFC_ISYM_NEW_LINE, GFC_STD_F2003);
1931 add_sym_2 ("nint", GFC_ISYM_NINT, CLASS_ELEMENTAL, ACTUAL_YES, BT_INTEGER, di, GFC_STD_F77,
1932 gfc_check_a_ikind, gfc_simplify_nint, gfc_resolve_nint,
1933 a, BT_REAL, dr, REQUIRED, kind, BT_INTEGER, di, OPTIONAL);
1935 add_sym_1 ("idnint", GFC_ISYM_NINT, CLASS_ELEMENTAL, ACTUAL_YES, BT_INTEGER, di, GFC_STD_F77,
1936 gfc_check_idnint, gfc_simplify_idnint, gfc_resolve_idnint,
1937 a, BT_REAL, dd, REQUIRED);
1939 make_generic ("nint", GFC_ISYM_NINT, GFC_STD_F77);
1941 add_sym_1 ("not", GFC_ISYM_NOT, CLASS_ELEMENTAL, ACTUAL_NO, BT_INTEGER, di, GFC_STD_F95,
1942 gfc_check_i, gfc_simplify_not, gfc_resolve_not,
1943 i, BT_INTEGER, di, REQUIRED);
1945 make_generic ("not", GFC_ISYM_NOT, GFC_STD_F95);
1947 add_sym_1 ("null", GFC_ISYM_NULL, CLASS_TRANSFORMATIONAL, ACTUAL_NO, BT_INTEGER, di, GFC_STD_F95,
1948 gfc_check_null, gfc_simplify_null, NULL,
1949 mo, BT_INTEGER, di, OPTIONAL);
1951 make_generic ("null", GFC_ISYM_NULL, GFC_STD_F95);
1953 add_sym_3 ("pack", GFC_ISYM_PACK, CLASS_TRANSFORMATIONAL, ACTUAL_NO, BT_REAL, dr, GFC_STD_F95,
1954 gfc_check_pack, NULL, gfc_resolve_pack,
1955 ar, BT_REAL, dr, REQUIRED, msk, BT_LOGICAL, dl, REQUIRED,
1956 v, BT_REAL, dr, OPTIONAL);
1958 make_generic ("pack", GFC_ISYM_PACK, GFC_STD_F95);
1960 add_sym_1 ("precision", GFC_ISYM_PRECISION, CLASS_INQUIRY, ACTUAL_NO, BT_INTEGER, di, GFC_STD_F95,
1961 gfc_check_precision, gfc_simplify_precision, NULL,
1962 x, BT_UNKNOWN, 0, REQUIRED);
1964 make_generic ("precision", GFC_ISYM_PRECISION, GFC_STD_F95);
1966 add_sym_1 ("present", GFC_ISYM_PRESENT, CLASS_INQUIRY, ACTUAL_NO, BT_LOGICAL, dl, GFC_STD_F95,
1967 gfc_check_present, NULL, NULL,
1968 a, BT_REAL, dr, REQUIRED);
1970 make_generic ("present", GFC_ISYM_PRESENT, GFC_STD_F95);
1972 add_sym_3red ("product", GFC_ISYM_PRODUCT, CLASS_TRANSFORMATIONAL, ACTUAL_NO, BT_REAL, dr, GFC_STD_F95,
1973 gfc_check_product_sum, NULL, gfc_resolve_product,
1974 ar, BT_REAL, dr, REQUIRED, dm, BT_INTEGER, ii, OPTIONAL,
1975 msk, BT_LOGICAL, dl, OPTIONAL);
1977 make_generic ("product", GFC_ISYM_PRODUCT, GFC_STD_F95);
1979 add_sym_1 ("radix", GFC_ISYM_RADIX, CLASS_INQUIRY, ACTUAL_NO, BT_INTEGER, di, GFC_STD_F95,
1980 gfc_check_radix, gfc_simplify_radix, NULL,
1981 x, BT_UNKNOWN, 0, REQUIRED);
1983 make_generic ("radix", GFC_ISYM_RADIX, GFC_STD_F95);
1985 /* The following function is for G77 compatibility. */
1986 add_sym_1 ("rand", GFC_ISYM_RAND, NO_CLASS, ACTUAL_NO, BT_REAL, 4, GFC_STD_GNU,
1987 gfc_check_rand, NULL, NULL,
1988 i, BT_INTEGER, 4, OPTIONAL);
1990 /* Compatibility with HP FORTRAN 77/iX Reference. Note, rand() and ran()
1991 use slightly different shoddy multiplicative congruential PRNG. */
1992 make_alias ("ran", GFC_STD_GNU);
1994 make_generic ("rand", GFC_ISYM_RAND, GFC_STD_GNU);
1996 add_sym_1 ("range", GFC_ISYM_RANGE, CLASS_INQUIRY, ACTUAL_NO, BT_INTEGER, di, GFC_STD_F95,
1997 gfc_check_range, gfc_simplify_range, NULL,
1998 x, BT_REAL, dr, REQUIRED);
2000 make_generic ("range", GFC_ISYM_RANGE, GFC_STD_F95);
2002 add_sym_2 ("real", GFC_ISYM_REAL, CLASS_ELEMENTAL, ACTUAL_NO, BT_REAL, dr, GFC_STD_F77,
2003 gfc_check_real, gfc_simplify_real, gfc_resolve_real,
2004 a, BT_UNKNOWN, dr, REQUIRED, kind, BT_INTEGER, di, OPTIONAL);
2006 /* This provides compatibility with g77. */
2007 add_sym_1 ("realpart", GFC_ISYM_REAL, CLASS_ELEMENTAL, ACTUAL_NO, BT_REAL, dr, GFC_STD_GNU,
2008 gfc_check_fn_c, gfc_simplify_realpart, gfc_resolve_realpart,
2009 a, BT_UNKNOWN, dr, REQUIRED);
2011 add_sym_1 ("float", GFC_ISYM_REAL, CLASS_ELEMENTAL, ACTUAL_NO, BT_REAL, dr, GFC_STD_F77,
2012 gfc_check_i, gfc_simplify_float, NULL,
2013 a, BT_INTEGER, di, REQUIRED);
2015 add_sym_1 ("sngl", GFC_ISYM_REAL, CLASS_ELEMENTAL, ACTUAL_NO, BT_REAL, dr, GFC_STD_F77,
2016 NULL, gfc_simplify_sngl, NULL,
2017 a, BT_REAL, dd, REQUIRED);
2019 make_generic ("real", GFC_ISYM_REAL, GFC_STD_F77);
2021 add_sym_2 ("rename", GFC_ISYM_RENAME, NO_CLASS, ACTUAL_NO, BT_INTEGER, di, GFC_STD_GNU,
2022 gfc_check_rename, NULL, gfc_resolve_rename,
2023 a, BT_CHARACTER, dc, REQUIRED, b, BT_CHARACTER, dc, REQUIRED);
2025 make_generic ("rename", GFC_ISYM_RENAME, GFC_STD_GNU);
2027 add_sym_2 ("repeat", GFC_ISYM_REPEAT, CLASS_TRANSFORMATIONAL, ACTUAL_NO, BT_CHARACTER, dc, GFC_STD_F95,
2028 gfc_check_repeat, gfc_simplify_repeat, gfc_resolve_repeat,
2029 stg, BT_CHARACTER, dc, REQUIRED, ncopies, BT_INTEGER, di, REQUIRED);
2031 make_generic ("repeat", GFC_ISYM_REPEAT, GFC_STD_F95);
2033 add_sym_4 ("reshape", GFC_ISYM_RESHAPE, CLASS_TRANSFORMATIONAL, ACTUAL_NO, BT_REAL, dr, GFC_STD_F95,
2034 gfc_check_reshape, gfc_simplify_reshape, gfc_resolve_reshape,
2035 src, BT_REAL, dr, REQUIRED, shp, BT_INTEGER, ii, REQUIRED,
2036 pad, BT_REAL, dr, OPTIONAL, ord, BT_INTEGER, ii, OPTIONAL);
2038 make_generic ("reshape", GFC_ISYM_RESHAPE, GFC_STD_F95);
2040 add_sym_1 ("rrspacing", GFC_ISYM_RRSPACING, CLASS_ELEMENTAL, ACTUAL_NO, BT_REAL, dr, GFC_STD_F95,
2041 gfc_check_x, gfc_simplify_rrspacing, gfc_resolve_rrspacing,
2042 x, BT_REAL, dr, REQUIRED);
2044 make_generic ("rrspacing", GFC_ISYM_RRSPACING, GFC_STD_F95);
2046 add_sym_2 ("scale", GFC_ISYM_SCALE, CLASS_ELEMENTAL, ACTUAL_NO, BT_REAL, dr, GFC_STD_F95,
2047 gfc_check_scale, gfc_simplify_scale, gfc_resolve_scale,
2048 x, BT_REAL, dr, REQUIRED, i, BT_INTEGER, di, REQUIRED);
2050 make_generic ("scale", GFC_ISYM_SCALE, GFC_STD_F95);
2052 add_sym_4 ("scan", GFC_ISYM_SCAN, CLASS_ELEMENTAL, ACTUAL_NO,
2053 BT_INTEGER, di, GFC_STD_F95,
2054 gfc_check_scan, gfc_simplify_scan, gfc_resolve_scan,
2055 stg, BT_CHARACTER, dc, REQUIRED, set, BT_CHARACTER, dc, REQUIRED,
2056 bck, BT_LOGICAL, dl, OPTIONAL, kind, BT_INTEGER, di, OPTIONAL);
2058 make_generic ("scan", GFC_ISYM_SCAN, GFC_STD_F95);
2060 /* Added for G77 compatibility garbage. */
2061 add_sym_0 ("second", GFC_ISYM_SECOND, NO_CLASS, ACTUAL_NO, BT_REAL, 4, GFC_STD_GNU,
2064 make_generic ("second", GFC_ISYM_SECOND, GFC_STD_GNU);
2066 /* Added for G77 compatibility. */
2067 add_sym_1 ("secnds", GFC_ISYM_SECNDS, NO_CLASS, ACTUAL_NO, BT_REAL, dr, GFC_STD_GNU,
2068 gfc_check_secnds, NULL, gfc_resolve_secnds,
2069 x, BT_REAL, dr, REQUIRED);
2071 make_generic ("secnds", GFC_ISYM_SECNDS, GFC_STD_GNU);
2073 add_sym_1 ("selected_int_kind", GFC_ISYM_SI_KIND, CLASS_TRANSFORMATIONAL, ACTUAL_NO, BT_INTEGER, di,
2074 GFC_STD_F95, gfc_check_selected_int_kind,
2075 gfc_simplify_selected_int_kind, NULL, r, BT_INTEGER, di, REQUIRED);
2077 make_generic ("selected_int_kind", GFC_ISYM_SI_KIND, GFC_STD_F95);
2079 add_sym_2 ("selected_real_kind", GFC_ISYM_SR_KIND, CLASS_TRANSFORMATIONAL, ACTUAL_NO, BT_INTEGER, di,
2080 GFC_STD_F95, gfc_check_selected_real_kind,
2081 gfc_simplify_selected_real_kind, NULL,
2082 p, BT_INTEGER, di, OPTIONAL, r, BT_INTEGER, di, OPTIONAL);
2084 make_generic ("selected_real_kind", GFC_ISYM_SR_KIND, GFC_STD_F95);
2086 add_sym_2 ("set_exponent", GFC_ISYM_SET_EXPONENT, CLASS_ELEMENTAL, ACTUAL_NO, BT_REAL, dr, GFC_STD_F95,
2087 gfc_check_set_exponent, gfc_simplify_set_exponent,
2088 gfc_resolve_set_exponent,
2089 x, BT_REAL, dr, REQUIRED, i, BT_INTEGER, di, REQUIRED);
2091 make_generic ("set_exponent", GFC_ISYM_SET_EXPONENT, GFC_STD_F95);
2093 add_sym_1 ("shape", GFC_ISYM_SHAPE, CLASS_INQUIRY, ACTUAL_NO, BT_INTEGER, di, GFC_STD_F95,
2094 gfc_check_shape, gfc_simplify_shape, gfc_resolve_shape,
2095 src, BT_REAL, dr, REQUIRED);
2097 make_generic ("shape", GFC_ISYM_SHAPE, GFC_STD_F95);
2099 add_sym_2 ("sign", GFC_ISYM_SIGN, CLASS_ELEMENTAL, ACTUAL_YES, BT_REAL, dr, GFC_STD_F77,
2100 gfc_check_sign, gfc_simplify_sign, gfc_resolve_sign,
2101 a, BT_REAL, dr, REQUIRED, b, BT_REAL, dr, REQUIRED);
2103 add_sym_2 ("isign", GFC_ISYM_SIGN, CLASS_ELEMENTAL, ACTUAL_YES, BT_INTEGER, di, GFC_STD_F77,
2104 NULL, gfc_simplify_sign, gfc_resolve_sign,
2105 a, BT_INTEGER, di, REQUIRED, b, BT_INTEGER, di, REQUIRED);
2107 add_sym_2 ("dsign", GFC_ISYM_SIGN, CLASS_ELEMENTAL, ACTUAL_YES, BT_REAL, dd, GFC_STD_F77,
2108 NULL, gfc_simplify_sign, gfc_resolve_sign,
2109 a, BT_REAL, dd, REQUIRED, b, BT_REAL, dd, REQUIRED);
2111 make_generic ("sign", GFC_ISYM_SIGN, GFC_STD_F77);
2113 add_sym_2 ("signal", GFC_ISYM_SIGNAL, NO_CLASS, ACTUAL_NO, BT_INTEGER, di, GFC_STD_GNU,
2114 gfc_check_signal, NULL, gfc_resolve_signal,
2115 num, BT_INTEGER, di, REQUIRED, han, BT_UNKNOWN, 0, REQUIRED);
2117 make_generic ("signal", GFC_ISYM_SIGNAL, GFC_STD_GNU);
2119 add_sym_1 ("sin", GFC_ISYM_SIN, CLASS_ELEMENTAL, ACTUAL_YES, BT_REAL, dr, GFC_STD_F77,
2120 gfc_check_fn_rc, gfc_simplify_sin, gfc_resolve_sin,
2121 x, BT_REAL, dr, REQUIRED);
2123 add_sym_1 ("dsin", GFC_ISYM_SIN, CLASS_ELEMENTAL, ACTUAL_YES, BT_REAL, dd, GFC_STD_F77,
2124 NULL, gfc_simplify_sin, gfc_resolve_sin,
2125 x, BT_REAL, dd, REQUIRED);
2127 add_sym_1 ("csin", GFC_ISYM_SIN, CLASS_ELEMENTAL, ACTUAL_YES, BT_COMPLEX, dz, GFC_STD_F77,
2128 NULL, gfc_simplify_sin, gfc_resolve_sin,
2129 x, BT_COMPLEX, dz, REQUIRED);
2131 add_sym_1 ("zsin", GFC_ISYM_SIN, CLASS_ELEMENTAL, ACTUAL_YES, BT_COMPLEX, dd, GFC_STD_GNU,
2132 NULL, gfc_simplify_sin, gfc_resolve_sin,
2133 x, BT_COMPLEX, dd, REQUIRED);
2135 make_alias ("cdsin", GFC_STD_GNU);
2137 make_generic ("sin", GFC_ISYM_SIN, GFC_STD_F77);
2139 add_sym_1 ("sinh", GFC_ISYM_SINH, CLASS_ELEMENTAL, ACTUAL_YES, BT_REAL, dr, GFC_STD_F77,
2140 gfc_check_fn_r, gfc_simplify_sinh, gfc_resolve_sinh,
2141 x, BT_REAL, dr, REQUIRED);
2143 add_sym_1 ("dsinh", GFC_ISYM_SINH,CLASS_ELEMENTAL, ACTUAL_YES, BT_REAL, dd, GFC_STD_F77,
2144 NULL, gfc_simplify_sinh, gfc_resolve_sinh,
2145 x, BT_REAL, dd, REQUIRED);
2147 make_generic ("sinh", GFC_ISYM_SINH, GFC_STD_F77);
2149 add_sym_3 ("size", GFC_ISYM_SIZE, CLASS_INQUIRY, ACTUAL_NO,
2150 BT_INTEGER, di, GFC_STD_F95,
2151 gfc_check_size, gfc_simplify_size, gfc_resolve_size,
2152 ar, BT_REAL, dr, REQUIRED, dm, BT_INTEGER, ii, OPTIONAL,
2153 kind, BT_INTEGER, di, OPTIONAL);
2155 make_generic ("size", GFC_ISYM_SIZE, GFC_STD_F95);
2157 add_sym_1 ("sizeof", GFC_ISYM_SIZEOF, NO_CLASS, ACTUAL_NO, BT_INTEGER, ii,
2158 GFC_STD_GNU, gfc_check_sizeof, NULL, NULL,
2159 i, BT_UNKNOWN, 0, REQUIRED);
2161 make_generic ("sizeof", GFC_ISYM_SIZEOF, GFC_STD_GNU);
2163 add_sym_1 ("spacing", GFC_ISYM_SPACING, CLASS_ELEMENTAL, ACTUAL_NO, BT_REAL, dr, GFC_STD_F95,
2164 gfc_check_x, gfc_simplify_spacing, gfc_resolve_spacing,
2165 x, BT_REAL, dr, REQUIRED);
2167 make_generic ("spacing", GFC_ISYM_SPACING, GFC_STD_F95);
2169 add_sym_3 ("spread", GFC_ISYM_SPREAD, CLASS_TRANSFORMATIONAL, ACTUAL_NO, BT_REAL, dr, GFC_STD_F95,
2170 gfc_check_spread, NULL, gfc_resolve_spread,
2171 src, BT_REAL, dr, REQUIRED, dm, BT_INTEGER, ii, REQUIRED,
2172 ncopies, BT_INTEGER, di, REQUIRED);
2174 make_generic ("spread", GFC_ISYM_SPREAD, GFC_STD_F95);
2176 add_sym_1 ("sqrt", GFC_ISYM_SQRT, CLASS_ELEMENTAL, ACTUAL_YES, BT_REAL, dr, GFC_STD_F77,
2177 gfc_check_fn_rc, gfc_simplify_sqrt, gfc_resolve_sqrt,
2178 x, BT_REAL, dr, REQUIRED);
2180 add_sym_1 ("dsqrt", GFC_ISYM_SQRT, CLASS_ELEMENTAL, ACTUAL_YES, BT_REAL, dd, GFC_STD_F77,
2181 NULL, gfc_simplify_sqrt, gfc_resolve_sqrt,
2182 x, BT_REAL, dd, REQUIRED);
2184 add_sym_1 ("csqrt", GFC_ISYM_SQRT, CLASS_ELEMENTAL, ACTUAL_YES, BT_COMPLEX, dz, GFC_STD_F77,
2185 NULL, gfc_simplify_sqrt, gfc_resolve_sqrt,
2186 x, BT_COMPLEX, dz, REQUIRED);
2188 add_sym_1 ("zsqrt", GFC_ISYM_SQRT, CLASS_ELEMENTAL, ACTUAL_YES, BT_COMPLEX, dd, GFC_STD_GNU,
2189 NULL, gfc_simplify_sqrt, gfc_resolve_sqrt,
2190 x, BT_COMPLEX, dd, REQUIRED);
2192 make_alias ("cdsqrt", GFC_STD_GNU);
2194 make_generic ("sqrt", GFC_ISYM_SQRT, GFC_STD_F77);
2196 add_sym_2 ("stat", GFC_ISYM_STAT, NO_CLASS, ACTUAL_NO, BT_INTEGER, di, GFC_STD_GNU,
2197 gfc_check_stat, NULL, gfc_resolve_stat,
2198 a, BT_CHARACTER, dc, REQUIRED, b, BT_INTEGER, di, REQUIRED);
2200 make_generic ("stat", GFC_ISYM_STAT, GFC_STD_GNU);
2202 add_sym_3red ("sum", GFC_ISYM_SUM, CLASS_TRANSFORMATIONAL, ACTUAL_NO, BT_REAL, dr, GFC_STD_F95,
2203 gfc_check_product_sum, NULL, gfc_resolve_sum,
2204 ar, BT_REAL, dr, REQUIRED, dm, BT_INTEGER, ii, OPTIONAL,
2205 msk, BT_LOGICAL, dl, OPTIONAL);
2207 make_generic ("sum", GFC_ISYM_SUM, GFC_STD_F95);
2209 add_sym_2 ("symlnk", GFC_ISYM_SYMLNK, NO_CLASS, ACTUAL_NO, BT_INTEGER, di, GFC_STD_GNU,
2210 gfc_check_symlnk, NULL, gfc_resolve_symlnk,
2211 a, BT_CHARACTER, dc, REQUIRED, b, BT_CHARACTER, dc, REQUIRED);
2213 make_generic ("symlnk", GFC_ISYM_SYMLNK, GFC_STD_GNU);
2215 add_sym_1 ("system", GFC_ISYM_SYSTEM, NO_CLASS, ACTUAL_NO, BT_INTEGER, di, GFC_STD_GNU,
2217 c, BT_CHARACTER, dc, REQUIRED);
2219 make_generic ("system", GFC_ISYM_SYSTEM, GFC_STD_GNU);
2221 add_sym_1 ("tan", GFC_ISYM_TAN, CLASS_ELEMENTAL, ACTUAL_YES, BT_REAL, dr, GFC_STD_F77,
2222 gfc_check_fn_r, gfc_simplify_tan, gfc_resolve_tan,
2223 x, BT_REAL, dr, REQUIRED);
2225 add_sym_1 ("dtan", GFC_ISYM_TAN, CLASS_ELEMENTAL, ACTUAL_YES, BT_REAL, dd, GFC_STD_F77,
2226 NULL, gfc_simplify_tan, gfc_resolve_tan,
2227 x, BT_REAL, dd, REQUIRED);
2229 make_generic ("tan", GFC_ISYM_TAN, GFC_STD_F77);
2231 add_sym_1 ("tanh", GFC_ISYM_TANH, CLASS_ELEMENTAL, ACTUAL_YES, BT_REAL, dr, GFC_STD_F77,
2232 gfc_check_fn_r, gfc_simplify_tanh, gfc_resolve_tanh,
2233 x, BT_REAL, dr, REQUIRED);
2235 add_sym_1 ("dtanh", GFC_ISYM_TANH, CLASS_ELEMENTAL, ACTUAL_YES, BT_REAL, dd, GFC_STD_F77,
2236 NULL, gfc_simplify_tanh, gfc_resolve_tanh,
2237 x, BT_REAL, dd, REQUIRED);
2239 make_generic ("tanh", GFC_ISYM_TANH, GFC_STD_F77);
2241 add_sym_0 ("time", GFC_ISYM_TIME, NO_CLASS, ACTUAL_NO, BT_INTEGER, di, GFC_STD_GNU,
2242 NULL, NULL, gfc_resolve_time);
2244 make_generic ("time", GFC_ISYM_TIME, GFC_STD_GNU);
2246 add_sym_0 ("time8", GFC_ISYM_TIME8, NO_CLASS, ACTUAL_NO, BT_INTEGER, di, GFC_STD_GNU,
2247 NULL, NULL, gfc_resolve_time8);
2249 make_generic ("time8", GFC_ISYM_TIME8, GFC_STD_GNU);
2251 add_sym_1 ("tiny", GFC_ISYM_TINY, CLASS_INQUIRY, ACTUAL_NO, BT_REAL, dr, GFC_STD_F95,
2252 gfc_check_x, gfc_simplify_tiny, NULL,
2253 x, BT_REAL, dr, REQUIRED);
2255 make_generic ("tiny", GFC_ISYM_TINY, GFC_STD_F95);
2257 add_sym_3 ("transfer", GFC_ISYM_TRANSFER, CLASS_TRANSFORMATIONAL, ACTUAL_NO, BT_REAL, dr, GFC_STD_F95,
2258 gfc_check_transfer, gfc_simplify_transfer, gfc_resolve_transfer,
2259 src, BT_REAL, dr, REQUIRED, mo, BT_REAL, dr, REQUIRED,
2260 sz, BT_INTEGER, di, OPTIONAL);
2262 make_generic ("transfer", GFC_ISYM_TRANSFER, GFC_STD_F95);
2264 add_sym_1 ("transpose", GFC_ISYM_TRANSPOSE, CLASS_TRANSFORMATIONAL, ACTUAL_NO, BT_REAL, dr, GFC_STD_F95,
2265 gfc_check_transpose, NULL, gfc_resolve_transpose,
2266 m, BT_REAL, dr, REQUIRED);
2268 make_generic ("transpose", GFC_ISYM_TRANSPOSE, GFC_STD_F95);
2270 add_sym_1 ("trim", GFC_ISYM_TRIM, CLASS_TRANSFORMATIONAL, ACTUAL_NO, BT_CHARACTER, dc, GFC_STD_F95,
2271 gfc_check_trim, gfc_simplify_trim, gfc_resolve_trim,
2272 stg, BT_CHARACTER, dc, REQUIRED);
2274 make_generic ("trim", GFC_ISYM_TRIM, GFC_STD_F95);
2276 add_sym_1 ("ttynam", GFC_ISYM_TTYNAM, NO_CLASS, ACTUAL_NO, BT_CHARACTER, 0, GFC_STD_GNU,
2277 gfc_check_ttynam, NULL, gfc_resolve_ttynam,
2278 ut, BT_INTEGER, di, REQUIRED);
2280 make_generic ("ttynam", GFC_ISYM_TTYNAM, GFC_STD_GNU);
2282 add_sym_3 ("ubound", GFC_ISYM_UBOUND, CLASS_INQUIRY, ACTUAL_NO,
2283 BT_INTEGER, di, GFC_STD_F95,
2284 gfc_check_ubound, gfc_simplify_ubound, gfc_resolve_ubound,
2285 ar, BT_REAL, dr, REQUIRED, dm, BT_INTEGER, ii, OPTIONAL,
2286 kind, BT_INTEGER, di, OPTIONAL);
2288 make_generic ("ubound", GFC_ISYM_UBOUND, GFC_STD_F95);
2290 /* g77 compatibility for UMASK. */
2291 add_sym_1 ("umask", GFC_ISYM_UMASK, NO_CLASS, ACTUAL_NO, BT_INTEGER, di, GFC_STD_GNU,
2292 gfc_check_umask, NULL, gfc_resolve_umask,
2293 a, BT_INTEGER, di, REQUIRED);
2295 make_generic ("umask", GFC_ISYM_UMASK, GFC_STD_GNU);
2297 /* g77 compatibility for UNLINK. */
2298 add_sym_1 ("unlink", GFC_ISYM_UNLINK, NO_CLASS, ACTUAL_NO, BT_INTEGER, di, GFC_STD_GNU,
2299 gfc_check_unlink, NULL, gfc_resolve_unlink,
2300 a, BT_CHARACTER, dc, REQUIRED);
2302 make_generic ("unlink", GFC_ISYM_UNLINK, GFC_STD_GNU);
2304 add_sym_3 ("unpack", GFC_ISYM_UNPACK, CLASS_TRANSFORMATIONAL, ACTUAL_NO, BT_REAL, dr, GFC_STD_F95,
2305 gfc_check_unpack, NULL, gfc_resolve_unpack,
2306 v, BT_REAL, dr, REQUIRED, msk, BT_LOGICAL, dl, REQUIRED,
2307 f, BT_REAL, dr, REQUIRED);
2309 make_generic ("unpack", GFC_ISYM_UNPACK, GFC_STD_F95);
2311 add_sym_4 ("verify", GFC_ISYM_VERIFY, CLASS_ELEMENTAL, ACTUAL_NO,
2312 BT_INTEGER, di, GFC_STD_F95,
2313 gfc_check_verify, gfc_simplify_verify, gfc_resolve_verify,
2314 stg, BT_CHARACTER, dc, REQUIRED, set, BT_CHARACTER, dc, REQUIRED,
2315 bck, BT_LOGICAL, dl, OPTIONAL, kind, BT_INTEGER, di, OPTIONAL);
2317 make_generic ("verify", GFC_ISYM_VERIFY, GFC_STD_F95);
2319 add_sym_1 ("loc", GFC_ISYM_LOC, NO_CLASS, ACTUAL_NO, BT_INTEGER, ii, GFC_STD_GNU,
2320 gfc_check_loc, NULL, gfc_resolve_loc,
2321 ar, BT_UNKNOWN, 0, REQUIRED);
2323 make_generic ("loc", GFC_ISYM_LOC, GFC_STD_GNU);
2327 /* Add intrinsic subroutines. */
2330 add_subroutines (void)
2332 /* Argument names as in the standard (to be used as argument keywords). */
2334 *h = "harvest", *dt = "date", *vl = "values", *pt = "put",
2335 *c = "count", *tm = "time", *tp = "topos", *gt = "get",
2336 *t = "to", *zn = "zone", *fp = "frompos", *cm = "count_max",
2337 *f = "from", *sz = "size", *ln = "len", *cr = "count_rate",
2338 *com = "command", *length = "length", *st = "status",
2339 *val = "value", *num = "number", *name = "name",
2340 *trim_name = "trim_name", *ut = "unit", *han = "handler",
2341 *sec = "seconds", *res = "result", *of = "offset", *md = "mode",
2344 int di, dr, dc, dl, ii;
2346 di = gfc_default_integer_kind;
2347 dr = gfc_default_real_kind;
2348 dc = gfc_default_character_kind;
2349 dl = gfc_default_logical_kind;
2350 ii = gfc_index_integer_kind;
2352 add_sym_0s ("abort", GFC_ISYM_ABORT, GFC_STD_GNU, NULL);
2356 add_sym_1s ("cpu_time", GFC_ISYM_CPU_TIME, NO_CLASS, BT_UNKNOWN, 0, GFC_STD_F95,
2357 gfc_check_cpu_time, NULL, gfc_resolve_cpu_time,
2358 tm, BT_REAL, dr, REQUIRED);
2360 /* More G77 compatibility garbage. */
2361 add_sym_2s ("ctime", GFC_ISYM_CTIME, NO_CLASS, BT_UNKNOWN, 0, GFC_STD_GNU,
2362 gfc_check_ctime_sub, NULL, gfc_resolve_ctime_sub,
2363 tm, BT_INTEGER, di, REQUIRED, res, BT_CHARACTER, dc, REQUIRED);
2365 add_sym_1s ("idate", GFC_ISYM_IDATE, NO_CLASS, BT_UNKNOWN, 0, GFC_STD_GNU,
2366 gfc_check_itime_idate, NULL, gfc_resolve_idate,
2367 vl, BT_INTEGER, 4, REQUIRED);
2369 add_sym_1s ("itime", GFC_ISYM_ITIME, NO_CLASS, BT_UNKNOWN, 0, GFC_STD_GNU,
2370 gfc_check_itime_idate, NULL, gfc_resolve_itime,
2371 vl, BT_INTEGER, 4, REQUIRED);
2373 add_sym_2s ("ltime", GFC_ISYM_LTIME, NO_CLASS, BT_UNKNOWN, 0, GFC_STD_GNU,
2374 gfc_check_ltime_gmtime, NULL, gfc_resolve_ltime,
2375 tm, BT_INTEGER, di, REQUIRED, vl, BT_INTEGER, di, REQUIRED);
2377 add_sym_2s ("gmtime", GFC_ISYM_GMTIME, NO_CLASS, BT_UNKNOWN, 0, GFC_STD_GNU,
2378 gfc_check_ltime_gmtime, NULL, gfc_resolve_gmtime,
2379 tm, BT_INTEGER, di, REQUIRED, vl, BT_INTEGER, di, REQUIRED);
2381 add_sym_1s ("second", GFC_ISYM_SECOND, NO_CLASS, BT_UNKNOWN, 0, GFC_STD_GNU,
2382 gfc_check_second_sub, NULL, gfc_resolve_second_sub,
2383 tm, BT_REAL, dr, REQUIRED);
2385 add_sym_2s ("chdir", GFC_ISYM_CHDIR, NO_CLASS, BT_UNKNOWN, 0, GFC_STD_GNU,
2386 gfc_check_chdir_sub, NULL, gfc_resolve_chdir_sub,
2387 name, BT_CHARACTER, dc, REQUIRED, st, BT_INTEGER, di, OPTIONAL);
2389 add_sym_3s ("chmod", GFC_ISYM_CHMOD, NO_CLASS, BT_UNKNOWN, 0, GFC_STD_GNU,
2390 gfc_check_chmod_sub, NULL, gfc_resolve_chmod_sub,
2391 name, BT_CHARACTER, dc, REQUIRED, md, BT_CHARACTER, dc, REQUIRED,
2392 st, BT_INTEGER, di, OPTIONAL);
2394 add_sym_4s ("date_and_time", GFC_ISYM_DATE_AND_TIME, NO_CLASS, BT_UNKNOWN, 0, GFC_STD_F95,
2395 gfc_check_date_and_time, NULL, NULL,
2396 dt, BT_CHARACTER, dc, OPTIONAL, tm, BT_CHARACTER, dc, OPTIONAL,
2397 zn, BT_CHARACTER, dc, OPTIONAL, vl, BT_INTEGER, di, OPTIONAL);
2399 /* More G77 compatibility garbage. */
2400 add_sym_2s ("etime", GFC_ISYM_ETIME, NO_CLASS, BT_UNKNOWN, 0, GFC_STD_GNU,
2401 gfc_check_etime_sub, NULL, gfc_resolve_etime_sub,
2402 vl, BT_REAL, 4, REQUIRED, tm, BT_REAL, 4, REQUIRED);
2404 add_sym_2s ("dtime", GFC_ISYM_DTIME, NO_CLASS, BT_UNKNOWN, 0, GFC_STD_GNU,
2405 gfc_check_etime_sub, NULL, gfc_resolve_etime_sub,
2406 vl, BT_REAL, 4, REQUIRED, tm, BT_REAL, 4, REQUIRED);
2408 add_sym_1s ("fdate", GFC_ISYM_FDATE, NO_CLASS, BT_UNKNOWN, 0, GFC_STD_GNU,
2409 gfc_check_fdate_sub, NULL, gfc_resolve_fdate_sub,
2410 dt, BT_CHARACTER, dc, REQUIRED);
2412 add_sym_1s ("gerror", GFC_ISYM_GERROR, NO_CLASS, BT_UNKNOWN, 0, GFC_STD_GNU,
2413 gfc_check_gerror, NULL, gfc_resolve_gerror, res, BT_CHARACTER,
2416 add_sym_2s ("getcwd", GFC_ISYM_GETCWD, NO_CLASS, BT_UNKNOWN, 0, GFC_STD_GNU,
2417 gfc_check_getcwd_sub, NULL, gfc_resolve_getcwd_sub,
2418 c, BT_CHARACTER, dc, REQUIRED, st, BT_INTEGER, di, OPTIONAL);
2420 add_sym_2s ("getenv", GFC_ISYM_GETENV, NO_CLASS, BT_UNKNOWN, 0, GFC_STD_GNU,
2422 name, BT_CHARACTER, dc, REQUIRED, val, BT_CHARACTER, dc,
2425 add_sym_2s ("getarg", GFC_ISYM_GETARG, NO_CLASS, BT_UNKNOWN, 0, GFC_STD_GNU,
2426 NULL, NULL, gfc_resolve_getarg,
2427 c, BT_INTEGER, di, REQUIRED, vl, BT_CHARACTER, dc, REQUIRED);
2429 add_sym_1s ("getlog", GFC_ISYM_GETLOG, NO_CLASS, BT_UNKNOWN, 0, GFC_STD_GNU,
2430 gfc_check_getlog, NULL, gfc_resolve_getlog, c, BT_CHARACTER,
2433 /* F2003 commandline routines. */
2435 add_sym_3s ("get_command", GFC_ISYM_GET_COMMAND, NO_CLASS, BT_UNKNOWN, 0, GFC_STD_F2003,
2436 NULL, NULL, gfc_resolve_get_command,
2437 com, BT_CHARACTER, dc, OPTIONAL,
2438 length, BT_INTEGER, di, OPTIONAL,
2439 st, BT_INTEGER, di, OPTIONAL);
2441 add_sym_4s ("get_command_argument", GFC_ISYM_GET_COMMAND_ARGUMENT, NO_CLASS, BT_UNKNOWN, 0, GFC_STD_F2003,
2442 NULL, NULL, gfc_resolve_get_command_argument,
2443 num, BT_INTEGER, di, REQUIRED, val, BT_CHARACTER, dc, OPTIONAL,
2444 length, BT_INTEGER, di, OPTIONAL, st, BT_INTEGER, di, OPTIONAL);
2446 /* F2003 subroutine to get environment variables. */
2448 add_sym_5s ("get_environment_variable", GFC_ISYM_GET_ENVIRONMENT_VARIABLE, NO_CLASS, BT_UNKNOWN, 0, GFC_STD_F2003,
2449 NULL, NULL, gfc_resolve_get_environment_variable,
2450 name, BT_CHARACTER, dc, REQUIRED,
2451 val, BT_CHARACTER, dc, OPTIONAL,
2452 length, BT_INTEGER, di, OPTIONAL, st, BT_INTEGER, di, OPTIONAL,
2453 trim_name, BT_LOGICAL, dl, OPTIONAL);
2455 add_sym_2s ("move_alloc", GFC_ISYM_MOVE_ALLOC, NO_CLASS, BT_UNKNOWN, 0, GFC_STD_F2003,
2456 gfc_check_move_alloc, NULL, NULL,
2457 f, BT_UNKNOWN, 0, REQUIRED,
2458 t, BT_UNKNOWN, 0, REQUIRED);
2460 add_sym_5s ("mvbits", GFC_ISYM_MVBITS, CLASS_ELEMENTAL, BT_UNKNOWN, 0, GFC_STD_F95,
2461 gfc_check_mvbits, gfc_simplify_mvbits, gfc_resolve_mvbits,
2462 f, BT_INTEGER, di, REQUIRED, fp, BT_INTEGER, di, REQUIRED,
2463 ln, BT_INTEGER, di, REQUIRED, t, BT_INTEGER, di, REQUIRED,
2464 tp, BT_INTEGER, di, REQUIRED);
2466 add_sym_1s ("random_number", GFC_ISYM_RANDOM_NUMBER, NO_CLASS, BT_UNKNOWN, 0, GFC_STD_F95,
2467 gfc_check_random_number, NULL, gfc_resolve_random_number,
2468 h, BT_REAL, dr, REQUIRED);
2470 add_sym_3s ("random_seed", GFC_ISYM_RANDOM_SEED, NO_CLASS, BT_UNKNOWN, 0, GFC_STD_F95,
2471 gfc_check_random_seed, NULL, NULL,
2472 sz, BT_INTEGER, di, OPTIONAL, pt, BT_INTEGER, di, OPTIONAL,
2473 gt, BT_INTEGER, di, OPTIONAL);
2475 /* More G77 compatibility garbage. */
2476 add_sym_3s ("alarm", GFC_ISYM_ALARM, NO_CLASS, BT_UNKNOWN, 0, GFC_STD_GNU,
2477 gfc_check_alarm_sub, NULL, gfc_resolve_alarm_sub,
2478 sec, BT_INTEGER, di, REQUIRED, han, BT_UNKNOWN, 0, REQUIRED,
2479 st, BT_INTEGER, di, OPTIONAL);
2481 add_sym_1s ("srand", GFC_ISYM_SRAND, NO_CLASS, BT_UNKNOWN, di, GFC_STD_GNU,
2482 gfc_check_srand, NULL, gfc_resolve_srand,
2483 c, BT_INTEGER, 4, REQUIRED);
2485 add_sym_1s ("exit", GFC_ISYM_EXIT, NO_CLASS, BT_UNKNOWN, 0, GFC_STD_GNU,
2486 gfc_check_exit, NULL, gfc_resolve_exit,
2487 st, BT_INTEGER, di, OPTIONAL);
2491 add_sym_3s ("fgetc", GFC_ISYM_FGETC, NO_CLASS, BT_UNKNOWN, 0, GFC_STD_GNU,
2492 gfc_check_fgetputc_sub, NULL, gfc_resolve_fgetc_sub,
2493 ut, BT_INTEGER, di, REQUIRED, c, BT_CHARACTER, dc, REQUIRED,
2494 st, BT_INTEGER, di, OPTIONAL);
2496 add_sym_2s ("fget", GFC_ISYM_FGET, NO_CLASS, BT_UNKNOWN, 0, GFC_STD_GNU,
2497 gfc_check_fgetput_sub, NULL, gfc_resolve_fget_sub,
2498 c, BT_CHARACTER, dc, REQUIRED, st, BT_INTEGER, di, OPTIONAL);
2500 add_sym_1s ("flush", GFC_ISYM_FLUSH, NO_CLASS, BT_UNKNOWN, 0, GFC_STD_GNU,
2501 gfc_check_flush, NULL, gfc_resolve_flush,
2502 c, BT_INTEGER, di, OPTIONAL);
2504 add_sym_3s ("fputc", GFC_ISYM_FPUTC, NO_CLASS, BT_UNKNOWN, 0, GFC_STD_GNU,
2505 gfc_check_fgetputc_sub, NULL, gfc_resolve_fputc_sub,
2506 ut, BT_INTEGER, di, REQUIRED, c, BT_CHARACTER, dc, REQUIRED,
2507 st, BT_INTEGER, di, OPTIONAL);
2509 add_sym_2s ("fput", GFC_ISYM_FPUT, NO_CLASS, BT_UNKNOWN, 0, GFC_STD_GNU,
2510 gfc_check_fgetput_sub, NULL, gfc_resolve_fput_sub,
2511 c, BT_CHARACTER, dc, REQUIRED, st, BT_INTEGER, di, OPTIONAL);
2513 add_sym_1s ("free", GFC_ISYM_FREE, NO_CLASS, BT_UNKNOWN, 0, GFC_STD_GNU, gfc_check_free,
2514 NULL, gfc_resolve_free, c, BT_INTEGER, ii, REQUIRED);
2516 add_sym_4s ("fseek", GFC_ISYM_FSEEK, NO_CLASS, BT_UNKNOWN, 0, GFC_STD_GNU,
2517 gfc_check_fseek_sub, NULL, gfc_resolve_fseek_sub,
2518 ut, BT_INTEGER, di, REQUIRED, of, BT_INTEGER, di, REQUIRED,
2519 whence, BT_INTEGER, di, REQUIRED, st, BT_INTEGER, di, OPTIONAL);
2521 add_sym_2s ("ftell", GFC_ISYM_FTELL, NO_CLASS, BT_UNKNOWN, 0, GFC_STD_GNU,
2522 gfc_check_ftell_sub, NULL, gfc_resolve_ftell_sub,
2523 ut, BT_INTEGER, di, REQUIRED, of, BT_INTEGER, ii, REQUIRED);
2525 add_sym_2s ("hostnm", GFC_ISYM_HOSTNM, NO_CLASS, BT_UNKNOWN, 0, GFC_STD_GNU,
2526 gfc_check_hostnm_sub, NULL, gfc_resolve_hostnm_sub,
2527 c, BT_CHARACTER, dc, REQUIRED, st, BT_INTEGER, di, OPTIONAL);
2529 add_sym_3s ("kill", GFC_ISYM_KILL, NO_CLASS, BT_UNKNOWN, 0, GFC_STD_GNU, gfc_check_kill_sub,
2530 NULL, gfc_resolve_kill_sub, c, BT_INTEGER, di, REQUIRED,
2531 val, BT_INTEGER, di, REQUIRED, st, BT_INTEGER, di, OPTIONAL);
2533 add_sym_3s ("link", GFC_ISYM_LINK, NO_CLASS, BT_UNKNOWN, 0, GFC_STD_GNU,
2534 gfc_check_link_sub, NULL, gfc_resolve_link_sub,
2535 name, BT_CHARACTER, dc, REQUIRED, val, BT_CHARACTER,
2536 dc, REQUIRED, st, BT_INTEGER, di, OPTIONAL);
2538 add_sym_1s ("perror", GFC_ISYM_PERROR, NO_CLASS, BT_UNKNOWN, 0, GFC_STD_GNU,
2539 gfc_check_perror, NULL, gfc_resolve_perror,
2540 c, BT_CHARACTER, dc, REQUIRED);
2542 add_sym_3s ("rename", GFC_ISYM_RENAME, NO_CLASS, BT_UNKNOWN, 0, GFC_STD_GNU,
2543 gfc_check_rename_sub, NULL, gfc_resolve_rename_sub,
2544 name, BT_CHARACTER, dc, REQUIRED, val, BT_CHARACTER,
2545 dc, REQUIRED, st, BT_INTEGER, di, OPTIONAL);
2547 add_sym_1s ("sleep", GFC_ISYM_SLEEP, NO_CLASS, BT_UNKNOWN, 0, GFC_STD_GNU,
2548 gfc_check_sleep_sub, NULL, gfc_resolve_sleep_sub,
2549 val, BT_CHARACTER, dc, REQUIRED);
2551 add_sym_3s ("fstat", GFC_ISYM_FSTAT, NO_CLASS, BT_UNKNOWN, 0, GFC_STD_GNU,
2552 gfc_check_fstat_sub, NULL, gfc_resolve_fstat_sub,
2553 ut, BT_INTEGER, di, REQUIRED, vl, BT_INTEGER, di, REQUIRED,
2554 st, BT_INTEGER, di, OPTIONAL);
2556 add_sym_3s ("lstat", GFC_ISYM_LSTAT, NO_CLASS, BT_UNKNOWN, 0, GFC_STD_GNU,
2557 gfc_check_stat_sub, NULL, gfc_resolve_lstat_sub,
2558 name, BT_CHARACTER, dc, REQUIRED, vl, BT_INTEGER, di, REQUIRED,
2559 st, BT_INTEGER, di, OPTIONAL);
2561 add_sym_3s ("stat", GFC_ISYM_STAT, NO_CLASS, BT_UNKNOWN, 0, GFC_STD_GNU,
2562 gfc_check_stat_sub, NULL, gfc_resolve_stat_sub,
2563 name, BT_CHARACTER, dc, REQUIRED, vl, BT_INTEGER, di, REQUIRED,
2564 st, BT_INTEGER, di, OPTIONAL);
2566 add_sym_3s ("signal", GFC_ISYM_SIGNAL, NO_CLASS, BT_UNKNOWN, 0, GFC_STD_GNU,
2567 gfc_check_signal_sub, NULL, gfc_resolve_signal_sub,
2568 num, BT_INTEGER, di, REQUIRED, han, BT_UNKNOWN, 0, REQUIRED,
2569 st, BT_INTEGER, di, OPTIONAL);
2571 add_sym_3s ("symlnk", GFC_ISYM_SYMLINK, NO_CLASS, BT_UNKNOWN, 0, GFC_STD_GNU,
2572 gfc_check_symlnk_sub, NULL, gfc_resolve_symlnk_sub,
2573 name, BT_CHARACTER, dc, REQUIRED, val, BT_CHARACTER,
2574 dc, REQUIRED, st, BT_INTEGER, di, OPTIONAL);
2576 add_sym_2s ("system", GFC_ISYM_SYSTEM, NO_CLASS, BT_UNKNOWN, 0, GFC_STD_GNU,
2577 NULL, NULL, gfc_resolve_system_sub,
2578 c, BT_CHARACTER, dc, REQUIRED, st, BT_INTEGER, di, OPTIONAL);
2580 add_sym_3s ("system_clock", GFC_ISYM_SYSTEM_CLOCK, NO_CLASS, BT_UNKNOWN, 0, GFC_STD_F95,
2581 gfc_check_system_clock, NULL, gfc_resolve_system_clock,
2582 c, BT_INTEGER, di, OPTIONAL, cr, BT_INTEGER, di, OPTIONAL,
2583 cm, BT_INTEGER, di, OPTIONAL);
2585 add_sym_2s ("ttynam", GFC_ISYM_TTYNAM, NO_CLASS, BT_UNKNOWN, 0, GFC_STD_GNU,
2586 gfc_check_ttynam_sub, NULL, gfc_resolve_ttynam_sub,
2587 ut, BT_INTEGER, di, REQUIRED, name, BT_CHARACTER, dc, REQUIRED);
2589 add_sym_2s ("umask", GFC_ISYM_UMASK, NO_CLASS, BT_UNKNOWN, 0, GFC_STD_GNU,
2590 gfc_check_umask_sub, NULL, gfc_resolve_umask_sub,
2591 val, BT_INTEGER, di, REQUIRED, num, BT_INTEGER, di, OPTIONAL);
2593 add_sym_2s ("unlink", GFC_ISYM_UNLINK, NO_CLASS, BT_UNKNOWN, 0, GFC_STD_GNU,
2594 gfc_check_unlink_sub, NULL, gfc_resolve_unlink_sub,
2595 c, BT_CHARACTER, dc, REQUIRED, st, BT_INTEGER, di, OPTIONAL);
2599 /* Add a function to the list of conversion symbols. */
2602 add_conv (bt from_type, int from_kind, bt to_type, int to_kind, int standard)
2604 gfc_typespec from, to;
2605 gfc_intrinsic_sym *sym;
2607 if (sizing == SZ_CONVS)
2613 gfc_clear_ts (&from);
2614 from.type = from_type;
2615 from.kind = from_kind;
2621 sym = conversion + nconv;
2623 sym->name = conv_name (&from, &to);
2624 sym->lib_name = sym->name;
2625 sym->simplify.cc = gfc_convert_constant;
2626 sym->standard = standard;
2628 sym->conversion = 1;
2630 sym->id = GFC_ISYM_CONVERSION;
2636 /* Create gfc_intrinsic_sym nodes for all intrinsic conversion
2637 functions by looping over the kind tables. */
2640 add_conversions (void)
2644 /* Integer-Integer conversions. */
2645 for (i = 0; gfc_integer_kinds[i].kind != 0; i++)
2646 for (j = 0; gfc_integer_kinds[j].kind != 0; j++)
2651 add_conv (BT_INTEGER, gfc_integer_kinds[i].kind,
2652 BT_INTEGER, gfc_integer_kinds[j].kind, GFC_STD_F77);
2655 /* Integer-Real/Complex conversions. */
2656 for (i = 0; gfc_integer_kinds[i].kind != 0; i++)
2657 for (j = 0; gfc_real_kinds[j].kind != 0; j++)
2659 add_conv (BT_INTEGER, gfc_integer_kinds[i].kind,
2660 BT_REAL, gfc_real_kinds[j].kind, GFC_STD_F77);
2662 add_conv (BT_REAL, gfc_real_kinds[j].kind,
2663 BT_INTEGER, gfc_integer_kinds[i].kind, GFC_STD_F77);
2665 add_conv (BT_INTEGER, gfc_integer_kinds[i].kind,
2666 BT_COMPLEX, gfc_real_kinds[j].kind, GFC_STD_F77);
2668 add_conv (BT_COMPLEX, gfc_real_kinds[j].kind,
2669 BT_INTEGER, gfc_integer_kinds[i].kind, GFC_STD_F77);
2672 if ((gfc_option.allow_std & GFC_STD_LEGACY) != 0)
2674 /* Hollerith-Integer conversions. */
2675 for (i = 0; gfc_integer_kinds[i].kind != 0; i++)
2676 add_conv (BT_HOLLERITH, gfc_default_character_kind,
2677 BT_INTEGER, gfc_integer_kinds[i].kind, GFC_STD_LEGACY);
2678 /* Hollerith-Real conversions. */
2679 for (i = 0; gfc_real_kinds[i].kind != 0; i++)
2680 add_conv (BT_HOLLERITH, gfc_default_character_kind,
2681 BT_REAL, gfc_real_kinds[i].kind, GFC_STD_LEGACY);
2682 /* Hollerith-Complex conversions. */
2683 for (i = 0; gfc_real_kinds[i].kind != 0; i++)
2684 add_conv (BT_HOLLERITH, gfc_default_character_kind,
2685 BT_COMPLEX, gfc_real_kinds[i].kind, GFC_STD_LEGACY);
2687 /* Hollerith-Character conversions. */
2688 add_conv (BT_HOLLERITH, gfc_default_character_kind, BT_CHARACTER,
2689 gfc_default_character_kind, GFC_STD_LEGACY);
2691 /* Hollerith-Logical conversions. */
2692 for (i = 0; gfc_logical_kinds[i].kind != 0; i++)
2693 add_conv (BT_HOLLERITH, gfc_default_character_kind,
2694 BT_LOGICAL, gfc_logical_kinds[i].kind, GFC_STD_LEGACY);
2697 /* Real/Complex - Real/Complex conversions. */
2698 for (i = 0; gfc_real_kinds[i].kind != 0; i++)
2699 for (j = 0; gfc_real_kinds[j].kind != 0; j++)
2703 add_conv (BT_REAL, gfc_real_kinds[i].kind,
2704 BT_REAL, gfc_real_kinds[j].kind, GFC_STD_F77);
2706 add_conv (BT_COMPLEX, gfc_real_kinds[i].kind,
2707 BT_COMPLEX, gfc_real_kinds[j].kind, GFC_STD_F77);
2710 add_conv (BT_REAL, gfc_real_kinds[i].kind,
2711 BT_COMPLEX, gfc_real_kinds[j].kind, GFC_STD_F77);
2713 add_conv (BT_COMPLEX, gfc_real_kinds[i].kind,
2714 BT_REAL, gfc_real_kinds[j].kind, GFC_STD_F77);
2717 /* Logical/Logical kind conversion. */
2718 for (i = 0; gfc_logical_kinds[i].kind; i++)
2719 for (j = 0; gfc_logical_kinds[j].kind; j++)
2724 add_conv (BT_LOGICAL, gfc_logical_kinds[i].kind,
2725 BT_LOGICAL, gfc_logical_kinds[j].kind, GFC_STD_F77);
2728 /* Integer-Logical and Logical-Integer conversions. */
2729 if ((gfc_option.allow_std & GFC_STD_LEGACY) != 0)
2730 for (i=0; gfc_integer_kinds[i].kind; i++)
2731 for (j=0; gfc_logical_kinds[j].kind; j++)
2733 add_conv (BT_INTEGER, gfc_integer_kinds[i].kind,
2734 BT_LOGICAL, gfc_logical_kinds[j].kind, GFC_STD_LEGACY);
2735 add_conv (BT_LOGICAL, gfc_logical_kinds[j].kind,
2736 BT_INTEGER, gfc_integer_kinds[i].kind, GFC_STD_LEGACY);
2741 /* Initialize the table of intrinsics. */
2743 gfc_intrinsic_init_1 (void)
2747 nargs = nfunc = nsub = nconv = 0;
2749 /* Create a namespace to hold the resolved intrinsic symbols. */
2750 gfc_intrinsic_namespace = gfc_get_namespace (NULL, 0);
2759 functions = gfc_getmem (sizeof (gfc_intrinsic_sym) * (nfunc + nsub)
2760 + sizeof (gfc_intrinsic_arg) * nargs);
2762 next_sym = functions;
2763 subroutines = functions + nfunc;
2765 conversion = gfc_getmem (sizeof (gfc_intrinsic_sym) * nconv);
2767 next_arg = ((gfc_intrinsic_arg *) (subroutines + nsub)) - 1;
2769 sizing = SZ_NOTHING;
2776 /* Set the pure flag. All intrinsic functions are pure, and
2777 intrinsic subroutines are pure if they are elemental. */
2779 for (i = 0; i < nfunc; i++)
2780 functions[i].pure = 1;
2782 for (i = 0; i < nsub; i++)
2783 subroutines[i].pure = subroutines[i].elemental;
2788 gfc_intrinsic_done_1 (void)
2790 gfc_free (functions);
2791 gfc_free (conversion);
2792 gfc_free_namespace (gfc_intrinsic_namespace);
2796 /******** Subroutines to check intrinsic interfaces ***********/
2798 /* Given a formal argument list, remove any NULL arguments that may
2799 have been left behind by a sort against some formal argument list. */
2802 remove_nullargs (gfc_actual_arglist **ap)
2804 gfc_actual_arglist *head, *tail, *next;
2808 for (head = *ap; head; head = next)
2812 if (head->expr == NULL && !head->label)
2815 gfc_free_actual_arglist (head);
2834 /* Given an actual arglist and a formal arglist, sort the actual
2835 arglist so that its arguments are in a one-to-one correspondence
2836 with the format arglist. Arguments that are not present are given
2837 a blank gfc_actual_arglist structure. If something is obviously
2838 wrong (say, a missing required argument) we abort sorting and
2842 sort_actual (const char *name, gfc_actual_arglist **ap,
2843 gfc_intrinsic_arg *formal, locus *where)
2845 gfc_actual_arglist *actual, *a;
2846 gfc_intrinsic_arg *f;
2848 remove_nullargs (ap);
2851 for (f = formal; f; f = f->next)
2857 if (f == NULL && a == NULL) /* No arguments */
2861 { /* Put the nonkeyword arguments in a 1:1 correspondence */
2867 if (a->name != NULL)
2879 gfc_error ("Too many arguments in call to '%s' at %L", name, where);
2883 /* Associate the remaining actual arguments, all of which have
2884 to be keyword arguments. */
2885 for (; a; a = a->next)
2887 for (f = formal; f; f = f->next)
2888 if (strcmp (a->name, f->name) == 0)
2893 if (a->name[0] == '%')
2894 gfc_error ("The argument list functions %%VAL, %%LOC or %%REF "
2895 "are not allowed in this context at %L", where);
2897 gfc_error ("Can't find keyword named '%s' in call to '%s' at %L",
2898 a->name, name, where);
2902 if (f->actual != NULL)
2904 gfc_error ("Argument '%s' is appears twice in call to '%s' at %L",
2905 f->name, name, where);
2913 /* At this point, all unmatched formal args must be optional. */
2914 for (f = formal; f; f = f->next)
2916 if (f->actual == NULL && f->optional == 0)
2918 gfc_error ("Missing actual argument '%s' in call to '%s' at %L",
2919 f->name, name, where);
2925 /* Using the formal argument list, string the actual argument list
2926 together in a way that corresponds with the formal list. */
2929 for (f = formal; f; f = f->next)
2931 if (f->actual && f->actual->label != NULL && f->ts.type)
2933 gfc_error ("ALTERNATE RETURN not permitted at %L", where);
2937 if (f->actual == NULL)
2939 a = gfc_get_actual_arglist ();
2940 a->missing_arg_type = f->ts.type;
2952 actual->next = NULL; /* End the sorted argument list. */
2958 /* Compare an actual argument list with an intrinsic's formal argument
2959 list. The lists are checked for agreement of type. We don't check
2960 for arrayness here. */
2963 check_arglist (gfc_actual_arglist **ap, gfc_intrinsic_sym *sym,
2966 gfc_actual_arglist *actual;
2967 gfc_intrinsic_arg *formal;
2970 formal = sym->formal;
2974 for (; formal; formal = formal->next, actual = actual->next, i++)
2976 if (actual->expr == NULL)
2979 if (!gfc_compare_types (&formal->ts, &actual->expr->ts))
2982 gfc_error ("Type of argument '%s' in call to '%s' at %L should "
2983 "be %s, not %s", gfc_current_intrinsic_arg[i],
2984 gfc_current_intrinsic, &actual->expr->where,
2985 gfc_typename (&formal->ts),
2986 gfc_typename (&actual->expr->ts));
2995 /* Given a pointer to an intrinsic symbol and an expression node that
2996 represent the function call to that subroutine, figure out the type
2997 of the result. This may involve calling a resolution subroutine. */
3000 resolve_intrinsic (gfc_intrinsic_sym *specific, gfc_expr *e)
3002 gfc_expr *a1, *a2, *a3, *a4, *a5;
3003 gfc_actual_arglist *arg;
3005 if (specific->resolve.f1 == NULL)
3007 if (e->value.function.name == NULL)
3008 e->value.function.name = specific->lib_name;
3010 if (e->ts.type == BT_UNKNOWN)
3011 e->ts = specific->ts;
3015 arg = e->value.function.actual;
3017 /* Special case hacks for MIN and MAX. */
3018 if (specific->resolve.f1m == gfc_resolve_max
3019 || specific->resolve.f1m == gfc_resolve_min)
3021 (*specific->resolve.f1m) (e, arg);
3027 (*specific->resolve.f0) (e);
3036 (*specific->resolve.f1) (e, a1);
3045 (*specific->resolve.f2) (e, a1, a2);
3054 (*specific->resolve.f3) (e, a1, a2, a3);
3063 (*specific->resolve.f4) (e, a1, a2, a3, a4);
3072 (*specific->resolve.f5) (e, a1, a2, a3, a4, a5);
3076 gfc_internal_error ("resolve_intrinsic(): Too many args for intrinsic");
3080 /* Given an intrinsic symbol node and an expression node, call the
3081 simplification function (if there is one), perhaps replacing the
3082 expression with something simpler. We return FAILURE on an error
3083 of the simplification, SUCCESS if the simplification worked, even
3084 if nothing has changed in the expression itself. */
3087 do_simplify (gfc_intrinsic_sym *specific, gfc_expr *e)
3089 gfc_expr *result, *a1, *a2, *a3, *a4, *a5;
3090 gfc_actual_arglist *arg;
3092 /* Max and min require special handling due to the variable number
3094 if (specific->simplify.f1 == gfc_simplify_min)
3096 result = gfc_simplify_min (e);
3100 if (specific->simplify.f1 == gfc_simplify_max)
3102 result = gfc_simplify_max (e);
3106 if (specific->simplify.f1 == NULL)
3112 arg = e->value.function.actual;
3116 result = (*specific->simplify.f0) ();
3123 if (specific->simplify.cc == gfc_convert_constant)
3125 result = gfc_convert_constant (a1, specific->ts.type, specific->ts.kind);
3129 /* TODO: Warn if -pedantic and initialization expression and arg
3130 types not integer or character */
3133 result = (*specific->simplify.f1) (a1);
3140 result = (*specific->simplify.f2) (a1, a2);
3147 result = (*specific->simplify.f3) (a1, a2, a3);
3154 result = (*specific->simplify.f4) (a1, a2, a3, a4);
3161 result = (*specific->simplify.f5) (a1, a2, a3, a4, a5);
3164 ("do_simplify(): Too many args for intrinsic");
3171 if (result == &gfc_bad_expr)
3175 resolve_intrinsic (specific, e); /* Must call at run-time */
3178 result->where = e->where;
3179 gfc_replace_expr (e, result);
3186 /* Initialize the gfc_current_intrinsic_arg[] array for the benefit of
3187 error messages. This subroutine returns FAILURE if a subroutine
3188 has more than MAX_INTRINSIC_ARGS, in which case the actual argument
3189 list cannot match any intrinsic. */
3192 init_arglist (gfc_intrinsic_sym *isym)
3194 gfc_intrinsic_arg *formal;
3197 gfc_current_intrinsic = isym->name;
3200 for (formal = isym->formal; formal; formal = formal->next)
3202 if (i >= MAX_INTRINSIC_ARGS)
3203 gfc_internal_error ("init_arglist(): too many arguments");
3204 gfc_current_intrinsic_arg[i++] = formal->name;
3209 /* Given a pointer to an intrinsic symbol and an expression consisting
3210 of a function call, see if the function call is consistent with the
3211 intrinsic's formal argument list. Return SUCCESS if the expression
3212 and intrinsic match, FAILURE otherwise. */
3215 check_specific (gfc_intrinsic_sym *specific, gfc_expr *expr, int error_flag)
3217 gfc_actual_arglist *arg, **ap;
3220 ap = &expr->value.function.actual;
3222 init_arglist (specific);
3224 /* Don't attempt to sort the argument list for min or max. */
3225 if (specific->check.f1m == gfc_check_min_max
3226 || specific->check.f1m == gfc_check_min_max_integer
3227 || specific->check.f1m == gfc_check_min_max_real
3228 || specific->check.f1m == gfc_check_min_max_double)
3229 return (*specific->check.f1m) (*ap);
3231 if (sort_actual (specific->name, ap, specific->formal,
3232 &expr->where) == FAILURE)
3235 if (specific->check.f3ml == gfc_check_minloc_maxloc)
3236 /* This is special because we might have to reorder the argument list. */
3237 t = gfc_check_minloc_maxloc (*ap);
3238 else if (specific->check.f3red == gfc_check_minval_maxval)
3239 /* This is also special because we also might have to reorder the
3241 t = gfc_check_minval_maxval (*ap);
3242 else if (specific->check.f3red == gfc_check_product_sum)
3243 /* Same here. The difference to the previous case is that we allow a
3244 general numeric type. */
3245 t = gfc_check_product_sum (*ap);
3248 if (specific->check.f1 == NULL)
3250 t = check_arglist (ap, specific, error_flag);
3252 expr->ts = specific->ts;
3255 t = do_check (specific, *ap);
3258 /* Check conformance of elemental intrinsics. */
3259 if (t == SUCCESS && specific->elemental)
3262 gfc_expr *first_expr;
3263 arg = expr->value.function.actual;
3265 /* There is no elemental intrinsic without arguments. */
3266 gcc_assert(arg != NULL);
3267 first_expr = arg->expr;
3269 for ( ; arg && arg->expr; arg = arg->next, n++)
3272 snprintf (buffer, 80, "arguments '%s' and '%s' for intrinsic '%s'",
3273 gfc_current_intrinsic_arg[0], gfc_current_intrinsic_arg[n],
3274 gfc_current_intrinsic);
3275 if (gfc_check_conformance (buffer, first_expr, arg->expr) == FAILURE)
3281 remove_nullargs (ap);
3287 /* Check whether an intrinsic belongs to whatever standard the user
3291 check_intrinsic_standard (const char *name, int standard, locus *where)
3293 /* Do not warn about GNU-extensions if -std=gnu. */
3294 if (!gfc_option.warn_nonstd_intrinsics
3295 || (standard == GFC_STD_GNU && gfc_option.warn_std & GFC_STD_GNU))
3298 if (gfc_notify_std (standard, "Intrinsic '%s' at %L is not included "
3299 "in the selected standard", name, where) == FAILURE)
3306 /* See if a function call corresponds to an intrinsic function call.
3309 MATCH_YES if the call corresponds to an intrinsic, simplification
3310 is done if possible.
3312 MATCH_NO if the call does not correspond to an intrinsic
3314 MATCH_ERROR if the call corresponds to an intrinsic but there was an
3315 error during the simplification process.
3317 The error_flag parameter enables an error reporting. */
3320 gfc_intrinsic_func_interface (gfc_expr *expr, int error_flag)
3322 gfc_intrinsic_sym *isym, *specific;
3323 gfc_actual_arglist *actual;
3327 if (expr->value.function.isym != NULL)
3328 return (do_simplify (expr->value.function.isym, expr) == FAILURE)
3329 ? MATCH_ERROR : MATCH_YES;
3331 gfc_suppress_error = !error_flag;
3334 for (actual = expr->value.function.actual; actual; actual = actual->next)
3335 if (actual->expr != NULL)
3336 flag |= (actual->expr->ts.type != BT_INTEGER
3337 && actual->expr->ts.type != BT_CHARACTER);
3339 name = expr->symtree->n.sym->name;
3341 isym = specific = gfc_find_function (name);
3344 gfc_suppress_error = 0;
3348 if (check_intrinsic_standard (name, isym->standard, &expr->where) == FAILURE)
3351 gfc_current_intrinsic_where = &expr->where;
3353 /* Bypass the generic list for min and max. */
3354 if (isym->check.f1m == gfc_check_min_max)
3356 init_arglist (isym);
3358 if (gfc_check_min_max (expr->value.function.actual) == SUCCESS)
3361 gfc_suppress_error = 0;
3365 /* If the function is generic, check all of its specific
3366 incarnations. If the generic name is also a specific, we check
3367 that name last, so that any error message will correspond to the
3369 gfc_suppress_error = 1;
3373 for (specific = isym->specific_head; specific;
3374 specific = specific->next)
3376 if (specific == isym)
3378 if (check_specific (specific, expr, 0) == SUCCESS)
3383 gfc_suppress_error = !error_flag;
3385 if (check_specific (isym, expr, error_flag) == FAILURE)
3387 gfc_suppress_error = 0;
3394 expr->value.function.isym = specific;
3395 gfc_intrinsic_symbol (expr->symtree->n.sym);
3397 gfc_suppress_error = 0;
3398 if (do_simplify (specific, expr) == FAILURE)
3401 /* F95, 7.1.6.1, Initialization expressions
3402 (4) An elemental intrinsic function reference of type integer or
3403 character where each argument is an initialization expression
3404 of type integer or character
3406 F2003, 7.1.7 Initialization expression
3407 (4) A reference to an elemental standard intrinsic function,
3408 where each argument is an initialization expression */
3412 && (expr->ts.type != BT_INTEGER || expr->ts.type != BT_CHARACTER)
3413 && gfc_notify_std (GFC_STD_F2003, "Extension: Evaluation of "
3414 "nonstandard initialization expression at %L",
3415 &expr->where) == FAILURE)
3422 /* See if a CALL statement corresponds to an intrinsic subroutine.
3423 Returns MATCH_YES if the subroutine corresponds to an intrinsic,
3424 MATCH_NO if not, and MATCH_ERROR if there was an error (but did
3428 gfc_intrinsic_sub_interface (gfc_code *c, int error_flag)
3430 gfc_intrinsic_sym *isym;
3433 name = c->symtree->n.sym->name;
3435 isym = gfc_find_subroutine (name);
3439 if (check_intrinsic_standard (name, isym->standard, &c->loc) == FAILURE)
3442 gfc_suppress_error = !error_flag;
3444 init_arglist (isym);
3446 if (sort_actual (name, &c->ext.actual, isym->formal, &c->loc) == FAILURE)
3449 if (isym->check.f1 != NULL)
3451 if (do_check (isym, c->ext.actual) == FAILURE)
3456 if (check_arglist (&c->ext.actual, isym, 1) == FAILURE)
3460 /* The subroutine corresponds to an intrinsic. Allow errors to be
3461 seen at this point. */
3462 gfc_suppress_error = 0;
3464 if (isym->resolve.s1 != NULL)
3465 isym->resolve.s1 (c);
3467 c->resolved_sym = gfc_get_intrinsic_sub_symbol (isym->lib_name);
3469 if (gfc_pure (NULL) && !isym->elemental)
3471 gfc_error ("Subroutine call to intrinsic '%s' at %L is not PURE", name,
3476 c->resolved_sym->attr.noreturn = isym->noreturn;
3481 gfc_suppress_error = 0;
3486 /* Call gfc_convert_type() with warning enabled. */
3489 gfc_convert_type (gfc_expr *expr, gfc_typespec *ts, int eflag)
3491 return gfc_convert_type_warn (expr, ts, eflag, 1);
3495 /* Try to convert an expression (in place) from one type to another.
3496 'eflag' controls the behavior on error.
3498 The possible values are:
3500 1 Generate a gfc_error()
3501 2 Generate a gfc_internal_error().
3503 'wflag' controls the warning related to conversion. */
3506 gfc_convert_type_warn (gfc_expr *expr, gfc_typespec *ts, int eflag, int wflag)
3508 gfc_intrinsic_sym *sym;
3509 gfc_typespec from_ts;
3515 from_ts = expr->ts; /* expr->ts gets clobbered */
3517 if (ts->type == BT_UNKNOWN)
3520 /* NULL and zero size arrays get their type here. */
3521 if (expr->expr_type == EXPR_NULL
3522 || (expr->expr_type == EXPR_ARRAY && expr->value.constructor == NULL))
3524 /* Sometimes the RHS acquire the type. */
3529 if (expr->ts.type == BT_UNKNOWN)
3532 if (expr->ts.type == BT_DERIVED && ts->type == BT_DERIVED
3533 && gfc_compare_types (&expr->ts, ts))
3536 sym = find_conv (&expr->ts, ts);
3540 /* At this point, a conversion is necessary. A warning may be needed. */
3541 if ((gfc_option.warn_std & sym->standard) != 0)
3542 gfc_warning_now ("Extension: Conversion from %s to %s at %L",
3543 gfc_typename (&from_ts), gfc_typename (ts), &expr->where);
3544 else if (wflag && gfc_option.warn_conversion)
3545 gfc_warning_now ("Conversion from %s to %s at %L",
3546 gfc_typename (&from_ts), gfc_typename (ts), &expr->where);
3548 /* Insert a pre-resolved function call to the right function. */
3549 old_where = expr->where;
3551 shape = expr->shape;
3553 new = gfc_get_expr ();
3556 new = gfc_build_conversion (new);
3557 new->value.function.name = sym->lib_name;
3558 new->value.function.isym = sym;
3559 new->where = old_where;
3561 new->shape = gfc_copy_shape (shape, rank);
3563 gfc_get_ha_sym_tree (sym->name, &new->symtree);
3564 new->symtree->n.sym->ts = *ts;
3565 new->symtree->n.sym->attr.flavor = FL_PROCEDURE;
3566 new->symtree->n.sym->attr.function = 1;
3567 new->symtree->n.sym->attr.elemental = 1;
3568 new->symtree->n.sym->attr.pure = 1;
3569 new->symtree->n.sym->attr.referenced = 1;
3570 gfc_intrinsic_symbol(new->symtree->n.sym);
3571 gfc_commit_symbol (new->symtree->n.sym);
3578 if (gfc_is_constant_expr (expr->value.function.actual->expr)
3579 && do_simplify (sym, expr) == FAILURE)
3584 return FAILURE; /* Error already generated in do_simplify() */
3592 gfc_error ("Can't convert %s to %s at %L",
3593 gfc_typename (&from_ts), gfc_typename (ts), &expr->where);
3597 gfc_internal_error ("Can't convert %s to %s at %L",
3598 gfc_typename (&from_ts), gfc_typename (ts),