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 2, 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 COPYING. If not, write to the Free
21 Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA
28 #include "intrinsic.h"
30 /* Namespace to hold the resolved symbols for intrinsic subroutines. */
31 static gfc_namespace
*gfc_intrinsic_namespace
;
33 int gfc_init_expr
= 0;
35 /* Pointers to an intrinsic function and its argument names that are being
38 const char *gfc_current_intrinsic
;
39 const char *gfc_current_intrinsic_arg
[MAX_INTRINSIC_ARGS
];
40 locus
*gfc_current_intrinsic_where
;
42 static gfc_intrinsic_sym
*functions
, *subroutines
, *conversion
, *next_sym
;
43 static gfc_intrinsic_arg
*next_arg
;
45 static int nfunc
, nsub
, nargs
, nconv
;
48 { SZ_NOTHING
= 0, SZ_SUBS
, SZ_FUNCS
, SZ_CONVS
}
52 { NO_CLASS
= 0, CLASS_ELEMENTAL
, CLASS_INQUIRY
, CLASS_TRANSFORMATIONAL
};
61 /* Return a letter based on the passed type. Used to construct the
62 name of a type-dependent subroutine. */
65 gfc_type_letter (bt type
)
100 /* Get a symbol for a resolved name. */
103 gfc_get_intrinsic_sub_symbol (const char *name
)
107 gfc_get_symbol (name
, gfc_intrinsic_namespace
, &sym
);
108 sym
->attr
.always_explicit
= 1;
109 sym
->attr
.subroutine
= 1;
110 sym
->attr
.flavor
= FL_PROCEDURE
;
111 sym
->attr
.proc
= PROC_INTRINSIC
;
117 /* Return a pointer to the name of a conversion function given two
121 conv_name (gfc_typespec
*from
, gfc_typespec
*to
)
123 return gfc_get_string ("__convert_%c%d_%c%d",
124 gfc_type_letter (from
->type
), from
->kind
,
125 gfc_type_letter (to
->type
), to
->kind
);
129 /* Given a pair of typespecs, find the gfc_intrinsic_sym node that
130 corresponds to the conversion. Returns NULL if the conversion
133 static gfc_intrinsic_sym
*
134 find_conv (gfc_typespec
*from
, gfc_typespec
*to
)
136 gfc_intrinsic_sym
*sym
;
140 target
= conv_name (from
, to
);
143 for (i
= 0; i
< nconv
; i
++, sym
++)
144 if (target
== sym
->name
)
151 /* Interface to the check functions. We break apart an argument list
152 and call the proper check function rather than forcing each
153 function to manipulate the argument list. */
156 do_check (gfc_intrinsic_sym
*specific
, gfc_actual_arglist
*arg
)
158 gfc_expr
*a1
, *a2
, *a3
, *a4
, *a5
;
161 return (*specific
->check
.f0
) ();
166 return (*specific
->check
.f1
) (a1
);
171 return (*specific
->check
.f2
) (a1
, a2
);
176 return (*specific
->check
.f3
) (a1
, a2
, a3
);
181 return (*specific
->check
.f4
) (a1
, a2
, a3
, a4
);
186 return (*specific
->check
.f5
) (a1
, a2
, a3
, a4
, a5
);
188 gfc_internal_error ("do_check(): too many args");
192 /*********** Subroutines to build the intrinsic list ****************/
194 /* Add a single intrinsic symbol to the current list.
197 char * name of function
198 int whether function is elemental
199 int If the function can be used as an actual argument [1]
200 bt return type of function
201 int kind of return type of function
202 int Fortran standard version
203 check pointer to check function
204 simplify pointer to simplification function
205 resolve pointer to resolution function
207 Optional arguments come in multiples of four:
208 char * name of argument
211 int arg optional flag (1=optional, 0=required)
213 The sequence is terminated by a NULL name.
216 [1] Whether a function can or cannot be used as an actual argument is
217 determined by its presence on the 13.6 list in Fortran 2003. The
218 following intrinsics, which are GNU extensions, are considered allowed
219 as actual arguments: ACOSH ATANH DACOSH DASINH DATANH DCONJG DIMAG
220 ZABS ZCOS ZEXP ZLOG ZSIN ZSQRT. */
223 add_sym (const char *name
, gfc_isym_id id
, enum class cl
, int actual_ok
, bt type
, int kind
,
224 int standard
, gfc_check_f check
, gfc_simplify_f simplify
,
225 gfc_resolve_f resolve
, ...)
227 char buf
[GFC_MAX_SYMBOL_LEN
+ 11]; /* 10 for '_gfortran_', 1 for '\0' */
228 int optional
, first_flag
;
242 next_sym
->name
= gfc_get_string (name
);
244 strcpy (buf
, "_gfortran_");
246 next_sym
->lib_name
= gfc_get_string (buf
);
248 next_sym
->elemental
= (cl
== CLASS_ELEMENTAL
);
249 next_sym
->inquiry
= (cl
== CLASS_INQUIRY
);
250 next_sym
->transformational
= (cl
== CLASS_TRANSFORMATIONAL
);
251 next_sym
->actual_ok
= actual_ok
;
252 next_sym
->ts
.type
= type
;
253 next_sym
->ts
.kind
= kind
;
254 next_sym
->standard
= standard
;
255 next_sym
->simplify
= simplify
;
256 next_sym
->check
= check
;
257 next_sym
->resolve
= resolve
;
258 next_sym
->specific
= 0;
259 next_sym
->generic
= 0;
260 next_sym
->conversion
= 0;
265 gfc_internal_error ("add_sym(): Bad sizing mode");
268 va_start (argp
, resolve
);
274 name
= va_arg (argp
, char *);
278 type
= (bt
) va_arg (argp
, int);
279 kind
= va_arg (argp
, int);
280 optional
= va_arg (argp
, int);
282 if (sizing
!= SZ_NOTHING
)
289 next_sym
->formal
= next_arg
;
291 (next_arg
- 1)->next
= next_arg
;
295 strcpy (next_arg
->name
, name
);
296 next_arg
->ts
.type
= type
;
297 next_arg
->ts
.kind
= kind
;
298 next_arg
->optional
= optional
;
308 /* Add a symbol to the function list where the function takes
312 add_sym_0 (const char *name
, gfc_isym_id id
, enum class cl
, int actual_ok
, bt type
,
313 int kind
, int standard
,
315 gfc_expr
*(*simplify
) (void),
316 void (*resolve
) (gfc_expr
*))
326 add_sym (name
, id
, cl
, actual_ok
, type
, kind
, standard
, cf
, sf
, rf
,
331 /* Add a symbol to the subroutine list where the subroutine takes
335 add_sym_0s (const char *name
, gfc_isym_id id
, int standard
, void (*resolve
) (gfc_code
*))
345 add_sym (name
, id
, NO_CLASS
, ACTUAL_NO
, BT_UNKNOWN
, 0, standard
, cf
, sf
, rf
,
350 /* Add a symbol to the function list where the function takes
354 add_sym_1 (const char *name
, gfc_isym_id id
, enum class cl
, int actual_ok
, bt type
,
355 int kind
, int standard
,
356 try (*check
) (gfc_expr
*),
357 gfc_expr
*(*simplify
) (gfc_expr
*),
358 void (*resolve
) (gfc_expr
*, gfc_expr
*),
359 const char *a1
, bt type1
, int kind1
, int optional1
)
369 add_sym (name
, id
, cl
, actual_ok
, type
, kind
, standard
, cf
, sf
, rf
,
370 a1
, type1
, kind1
, optional1
,
375 /* Add a symbol to the subroutine list where the subroutine takes
379 add_sym_1s (const char *name
, gfc_isym_id id
, enum class cl
, bt type
, int kind
, int standard
,
380 try (*check
) (gfc_expr
*),
381 gfc_expr
*(*simplify
) (gfc_expr
*),
382 void (*resolve
) (gfc_code
*),
383 const char *a1
, bt type1
, int kind1
, int optional1
)
393 add_sym (name
, id
, cl
, ACTUAL_NO
, type
, kind
, standard
, cf
, sf
, rf
,
394 a1
, type1
, kind1
, optional1
,
399 /* Add a symbol from the MAX/MIN family of intrinsic functions to the
400 function. MAX et al take 2 or more arguments. */
403 add_sym_1m (const char *name
, gfc_isym_id id
, enum class cl
, int actual_ok
, bt type
,
404 int kind
, int standard
,
405 try (*check
) (gfc_actual_arglist
*),
406 gfc_expr
*(*simplify
) (gfc_expr
*),
407 void (*resolve
) (gfc_expr
*, gfc_actual_arglist
*),
408 const char *a1
, bt type1
, int kind1
, int optional1
,
409 const char *a2
, bt type2
, int kind2
, int optional2
)
419 add_sym (name
, id
, cl
, actual_ok
, type
, kind
, standard
, cf
, sf
, rf
,
420 a1
, type1
, kind1
, optional1
,
421 a2
, type2
, kind2
, optional2
,
426 /* Add a symbol to the function list where the function takes
430 add_sym_2 (const char *name
, gfc_isym_id id
, enum class cl
, int actual_ok
, bt type
,
431 int kind
, int standard
,
432 try (*check
) (gfc_expr
*, gfc_expr
*),
433 gfc_expr
*(*simplify
) (gfc_expr
*, gfc_expr
*),
434 void (*resolve
) (gfc_expr
*, gfc_expr
*, gfc_expr
*),
435 const char *a1
, bt type1
, int kind1
, int optional1
,
436 const char *a2
, bt type2
, int kind2
, int optional2
)
446 add_sym (name
, id
, cl
, actual_ok
, type
, kind
, standard
, cf
, sf
, rf
,
447 a1
, type1
, kind1
, optional1
,
448 a2
, type2
, kind2
, optional2
,
453 /* Add a symbol to the subroutine list where the subroutine takes
457 add_sym_2s (const char *name
, gfc_isym_id id
, enum class cl
, bt type
, int kind
, int standard
,
458 try (*check
) (gfc_expr
*, gfc_expr
*),
459 gfc_expr
*(*simplify
) (gfc_expr
*, gfc_expr
*),
460 void (*resolve
) (gfc_code
*),
461 const char *a1
, bt type1
, int kind1
, int optional1
,
462 const char *a2
, bt type2
, int kind2
, int optional2
)
472 add_sym (name
, id
, cl
, ACTUAL_NO
, type
, kind
, standard
, cf
, sf
, rf
,
473 a1
, type1
, kind1
, optional1
,
474 a2
, type2
, kind2
, optional2
,
479 /* Add a symbol to the function list where the function takes
483 add_sym_3 (const char *name
, gfc_isym_id id
, enum class cl
, int actual_ok
, bt type
,
484 int kind
, int standard
,
485 try (*check
) (gfc_expr
*, gfc_expr
*, gfc_expr
*),
486 gfc_expr
*(*simplify
) (gfc_expr
*, gfc_expr
*, gfc_expr
*),
487 void (*resolve
) (gfc_expr
*, gfc_expr
*, gfc_expr
*, gfc_expr
*),
488 const char *a1
, bt type1
, int kind1
, int optional1
,
489 const char *a2
, bt type2
, int kind2
, int optional2
,
490 const char *a3
, bt type3
, int kind3
, int optional3
)
500 add_sym (name
, id
, cl
, actual_ok
, type
, kind
, standard
, cf
, sf
, rf
,
501 a1
, type1
, kind1
, optional1
,
502 a2
, type2
, kind2
, optional2
,
503 a3
, type3
, kind3
, optional3
,
508 /* MINLOC and MAXLOC get special treatment because their argument
509 might have to be reordered. */
512 add_sym_3ml (const char *name
, gfc_isym_id id
, enum class cl
, int actual_ok
, bt type
,
513 int kind
, int standard
,
514 try (*check
) (gfc_actual_arglist
*),
515 gfc_expr
*(*simplify
) (gfc_expr
*, gfc_expr
*, gfc_expr
*),
516 void (*resolve
) (gfc_expr
*, gfc_expr
*, gfc_expr
*, gfc_expr
*),
517 const char *a1
, bt type1
, int kind1
, int optional1
,
518 const char *a2
, bt type2
, int kind2
, int optional2
,
519 const char *a3
, bt type3
, int kind3
, int optional3
)
529 add_sym (name
, id
, cl
, actual_ok
, type
, kind
, standard
, cf
, sf
, rf
,
530 a1
, type1
, kind1
, optional1
,
531 a2
, type2
, kind2
, optional2
,
532 a3
, type3
, kind3
, optional3
,
537 /* MINVAL, MAXVAL, PRODUCT, and SUM also get special treatment because
538 their argument also might have to be reordered. */
541 add_sym_3red (const char *name
, gfc_isym_id id
, enum class cl
, int actual_ok
, bt type
,
542 int kind
, int standard
,
543 try (*check
) (gfc_actual_arglist
*),
544 gfc_expr
*(*simplify
) (gfc_expr
*, gfc_expr
*, gfc_expr
*),
545 void (*resolve
) (gfc_expr
*, gfc_expr
*, gfc_expr
*, gfc_expr
*),
546 const char *a1
, bt type1
, int kind1
, int optional1
,
547 const char *a2
, bt type2
, int kind2
, int optional2
,
548 const char *a3
, bt type3
, int kind3
, int optional3
)
558 add_sym (name
, id
, cl
, actual_ok
, type
, kind
, standard
, cf
, sf
, rf
,
559 a1
, type1
, kind1
, optional1
,
560 a2
, type2
, kind2
, optional2
,
561 a3
, type3
, kind3
, optional3
,
566 /* Add a symbol to the subroutine list where the subroutine takes
570 add_sym_3s (const char *name
, gfc_isym_id id
, enum class cl
, bt type
, int kind
, int standard
,
571 try (*check
) (gfc_expr
*, gfc_expr
*, gfc_expr
*),
572 gfc_expr
*(*simplify
) (gfc_expr
*, gfc_expr
*, gfc_expr
*),
573 void (*resolve
) (gfc_code
*),
574 const char *a1
, bt type1
, int kind1
, int optional1
,
575 const char *a2
, bt type2
, int kind2
, int optional2
,
576 const char *a3
, bt type3
, int kind3
, int optional3
)
586 add_sym (name
, id
, cl
, ACTUAL_NO
, type
, kind
, standard
, cf
, sf
, rf
,
587 a1
, type1
, kind1
, optional1
,
588 a2
, type2
, kind2
, optional2
,
589 a3
, type3
, kind3
, optional3
,
594 /* Add a symbol to the function list where the function takes
598 add_sym_4 (const char *name
, gfc_isym_id id
, enum class cl
, int actual_ok
, bt type
,
599 int kind
, int standard
,
600 try (*check
) (gfc_expr
*, gfc_expr
*, gfc_expr
*, gfc_expr
*),
601 gfc_expr
*(*simplify
) (gfc_expr
*, gfc_expr
*, gfc_expr
*,
603 void (*resolve
) (gfc_expr
*, gfc_expr
*, gfc_expr
*, gfc_expr
*,
605 const char *a1
, bt type1
, int kind1
, int optional1
,
606 const char *a2
, bt type2
, int kind2
, int optional2
,
607 const char *a3
, bt type3
, int kind3
, int optional3
,
608 const char *a4
, bt type4
, int kind4
, int optional4
)
618 add_sym (name
, id
, cl
, actual_ok
, type
, kind
, standard
, cf
, sf
, rf
,
619 a1
, type1
, kind1
, optional1
,
620 a2
, type2
, kind2
, optional2
,
621 a3
, type3
, kind3
, optional3
,
622 a4
, type4
, kind4
, optional4
,
627 /* Add a symbol to the subroutine list where the subroutine takes
631 add_sym_4s (const char *name
, gfc_isym_id id
, enum class cl
, bt type
, int kind
, int standard
,
632 try (*check
) (gfc_expr
*, gfc_expr
*, gfc_expr
*, gfc_expr
*),
633 gfc_expr
*(*simplify
) (gfc_expr
*, gfc_expr
*, gfc_expr
*,
635 void (*resolve
) (gfc_code
*),
636 const char *a1
, bt type1
, int kind1
, int optional1
,
637 const char *a2
, bt type2
, int kind2
, int optional2
,
638 const char *a3
, bt type3
, int kind3
, int optional3
,
639 const char *a4
, bt type4
, int kind4
, int optional4
)
649 add_sym (name
, id
, cl
, ACTUAL_NO
, type
, kind
, standard
, cf
, sf
, rf
,
650 a1
, type1
, kind1
, optional1
,
651 a2
, type2
, kind2
, optional2
,
652 a3
, type3
, kind3
, optional3
,
653 a4
, type4
, kind4
, optional4
,
658 /* Add a symbol to the subroutine list where the subroutine takes
662 add_sym_5s (const char *name
, gfc_isym_id id
, enum class cl
, bt type
, int kind
, int standard
,
663 try (*check
) (gfc_expr
*, gfc_expr
*, gfc_expr
*, gfc_expr
*,
665 gfc_expr
*(*simplify
) (gfc_expr
*, gfc_expr
*, gfc_expr
*,
666 gfc_expr
*, gfc_expr
*),
667 void (*resolve
) (gfc_code
*),
668 const char *a1
, bt type1
, int kind1
, int optional1
,
669 const char *a2
, bt type2
, int kind2
, int optional2
,
670 const char *a3
, bt type3
, int kind3
, int optional3
,
671 const char *a4
, bt type4
, int kind4
, int optional4
,
672 const char *a5
, bt type5
, int kind5
, int optional5
)
682 add_sym (name
, id
, cl
, ACTUAL_NO
, type
, kind
, standard
, cf
, sf
, rf
,
683 a1
, type1
, kind1
, optional1
,
684 a2
, type2
, kind2
, optional2
,
685 a3
, type3
, kind3
, optional3
,
686 a4
, type4
, kind4
, optional4
,
687 a5
, type5
, kind5
, optional5
,
692 /* Locate an intrinsic symbol given a base pointer, number of elements
693 in the table and a pointer to a name. Returns the NULL pointer if
694 a name is not found. */
696 static gfc_intrinsic_sym
*
697 find_sym (gfc_intrinsic_sym
*start
, int n
, const char *name
)
699 /* name may be a user-supplied string, so we must first make sure
700 that we're comparing against a pointer into the global string
702 const char *p
= gfc_get_string (name
);
706 if (p
== start
->name
)
717 /* Given a name, find a function in the intrinsic function table.
718 Returns NULL if not found. */
721 gfc_find_function (const char *name
)
723 gfc_intrinsic_sym
*sym
;
725 sym
= find_sym (functions
, nfunc
, name
);
727 sym
= find_sym (conversion
, nconv
, name
);
733 /* Given a name, find a function in the intrinsic subroutine table.
734 Returns NULL if not found. */
737 gfc_find_subroutine (const char *name
)
739 return find_sym (subroutines
, nsub
, name
);
743 /* Given a string, figure out if it is the name of a generic intrinsic
747 gfc_generic_intrinsic (const char *name
)
749 gfc_intrinsic_sym
*sym
;
751 sym
= gfc_find_function (name
);
752 return (sym
== NULL
) ? 0 : sym
->generic
;
756 /* Given a string, figure out if it is the name of a specific
757 intrinsic function or not. */
760 gfc_specific_intrinsic (const char *name
)
762 gfc_intrinsic_sym
*sym
;
764 sym
= gfc_find_function (name
);
765 return (sym
== NULL
) ? 0 : sym
->specific
;
769 /* Given a string, figure out if it is the name of an intrinsic function
770 or subroutine allowed as an actual argument or not. */
772 gfc_intrinsic_actual_ok (const char *name
, const bool subroutine_flag
)
774 gfc_intrinsic_sym
*sym
;
776 /* Intrinsic subroutines are not allowed as actual arguments. */
781 sym
= gfc_find_function (name
);
782 return (sym
== NULL
) ? 0 : sym
->actual_ok
;
787 /* Given a string, figure out if it is the name of an intrinsic
788 subroutine or function. There are no generic intrinsic
789 subroutines, they are all specific. */
792 gfc_intrinsic_name (const char *name
, int subroutine_flag
)
794 return subroutine_flag
? gfc_find_subroutine (name
) != NULL
795 : gfc_find_function (name
) != NULL
;
799 /* Collect a set of intrinsic functions into a generic collection.
800 The first argument is the name of the generic function, which is
801 also the name of a specific function. The rest of the specifics
802 currently in the table are placed into the list of specific
803 functions associated with that generic.
806 FIXME: Remove the argument STANDARD if no regressions are
807 encountered. Change all callers (approx. 360).
811 make_generic (const char *name
, gfc_isym_id id
, int standard ATTRIBUTE_UNUSED
)
813 gfc_intrinsic_sym
*g
;
815 if (sizing
!= SZ_NOTHING
)
818 g
= gfc_find_function (name
);
820 gfc_internal_error ("make_generic(): Can't find generic symbol '%s'",
823 gcc_assert (g
->id
== id
);
827 if ((g
+ 1)->name
!= NULL
)
828 g
->specific_head
= g
+ 1;
831 while (g
->name
!= NULL
)
833 gcc_assert (g
->id
== id
);
845 /* Create a duplicate intrinsic function entry for the current
846 function, the only differences being the alternate name and
847 a different standard if necessary. Note that we use argument
848 lists more than once, but all argument lists are freed as a
852 make_alias (const char *name
, int standard
)
865 next_sym
[0] = next_sym
[-1];
866 next_sym
->name
= gfc_get_string (name
);
867 next_sym
->standard
= standard
;
877 /* Make the current subroutine noreturn. */
882 if (sizing
== SZ_NOTHING
)
883 next_sym
[-1].noreturn
= 1;
887 /* Add intrinsic functions. */
892 /* Argument names as in the standard (to be used as argument keywords). */
894 *a
= "a", *f
= "field", *pt
= "pointer", *tg
= "target",
895 *b
= "b", *m
= "matrix", *ma
= "matrix_a", *mb
= "matrix_b",
896 *c
= "c", *n
= "n", *ncopies
= "ncopies", *pos
= "pos", *bck
= "back",
897 *i
= "i", *v
= "vector", *va
= "vector_a", *vb
= "vector_b",
898 *j
= "j", *a1
= "a1", *fs
= "fsource", *ts
= "tsource",
899 *l
= "l", *a2
= "a2", *mo
= "mold", *ord
= "order",
900 *p
= "p", *ar
= "array", *shp
= "shape", *src
= "source",
901 *r
= "r", *bd
= "boundary", *pad
= "pad", *set
= "set",
902 *s
= "s", *dm
= "dim", *kind
= "kind", *msk
= "mask",
903 *x
= "x", *sh
= "shift", *stg
= "string", *ssg
= "substring",
904 *y
= "y", *sz
= "size", *sta
= "string_a", *stb
= "string_b",
905 *z
= "z", *ln
= "len", *ut
= "unit", *han
= "handler",
906 *num
= "number", *tm
= "time", *nm
= "name", *md
= "mode";
908 int di
, dr
, dd
, dl
, dc
, dz
, ii
;
910 di
= gfc_default_integer_kind
;
911 dr
= gfc_default_real_kind
;
912 dd
= gfc_default_double_kind
;
913 dl
= gfc_default_logical_kind
;
914 dc
= gfc_default_character_kind
;
915 dz
= gfc_default_complex_kind
;
916 ii
= gfc_index_integer_kind
;
918 add_sym_1 ("abs", GFC_ISYM_ABS
, CLASS_ELEMENTAL
, ACTUAL_YES
, BT_REAL
, dr
, GFC_STD_F77
,
919 gfc_check_abs
, gfc_simplify_abs
, gfc_resolve_abs
,
920 a
, BT_REAL
, dr
, REQUIRED
);
922 add_sym_1 ("iabs", GFC_ISYM_ABS
, CLASS_ELEMENTAL
, ACTUAL_YES
, BT_INTEGER
, di
, GFC_STD_F77
,
923 NULL
, gfc_simplify_abs
, gfc_resolve_abs
,
924 a
, BT_INTEGER
, di
, REQUIRED
);
926 add_sym_1 ("dabs", GFC_ISYM_ABS
, CLASS_ELEMENTAL
, ACTUAL_YES
, BT_REAL
, dd
, GFC_STD_F77
,
927 NULL
, gfc_simplify_abs
, gfc_resolve_abs
,
928 a
, BT_REAL
, dd
, REQUIRED
);
930 add_sym_1 ("cabs", GFC_ISYM_ABS
, CLASS_ELEMENTAL
, ACTUAL_YES
, BT_REAL
, dr
, GFC_STD_F77
,
931 NULL
, gfc_simplify_abs
, gfc_resolve_abs
,
932 a
, BT_COMPLEX
, dz
, REQUIRED
);
934 add_sym_1 ("zabs", GFC_ISYM_ABS
, CLASS_ELEMENTAL
, ACTUAL_YES
, BT_REAL
, dd
, GFC_STD_GNU
,
935 NULL
, gfc_simplify_abs
, gfc_resolve_abs
,
936 a
, BT_COMPLEX
, dd
, REQUIRED
);
938 make_alias ("cdabs", GFC_STD_GNU
);
940 make_generic ("abs", GFC_ISYM_ABS
, GFC_STD_F77
);
942 /* The checking function for ACCESS is called gfc_check_access_func
943 because the name gfc_check_access is already used in module.c. */
944 add_sym_2 ("access", GFC_ISYM_ACCESS
, NO_CLASS
, ACTUAL_NO
, BT_INTEGER
, di
, GFC_STD_GNU
,
945 gfc_check_access_func
, NULL
, gfc_resolve_access
,
946 nm
, BT_CHARACTER
, dc
, REQUIRED
, md
, BT_CHARACTER
, dc
, REQUIRED
);
948 make_generic ("access", GFC_ISYM_ACCESS
, GFC_STD_GNU
);
950 add_sym_1 ("achar", GFC_ISYM_ACHAR
, CLASS_ELEMENTAL
, ACTUAL_NO
, BT_CHARACTER
, dc
, GFC_STD_F95
,
951 gfc_check_achar
, gfc_simplify_achar
, gfc_resolve_achar
,
952 i
, BT_INTEGER
, di
, REQUIRED
);
954 make_generic ("achar", GFC_ISYM_ACHAR
, GFC_STD_F95
);
956 add_sym_1 ("acos", GFC_ISYM_ACOS
, CLASS_ELEMENTAL
, ACTUAL_YES
, BT_REAL
, dr
, GFC_STD_F77
,
957 gfc_check_fn_r
, gfc_simplify_acos
, gfc_resolve_acos
,
958 x
, BT_REAL
, dr
, REQUIRED
);
960 add_sym_1 ("dacos", GFC_ISYM_ACOS
, CLASS_ELEMENTAL
, ACTUAL_YES
, BT_REAL
, dd
, GFC_STD_F77
,
961 NULL
, gfc_simplify_acos
, gfc_resolve_acos
,
962 x
, BT_REAL
, dd
, REQUIRED
);
964 make_generic ("acos", GFC_ISYM_ACOS
, GFC_STD_F77
);
966 add_sym_1 ("acosh", GFC_ISYM_ACOSH
, CLASS_ELEMENTAL
, ACTUAL_YES
, BT_REAL
, dr
, GFC_STD_GNU
,
967 gfc_check_fn_r
, gfc_simplify_acosh
, gfc_resolve_acosh
,
968 x
, BT_REAL
, dr
, REQUIRED
);
970 add_sym_1 ("dacosh", GFC_ISYM_ACOSH
, CLASS_ELEMENTAL
, ACTUAL_YES
, BT_REAL
, dd
, GFC_STD_GNU
,
971 NULL
, gfc_simplify_acosh
, gfc_resolve_acosh
,
972 x
, BT_REAL
, dd
, REQUIRED
);
974 make_generic ("acosh", GFC_ISYM_ACOSH
, GFC_STD_GNU
);
976 add_sym_1 ("adjustl", GFC_ISYM_ADJUSTL
, CLASS_ELEMENTAL
, ACTUAL_NO
, BT_CHARACTER
, dc
, GFC_STD_F95
,
977 NULL
, gfc_simplify_adjustl
, NULL
,
978 stg
, BT_CHARACTER
, dc
, REQUIRED
);
980 make_generic ("adjustl", GFC_ISYM_ADJUSTL
, GFC_STD_F95
);
982 add_sym_1 ("adjustr", GFC_ISYM_ADJUSTR
, CLASS_ELEMENTAL
, ACTUAL_NO
, BT_CHARACTER
, dc
, GFC_STD_F95
,
983 NULL
, gfc_simplify_adjustr
, NULL
,
984 stg
, BT_CHARACTER
, dc
, REQUIRED
);
986 make_generic ("adjustr", GFC_ISYM_ADJUSTR
, GFC_STD_F95
);
988 add_sym_1 ("aimag", GFC_ISYM_AIMAG
, CLASS_ELEMENTAL
, ACTUAL_YES
, BT_REAL
, dr
, GFC_STD_F77
,
989 gfc_check_fn_c
, gfc_simplify_aimag
, gfc_resolve_aimag
,
990 z
, BT_COMPLEX
, dz
, REQUIRED
);
992 make_alias ("imag", GFC_STD_GNU
);
993 make_alias ("imagpart", GFC_STD_GNU
);
995 add_sym_1 ("dimag", GFC_ISYM_AIMAG
, CLASS_ELEMENTAL
, ACTUAL_YES
, BT_REAL
, dd
, GFC_STD_GNU
,
996 NULL
, gfc_simplify_aimag
, gfc_resolve_aimag
,
997 z
, BT_COMPLEX
, dd
, REQUIRED
);
999 make_generic ("aimag", GFC_ISYM_AIMAG
, GFC_STD_F77
);
1001 add_sym_2 ("aint", GFC_ISYM_AINT
, CLASS_ELEMENTAL
, ACTUAL_YES
, BT_REAL
, dr
, GFC_STD_F77
,
1002 gfc_check_a_xkind
, gfc_simplify_aint
, gfc_resolve_aint
,
1003 a
, BT_REAL
, dr
, REQUIRED
, kind
, BT_INTEGER
, di
, OPTIONAL
);
1005 add_sym_1 ("dint", GFC_ISYM_AINT
, CLASS_ELEMENTAL
, ACTUAL_YES
, BT_REAL
, dd
, GFC_STD_F77
,
1006 NULL
, gfc_simplify_dint
, gfc_resolve_dint
,
1007 a
, BT_REAL
, dd
, REQUIRED
);
1009 make_generic ("aint", GFC_ISYM_AINT
, GFC_STD_F77
);
1011 add_sym_2 ("all", GFC_ISYM_ALL
, CLASS_TRANSFORMATIONAL
, ACTUAL_NO
, BT_LOGICAL
, dl
, GFC_STD_F95
,
1012 gfc_check_all_any
, NULL
, gfc_resolve_all
,
1013 msk
, BT_LOGICAL
, dl
, REQUIRED
, dm
, BT_INTEGER
, ii
, OPTIONAL
);
1015 make_generic ("all", GFC_ISYM_ALL
, GFC_STD_F95
);
1017 add_sym_1 ("allocated", GFC_ISYM_ALLOCATED
, CLASS_INQUIRY
, ACTUAL_NO
, BT_LOGICAL
, dl
, GFC_STD_F95
,
1018 gfc_check_allocated
, NULL
, NULL
,
1019 ar
, BT_UNKNOWN
, 0, REQUIRED
);
1021 make_generic ("allocated", GFC_ISYM_ALLOCATED
, GFC_STD_F95
);
1023 add_sym_2 ("anint", GFC_ISYM_ANINT
, CLASS_ELEMENTAL
, ACTUAL_YES
, BT_REAL
, dr
, GFC_STD_F77
,
1024 gfc_check_a_xkind
, gfc_simplify_anint
, gfc_resolve_anint
,
1025 a
, BT_REAL
, dr
, REQUIRED
, kind
, BT_INTEGER
, di
, OPTIONAL
);
1027 add_sym_1 ("dnint", GFC_ISYM_ANINT
, CLASS_ELEMENTAL
, ACTUAL_YES
, BT_REAL
, dd
, GFC_STD_F77
,
1028 NULL
, gfc_simplify_dnint
, gfc_resolve_dnint
,
1029 a
, BT_REAL
, dd
, REQUIRED
);
1031 make_generic ("anint", GFC_ISYM_ANINT
, GFC_STD_F77
);
1033 add_sym_2 ("any", GFC_ISYM_ANY
, CLASS_TRANSFORMATIONAL
, ACTUAL_NO
, BT_LOGICAL
, dl
, GFC_STD_F95
,
1034 gfc_check_all_any
, NULL
, gfc_resolve_any
,
1035 msk
, BT_LOGICAL
, dl
, REQUIRED
, dm
, BT_INTEGER
, ii
, OPTIONAL
);
1037 make_generic ("any", GFC_ISYM_ANY
, GFC_STD_F95
);
1039 add_sym_1 ("asin", GFC_ISYM_ASIN
, CLASS_ELEMENTAL
, ACTUAL_YES
, BT_REAL
, dr
, GFC_STD_F77
,
1040 gfc_check_fn_r
, gfc_simplify_asin
, gfc_resolve_asin
,
1041 x
, BT_REAL
, dr
, REQUIRED
);
1043 add_sym_1 ("dasin", GFC_ISYM_ASIN
, CLASS_ELEMENTAL
, ACTUAL_YES
, BT_REAL
, dd
, GFC_STD_F77
,
1044 NULL
, gfc_simplify_asin
, gfc_resolve_asin
,
1045 x
, BT_REAL
, dd
, REQUIRED
);
1047 make_generic ("asin", GFC_ISYM_ASIN
, GFC_STD_F77
);
1049 add_sym_1 ("asinh", GFC_ISYM_ASINH
, CLASS_ELEMENTAL
, ACTUAL_YES
, BT_REAL
, dr
, GFC_STD_GNU
,
1050 gfc_check_fn_r
, gfc_simplify_asinh
, gfc_resolve_asinh
,
1051 x
, BT_REAL
, dr
, REQUIRED
);
1053 add_sym_1 ("dasinh", GFC_ISYM_ASINH
, CLASS_ELEMENTAL
, ACTUAL_YES
, BT_REAL
, dd
, GFC_STD_GNU
,
1054 NULL
, gfc_simplify_asinh
, gfc_resolve_asinh
,
1055 x
, BT_REAL
, dd
, REQUIRED
);
1057 make_generic ("asinh", GFC_ISYM_ASINH
, GFC_STD_GNU
);
1059 add_sym_2 ("associated", GFC_ISYM_ASSOCIATED
, CLASS_INQUIRY
, ACTUAL_NO
, BT_LOGICAL
, dl
,
1060 GFC_STD_F95
, gfc_check_associated
, NULL
, NULL
,
1061 pt
, BT_UNKNOWN
, 0, REQUIRED
, tg
, BT_UNKNOWN
, 0, OPTIONAL
);
1063 make_generic ("associated", GFC_ISYM_ASSOCIATED
, GFC_STD_F95
);
1065 add_sym_1 ("atan", GFC_ISYM_ATAN
, CLASS_ELEMENTAL
, ACTUAL_YES
, BT_REAL
, dr
, GFC_STD_F77
,
1066 gfc_check_fn_r
, gfc_simplify_atan
, gfc_resolve_atan
,
1067 x
, BT_REAL
, dr
, REQUIRED
);
1069 add_sym_1 ("datan", GFC_ISYM_ATAN
, CLASS_ELEMENTAL
, ACTUAL_YES
, BT_REAL
, dd
, GFC_STD_F77
,
1070 NULL
, gfc_simplify_atan
, gfc_resolve_atan
,
1071 x
, BT_REAL
, dd
, REQUIRED
);
1073 make_generic ("atan", GFC_ISYM_ATAN
, GFC_STD_F77
);
1075 add_sym_1 ("atanh", GFC_ISYM_ATANH
, CLASS_ELEMENTAL
, ACTUAL_YES
, BT_REAL
, dr
, GFC_STD_GNU
,
1076 gfc_check_fn_r
, gfc_simplify_atanh
, gfc_resolve_atanh
,
1077 x
, BT_REAL
, dr
, REQUIRED
);
1079 add_sym_1 ("datanh", GFC_ISYM_ATANH
, CLASS_ELEMENTAL
, ACTUAL_YES
, BT_REAL
, dd
, GFC_STD_GNU
,
1080 NULL
, gfc_simplify_atanh
, gfc_resolve_atanh
,
1081 x
, BT_REAL
, dd
, REQUIRED
);
1083 make_generic ("atanh", GFC_ISYM_ATANH
, GFC_STD_GNU
);
1085 add_sym_2 ("atan2", GFC_ISYM_ATAN2
, CLASS_ELEMENTAL
, ACTUAL_YES
, BT_REAL
, dr
, GFC_STD_F77
,
1086 gfc_check_atan2
, gfc_simplify_atan2
, gfc_resolve_atan2
,
1087 y
, BT_REAL
, dr
, REQUIRED
, x
, BT_REAL
, dr
, REQUIRED
);
1089 add_sym_2 ("datan2", GFC_ISYM_ATAN2
, CLASS_ELEMENTAL
, ACTUAL_YES
, BT_REAL
, dd
, GFC_STD_F77
,
1090 NULL
, gfc_simplify_atan2
, gfc_resolve_atan2
,
1091 y
, BT_REAL
, dd
, REQUIRED
, x
, BT_REAL
, dd
, REQUIRED
);
1093 make_generic ("atan2", GFC_ISYM_ATAN2
, GFC_STD_F77
);
1095 /* Bessel and Neumann functions for G77 compatibility. */
1096 add_sym_1 ("besj0", GFC_ISYM_J0
, CLASS_ELEMENTAL
, ACTUAL_NO
, BT_REAL
, dr
, GFC_STD_GNU
,
1097 gfc_check_fn_r
, NULL
, gfc_resolve_g77_math1
,
1098 x
, BT_REAL
, dr
, REQUIRED
);
1100 add_sym_1 ("dbesj0", GFC_ISYM_J0
, CLASS_ELEMENTAL
, ACTUAL_NO
, BT_REAL
, dd
, GFC_STD_GNU
,
1101 gfc_check_fn_r
, NULL
, gfc_resolve_g77_math1
,
1102 x
, BT_REAL
, dd
, REQUIRED
);
1104 make_generic ("besj0", GFC_ISYM_J0
, GFC_STD_GNU
);
1106 add_sym_1 ("besj1", GFC_ISYM_J1
, CLASS_ELEMENTAL
, ACTUAL_NO
, BT_REAL
, dr
, GFC_STD_GNU
,
1107 gfc_check_fn_r
, NULL
, gfc_resolve_g77_math1
,
1108 x
, BT_REAL
, dr
, REQUIRED
);
1110 add_sym_1 ("dbesj1", GFC_ISYM_J1
, CLASS_ELEMENTAL
, ACTUAL_NO
, BT_REAL
, dd
, GFC_STD_GNU
,
1111 gfc_check_fn_r
, NULL
, gfc_resolve_g77_math1
,
1112 x
, BT_REAL
, dd
, REQUIRED
);
1114 make_generic ("besj1", GFC_ISYM_J1
, GFC_STD_GNU
);
1116 add_sym_2 ("besjn", GFC_ISYM_JN
, CLASS_ELEMENTAL
, ACTUAL_NO
, BT_REAL
, dr
, GFC_STD_GNU
,
1117 gfc_check_besn
, NULL
, gfc_resolve_besn
,
1118 n
, BT_INTEGER
, di
, REQUIRED
, x
, BT_REAL
, dr
, REQUIRED
);
1120 add_sym_2 ("dbesjn", GFC_ISYM_JN
, CLASS_ELEMENTAL
, ACTUAL_NO
, BT_REAL
, dd
, GFC_STD_GNU
,
1121 gfc_check_besn
, NULL
, gfc_resolve_besn
,
1122 n
, BT_INTEGER
, di
, REQUIRED
, x
, BT_REAL
, dd
, REQUIRED
);
1124 make_generic ("besjn", GFC_ISYM_JN
, GFC_STD_GNU
);
1126 add_sym_1 ("besy0", GFC_ISYM_Y0
, CLASS_ELEMENTAL
, ACTUAL_NO
, BT_REAL
, dr
, GFC_STD_GNU
,
1127 gfc_check_fn_r
, NULL
, gfc_resolve_g77_math1
,
1128 x
, BT_REAL
, dr
, REQUIRED
);
1130 add_sym_1 ("dbesy0", GFC_ISYM_Y0
, CLASS_ELEMENTAL
, ACTUAL_NO
, BT_REAL
, dd
, GFC_STD_GNU
,
1131 gfc_check_fn_r
, NULL
, gfc_resolve_g77_math1
,
1132 x
, BT_REAL
, dd
, REQUIRED
);
1134 make_generic ("besy0", GFC_ISYM_Y0
, GFC_STD_GNU
);
1136 add_sym_1 ("besy1", GFC_ISYM_Y1
, CLASS_ELEMENTAL
, ACTUAL_NO
, BT_REAL
, dr
, GFC_STD_GNU
,
1137 gfc_check_fn_r
, NULL
, gfc_resolve_g77_math1
,
1138 x
, BT_REAL
, dr
, REQUIRED
);
1140 add_sym_1 ("dbesy1", GFC_ISYM_Y1
, CLASS_ELEMENTAL
, ACTUAL_NO
, BT_REAL
, dd
, GFC_STD_GNU
,
1141 gfc_check_fn_r
, NULL
, gfc_resolve_g77_math1
,
1142 x
, BT_REAL
, dd
, REQUIRED
);
1144 make_generic ("besy1", GFC_ISYM_Y1
, GFC_STD_GNU
);
1146 add_sym_2 ("besyn", GFC_ISYM_YN
, CLASS_ELEMENTAL
, ACTUAL_NO
, BT_REAL
, dr
, GFC_STD_GNU
,
1147 gfc_check_besn
, NULL
, gfc_resolve_besn
,
1148 n
, BT_INTEGER
, di
, REQUIRED
, x
, BT_REAL
, dr
, REQUIRED
);
1150 add_sym_2 ("dbesyn", GFC_ISYM_YN
, CLASS_ELEMENTAL
, ACTUAL_NO
, BT_REAL
, dd
, GFC_STD_GNU
,
1151 gfc_check_besn
, NULL
, gfc_resolve_besn
,
1152 n
, BT_INTEGER
, di
, REQUIRED
, x
, BT_REAL
, dd
, REQUIRED
);
1154 make_generic ("besyn", GFC_ISYM_YN
, GFC_STD_GNU
);
1156 add_sym_1 ("bit_size", GFC_ISYM_BIT_SIZE
, CLASS_INQUIRY
, ACTUAL_NO
, BT_INTEGER
, di
, GFC_STD_F95
,
1157 gfc_check_i
, gfc_simplify_bit_size
, NULL
,
1158 i
, BT_INTEGER
, di
, REQUIRED
);
1160 make_generic ("bit_size", GFC_ISYM_BIT_SIZE
, GFC_STD_F95
);
1162 add_sym_2 ("btest", GFC_ISYM_BTEST
, CLASS_ELEMENTAL
, ACTUAL_NO
, BT_LOGICAL
, dl
, GFC_STD_F95
,
1163 gfc_check_btest
, gfc_simplify_btest
, gfc_resolve_btest
,
1164 i
, BT_INTEGER
, di
, REQUIRED
, pos
, BT_INTEGER
, di
, REQUIRED
);
1166 make_generic ("btest", GFC_ISYM_BTEST
, GFC_STD_F95
);
1168 add_sym_2 ("ceiling", GFC_ISYM_CEILING
, CLASS_ELEMENTAL
, ACTUAL_NO
, BT_INTEGER
, di
, GFC_STD_F95
,
1169 gfc_check_a_ikind
, gfc_simplify_ceiling
, gfc_resolve_ceiling
,
1170 a
, BT_REAL
, dr
, REQUIRED
, kind
, BT_INTEGER
, di
, OPTIONAL
);
1172 make_generic ("ceiling", GFC_ISYM_CEILING
, GFC_STD_F95
);
1174 add_sym_2 ("char", GFC_ISYM_CHAR
, CLASS_ELEMENTAL
, ACTUAL_NO
, BT_CHARACTER
, dc
, GFC_STD_F77
,
1175 gfc_check_char
, gfc_simplify_char
, gfc_resolve_char
,
1176 i
, BT_INTEGER
, di
, REQUIRED
, kind
, BT_INTEGER
, di
, OPTIONAL
);
1178 make_generic ("char", GFC_ISYM_CHAR
, GFC_STD_F77
);
1180 add_sym_1 ("chdir", GFC_ISYM_CHDIR
, NO_CLASS
, ACTUAL_NO
, BT_INTEGER
, di
, GFC_STD_GNU
,
1181 gfc_check_chdir
, NULL
, gfc_resolve_chdir
,
1182 a
, BT_CHARACTER
, dc
, REQUIRED
);
1184 make_generic ("chdir", GFC_ISYM_CHDIR
, GFC_STD_GNU
);
1186 add_sym_2 ("chmod", GFC_ISYM_CHMOD
, NO_CLASS
, ACTUAL_NO
, BT_INTEGER
, di
, GFC_STD_GNU
,
1187 gfc_check_chmod
, NULL
, gfc_resolve_chmod
,
1188 nm
, BT_CHARACTER
, dc
, REQUIRED
, md
, BT_CHARACTER
, dc
, REQUIRED
);
1190 make_generic ("chmod", GFC_ISYM_CHMOD
, GFC_STD_GNU
);
1192 add_sym_3 ("cmplx", GFC_ISYM_CMPLX
, CLASS_ELEMENTAL
, ACTUAL_NO
, BT_COMPLEX
, dz
, GFC_STD_F77
,
1193 gfc_check_cmplx
, gfc_simplify_cmplx
, gfc_resolve_cmplx
,
1194 x
, BT_UNKNOWN
, dr
, REQUIRED
, y
, BT_UNKNOWN
, dr
, OPTIONAL
,
1195 kind
, BT_INTEGER
, di
, OPTIONAL
);
1197 make_generic ("cmplx", GFC_ISYM_CMPLX
, GFC_STD_F77
);
1199 add_sym_0 ("command_argument_count", GFC_ISYM_COMMAND_ARGUMENT_COUNT
, CLASS_INQUIRY
,
1200 ACTUAL_NO
, BT_INTEGER
, di
, GFC_STD_F2003
, NULL
, NULL
, NULL
);
1202 make_generic ("command_argument_count", GFC_ISYM_COMMAND_ARGUMENT_COUNT
,
1205 add_sym_2 ("complex", GFC_ISYM_COMPLEX
, CLASS_ELEMENTAL
, ACTUAL_NO
, BT_COMPLEX
, dz
, GFC_STD_GNU
,
1206 gfc_check_complex
, gfc_simplify_complex
, gfc_resolve_complex
,
1207 x
, BT_UNKNOWN
, dr
, REQUIRED
, y
, BT_UNKNOWN
, dr
, REQUIRED
);
1209 make_generic ("complex", GFC_ISYM_COMPLEX
, GFC_STD_GNU
);
1211 /* Making dcmplx a specific of cmplx causes cmplx to return a double
1212 complex instead of the default complex. */
1214 add_sym_2 ("dcmplx", GFC_ISYM_CMPLX
, CLASS_ELEMENTAL
, ACTUAL_NO
, BT_COMPLEX
, dd
, GFC_STD_GNU
,
1215 gfc_check_dcmplx
, gfc_simplify_dcmplx
, gfc_resolve_dcmplx
,
1216 x
, BT_REAL
, dd
, REQUIRED
, y
, BT_REAL
, dd
, OPTIONAL
);
1218 make_generic ("dcmplx", GFC_ISYM_CMPLX
, GFC_STD_GNU
);
1220 add_sym_1 ("conjg", GFC_ISYM_CONJG
, CLASS_ELEMENTAL
, ACTUAL_YES
, BT_COMPLEX
, dz
, GFC_STD_F77
,
1221 gfc_check_fn_c
, gfc_simplify_conjg
, gfc_resolve_conjg
,
1222 z
, BT_COMPLEX
, dz
, REQUIRED
);
1224 add_sym_1 ("dconjg", GFC_ISYM_CONJG
, CLASS_ELEMENTAL
, ACTUAL_YES
, BT_COMPLEX
, dd
, GFC_STD_GNU
,
1225 NULL
, gfc_simplify_conjg
, gfc_resolve_conjg
,
1226 z
, BT_COMPLEX
, dd
, REQUIRED
);
1228 make_generic ("conjg", GFC_ISYM_CONJG
, GFC_STD_F77
);
1230 add_sym_1 ("cos", GFC_ISYM_COS
, CLASS_ELEMENTAL
, ACTUAL_YES
, BT_REAL
, dr
, GFC_STD_F77
,
1231 gfc_check_fn_rc
, gfc_simplify_cos
, gfc_resolve_cos
,
1232 x
, BT_REAL
, dr
, REQUIRED
);
1234 add_sym_1 ("dcos", GFC_ISYM_COS
, CLASS_ELEMENTAL
, ACTUAL_YES
, BT_REAL
, dd
, GFC_STD_F77
,
1235 gfc_check_fn_rc
, gfc_simplify_cos
, gfc_resolve_cos
,
1236 x
, BT_REAL
, dd
, REQUIRED
);
1238 add_sym_1 ("ccos", GFC_ISYM_COS
, CLASS_ELEMENTAL
, ACTUAL_YES
, BT_COMPLEX
, dz
, GFC_STD_F77
,
1239 NULL
, gfc_simplify_cos
, gfc_resolve_cos
,
1240 x
, BT_COMPLEX
, dz
, REQUIRED
);
1242 add_sym_1 ("zcos", GFC_ISYM_COS
, CLASS_ELEMENTAL
, ACTUAL_YES
, BT_COMPLEX
, dd
, GFC_STD_GNU
,
1243 NULL
, gfc_simplify_cos
, gfc_resolve_cos
,
1244 x
, BT_COMPLEX
, dd
, REQUIRED
);
1246 make_alias ("cdcos", GFC_STD_GNU
);
1248 make_generic ("cos", GFC_ISYM_COS
, GFC_STD_F77
);
1250 add_sym_1 ("cosh", GFC_ISYM_COSH
, CLASS_ELEMENTAL
, ACTUAL_YES
, BT_REAL
, dr
, GFC_STD_F77
,
1251 gfc_check_fn_r
, gfc_simplify_cosh
, gfc_resolve_cosh
,
1252 x
, BT_REAL
, dr
, REQUIRED
);
1254 add_sym_1 ("dcosh", GFC_ISYM_COSH
, CLASS_ELEMENTAL
, ACTUAL_YES
, BT_REAL
, dd
, GFC_STD_F77
,
1255 NULL
, gfc_simplify_cosh
, gfc_resolve_cosh
,
1256 x
, BT_REAL
, dd
, REQUIRED
);
1258 make_generic ("cosh", GFC_ISYM_COSH
, GFC_STD_F77
);
1260 add_sym_2 ("count", GFC_ISYM_COUNT
, CLASS_TRANSFORMATIONAL
, ACTUAL_NO
, 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
);
1264 make_generic ("count", GFC_ISYM_COUNT
, GFC_STD_F95
);
1266 add_sym_3 ("cshift", GFC_ISYM_CSHIFT
, CLASS_TRANSFORMATIONAL
, ACTUAL_NO
, BT_REAL
, dr
, GFC_STD_F95
,
1267 gfc_check_cshift
, NULL
, gfc_resolve_cshift
,
1268 ar
, BT_REAL
, dr
, REQUIRED
, sh
, BT_INTEGER
, di
, REQUIRED
,
1269 dm
, BT_INTEGER
, ii
, OPTIONAL
);
1271 make_generic ("cshift", GFC_ISYM_CSHIFT
, GFC_STD_F95
);
1273 add_sym_1 ("ctime", GFC_ISYM_CTIME
, NO_CLASS
, ACTUAL_NO
, BT_CHARACTER
, 0, GFC_STD_GNU
,
1274 gfc_check_ctime
, NULL
, gfc_resolve_ctime
,
1275 tm
, BT_INTEGER
, di
, REQUIRED
);
1277 make_generic ("ctime", GFC_ISYM_CTIME
, GFC_STD_GNU
);
1279 add_sym_1 ("dble", GFC_ISYM_DBLE
, CLASS_ELEMENTAL
, ACTUAL_NO
, BT_REAL
, dd
, GFC_STD_F77
,
1280 gfc_check_dble
, gfc_simplify_dble
, gfc_resolve_dble
,
1281 a
, BT_REAL
, dr
, REQUIRED
);
1283 make_alias ("dfloat", GFC_STD_GNU
);
1285 make_generic ("dble", GFC_ISYM_DBLE
, GFC_STD_F77
);
1287 add_sym_1 ("digits", GFC_ISYM_DIGITS
, CLASS_INQUIRY
, ACTUAL_NO
, BT_INTEGER
, di
, GFC_STD_F95
,
1288 gfc_check_digits
, gfc_simplify_digits
, NULL
,
1289 x
, BT_UNKNOWN
, dr
, REQUIRED
);
1291 make_generic ("digits", GFC_ISYM_DIGITS
, GFC_STD_F95
);
1293 add_sym_2 ("dim", GFC_ISYM_DIM
, CLASS_ELEMENTAL
, ACTUAL_YES
, BT_REAL
, dr
, GFC_STD_F77
,
1294 gfc_check_a_p
, gfc_simplify_dim
, gfc_resolve_dim
,
1295 x
, BT_REAL
, dr
, REQUIRED
, y
, BT_UNKNOWN
, dr
, REQUIRED
);
1297 add_sym_2 ("idim", GFC_ISYM_DIM
, CLASS_ELEMENTAL
, ACTUAL_YES
, BT_INTEGER
, di
, GFC_STD_F77
,
1298 NULL
, gfc_simplify_dim
, gfc_resolve_dim
,
1299 x
, BT_INTEGER
, di
, REQUIRED
, y
, BT_INTEGER
, di
, REQUIRED
);
1301 add_sym_2 ("ddim", GFC_ISYM_DIM
, CLASS_ELEMENTAL
, ACTUAL_YES
, BT_REAL
, dd
, GFC_STD_F77
,
1302 NULL
, gfc_simplify_dim
, gfc_resolve_dim
,
1303 x
, BT_REAL
, dd
, REQUIRED
, y
, BT_REAL
, dd
, REQUIRED
);
1305 make_generic ("dim", GFC_ISYM_DIM
, GFC_STD_F77
);
1307 add_sym_2 ("dot_product", GFC_ISYM_DOT_PRODUCT
, CLASS_TRANSFORMATIONAL
, ACTUAL_NO
, BT_REAL
, dr
,
1308 GFC_STD_F95
, gfc_check_dot_product
, NULL
, gfc_resolve_dot_product
,
1309 va
, BT_REAL
, dr
, REQUIRED
, vb
, BT_REAL
, dr
, REQUIRED
);
1311 make_generic ("dot_product", GFC_ISYM_DOT_PRODUCT
, GFC_STD_F95
);
1313 add_sym_2 ("dprod", GFC_ISYM_DPROD
,CLASS_ELEMENTAL
, ACTUAL_YES
, BT_REAL
, dd
, GFC_STD_F77
,
1314 NULL
, gfc_simplify_dprod
, gfc_resolve_dprod
,
1315 x
, BT_REAL
, dr
, REQUIRED
, y
, BT_REAL
, dr
, REQUIRED
);
1317 make_generic ("dprod", GFC_ISYM_DPROD
, GFC_STD_F77
);
1319 add_sym_1 ("dreal", GFC_ISYM_REAL
, CLASS_ELEMENTAL
, ACTUAL_NO
, BT_REAL
, dd
, GFC_STD_GNU
,
1321 a
, BT_COMPLEX
, dd
, REQUIRED
);
1323 make_generic ("dreal", GFC_ISYM_REAL
, GFC_STD_GNU
);
1325 add_sym_4 ("eoshift", GFC_ISYM_EOSHIFT
, CLASS_TRANSFORMATIONAL
, ACTUAL_NO
, BT_REAL
, dr
, GFC_STD_F95
,
1326 gfc_check_eoshift
, NULL
, gfc_resolve_eoshift
,
1327 ar
, BT_REAL
, dr
, 0, sh
, BT_INTEGER
, ii
, REQUIRED
,
1328 bd
, BT_REAL
, dr
, 1, dm
, BT_INTEGER
, ii
, OPTIONAL
);
1330 make_generic ("eoshift", GFC_ISYM_EOSHIFT
, GFC_STD_F95
);
1332 add_sym_1 ("epsilon", GFC_ISYM_EPSILON
, CLASS_INQUIRY
, ACTUAL_NO
, BT_REAL
, dr
, GFC_STD_F95
,
1333 gfc_check_x
, gfc_simplify_epsilon
, NULL
,
1334 x
, BT_REAL
, dr
, REQUIRED
);
1336 make_generic ("epsilon", GFC_ISYM_EPSILON
, GFC_STD_F95
);
1338 /* G77 compatibility for the ERF() and ERFC() functions. */
1339 add_sym_1 ("erf", GFC_ISYM_ERF
, CLASS_ELEMENTAL
, ACTUAL_NO
, BT_REAL
, dr
, GFC_STD_GNU
,
1340 gfc_check_fn_r
, NULL
, gfc_resolve_g77_math1
,
1341 x
, BT_REAL
, dr
, REQUIRED
);
1343 add_sym_1 ("derf", GFC_ISYM_ERF
, CLASS_ELEMENTAL
, ACTUAL_NO
, BT_REAL
, dd
, GFC_STD_GNU
,
1344 gfc_check_fn_r
, NULL
, gfc_resolve_g77_math1
,
1345 x
, BT_REAL
, dd
, REQUIRED
);
1347 make_generic ("erf", GFC_ISYM_ERF
, GFC_STD_GNU
);
1349 add_sym_1 ("erfc", GFC_ISYM_ERFC
, CLASS_ELEMENTAL
, ACTUAL_NO
, BT_REAL
, dr
, GFC_STD_GNU
,
1350 gfc_check_fn_r
, NULL
, gfc_resolve_g77_math1
,
1351 x
, BT_REAL
, dr
, REQUIRED
);
1353 add_sym_1 ("derfc", GFC_ISYM_ERFC
, CLASS_ELEMENTAL
, ACTUAL_NO
, BT_REAL
, dd
, GFC_STD_GNU
,
1354 gfc_check_fn_r
, NULL
, gfc_resolve_g77_math1
,
1355 x
, BT_REAL
, dd
, REQUIRED
);
1357 make_generic ("erfc", GFC_ISYM_ERFC
, GFC_STD_GNU
);
1359 /* G77 compatibility */
1360 add_sym_1 ("etime", GFC_ISYM_ETIME
, NO_CLASS
, ACTUAL_NO
, BT_REAL
, 4, GFC_STD_GNU
,
1361 gfc_check_etime
, NULL
, NULL
,
1362 x
, BT_REAL
, 4, REQUIRED
);
1364 make_alias ("dtime", GFC_STD_GNU
);
1366 make_generic ("etime", GFC_ISYM_ETIME
, GFC_STD_GNU
);
1368 add_sym_1 ("exp", GFC_ISYM_EXP
, CLASS_ELEMENTAL
, ACTUAL_YES
, BT_REAL
, dr
, GFC_STD_F77
,
1369 gfc_check_fn_rc
, gfc_simplify_exp
, gfc_resolve_exp
,
1370 x
, BT_REAL
, dr
, REQUIRED
);
1372 add_sym_1 ("dexp", GFC_ISYM_EXP
, CLASS_ELEMENTAL
, ACTUAL_YES
, BT_REAL
, dd
, GFC_STD_F77
,
1373 NULL
, gfc_simplify_exp
, gfc_resolve_exp
,
1374 x
, BT_REAL
, dd
, REQUIRED
);
1376 add_sym_1 ("cexp", GFC_ISYM_EXP
, CLASS_ELEMENTAL
, ACTUAL_YES
, BT_COMPLEX
, dz
, GFC_STD_F77
,
1377 NULL
, gfc_simplify_exp
, gfc_resolve_exp
,
1378 x
, BT_COMPLEX
, dz
, REQUIRED
);
1380 add_sym_1 ("zexp", GFC_ISYM_EXP
, CLASS_ELEMENTAL
, ACTUAL_YES
, BT_COMPLEX
, dd
, GFC_STD_GNU
,
1381 NULL
, gfc_simplify_exp
, gfc_resolve_exp
,
1382 x
, BT_COMPLEX
, dd
, REQUIRED
);
1384 make_alias ("cdexp", GFC_STD_GNU
);
1386 make_generic ("exp", GFC_ISYM_EXP
, GFC_STD_F77
);
1388 add_sym_1 ("exponent", GFC_ISYM_EXPONENT
, CLASS_ELEMENTAL
, ACTUAL_NO
, BT_INTEGER
, di
, GFC_STD_F95
,
1389 gfc_check_x
, gfc_simplify_exponent
, gfc_resolve_exponent
,
1390 x
, BT_REAL
, dr
, REQUIRED
);
1392 make_generic ("exponent", GFC_ISYM_EXPONENT
, GFC_STD_F95
);
1394 add_sym_0 ("fdate", GFC_ISYM_FDATE
, NO_CLASS
, ACTUAL_NO
, BT_CHARACTER
, dc
, GFC_STD_GNU
,
1395 NULL
, NULL
, gfc_resolve_fdate
);
1397 make_generic ("fdate", GFC_ISYM_FDATE
, GFC_STD_GNU
);
1399 add_sym_2 ("floor", GFC_ISYM_FLOOR
, CLASS_ELEMENTAL
, ACTUAL_NO
, BT_INTEGER
, di
, GFC_STD_F95
,
1400 gfc_check_a_ikind
, gfc_simplify_floor
, gfc_resolve_floor
,
1401 a
, BT_REAL
, dr
, REQUIRED
, kind
, BT_INTEGER
, di
, OPTIONAL
);
1403 make_generic ("floor", GFC_ISYM_FLOOR
, GFC_STD_F95
);
1405 /* G77 compatible fnum */
1406 add_sym_1 ("fnum", GFC_ISYM_FNUM
, NO_CLASS
, ACTUAL_NO
, BT_INTEGER
, di
, GFC_STD_GNU
,
1407 gfc_check_fnum
, NULL
, gfc_resolve_fnum
,
1408 ut
, BT_INTEGER
, di
, REQUIRED
);
1410 make_generic ("fnum", GFC_ISYM_FNUM
, GFC_STD_GNU
);
1412 add_sym_1 ("fraction", GFC_ISYM_FRACTION
, CLASS_ELEMENTAL
, ACTUAL_NO
, BT_REAL
, dr
, GFC_STD_F95
,
1413 gfc_check_x
, gfc_simplify_fraction
, gfc_resolve_fraction
,
1414 x
, BT_REAL
, dr
, REQUIRED
);
1416 make_generic ("fraction", GFC_ISYM_FRACTION
, GFC_STD_F95
);
1418 add_sym_2 ("fstat", GFC_ISYM_FSTAT
, NO_CLASS
, ACTUAL_NO
, BT_INTEGER
, di
, GFC_STD_GNU
,
1419 gfc_check_fstat
, NULL
, gfc_resolve_fstat
,
1420 a
, BT_INTEGER
, di
, REQUIRED
, b
, BT_INTEGER
, di
, REQUIRED
);
1422 make_generic ("fstat", GFC_ISYM_FSTAT
, GFC_STD_GNU
);
1424 add_sym_1 ("ftell", GFC_ISYM_FTELL
, NO_CLASS
, ACTUAL_NO
, BT_INTEGER
, ii
, GFC_STD_GNU
,
1425 gfc_check_ftell
, NULL
, gfc_resolve_ftell
,
1426 ut
, BT_INTEGER
, di
, REQUIRED
);
1428 make_generic ("ftell", GFC_ISYM_FTELL
, GFC_STD_GNU
);
1430 add_sym_2 ("fgetc", GFC_ISYM_FGETC
, NO_CLASS
, ACTUAL_NO
, BT_INTEGER
, di
, GFC_STD_GNU
,
1431 gfc_check_fgetputc
, NULL
, gfc_resolve_fgetc
,
1432 ut
, BT_INTEGER
, di
, REQUIRED
, c
, BT_CHARACTER
, dc
, REQUIRED
);
1434 make_generic ("fgetc", GFC_ISYM_FGETC
, GFC_STD_GNU
);
1436 add_sym_1 ("fget", GFC_ISYM_FGET
, NO_CLASS
, ACTUAL_NO
, BT_INTEGER
, di
, GFC_STD_GNU
,
1437 gfc_check_fgetput
, NULL
, gfc_resolve_fget
,
1438 c
, BT_CHARACTER
, dc
, REQUIRED
);
1440 make_generic ("fget", GFC_ISYM_FGET
, GFC_STD_GNU
);
1442 add_sym_2 ("fputc", GFC_ISYM_FPUTC
, NO_CLASS
, ACTUAL_NO
, BT_INTEGER
, di
, GFC_STD_GNU
,
1443 gfc_check_fgetputc
, NULL
, gfc_resolve_fputc
,
1444 ut
, BT_INTEGER
, di
, REQUIRED
, c
, BT_CHARACTER
, dc
, REQUIRED
);
1446 make_generic ("fputc", GFC_ISYM_FPUTC
, GFC_STD_GNU
);
1448 add_sym_1 ("fput", GFC_ISYM_FPUT
, NO_CLASS
, ACTUAL_NO
, BT_INTEGER
, di
, GFC_STD_GNU
,
1449 gfc_check_fgetput
, NULL
, gfc_resolve_fput
,
1450 c
, BT_CHARACTER
, dc
, REQUIRED
);
1452 make_generic ("fput", GFC_ISYM_FPUT
, GFC_STD_GNU
);
1454 /* Unix IDs (g77 compatibility) */
1455 add_sym_1 ("getcwd", GFC_ISYM_GETCWD
, NO_CLASS
, ACTUAL_NO
, BT_INTEGER
, di
, GFC_STD_GNU
,
1456 NULL
, NULL
, gfc_resolve_getcwd
,
1457 c
, BT_CHARACTER
, dc
, REQUIRED
);
1459 make_generic ("getcwd", GFC_ISYM_GETCWD
, GFC_STD_GNU
);
1461 add_sym_0 ("getgid", GFC_ISYM_GETGID
, NO_CLASS
, ACTUAL_NO
, BT_INTEGER
, di
, GFC_STD_GNU
,
1462 NULL
, NULL
, gfc_resolve_getgid
);
1464 make_generic ("getgid", GFC_ISYM_GETGID
, GFC_STD_GNU
);
1466 add_sym_0 ("getpid", GFC_ISYM_GETPID
, NO_CLASS
, ACTUAL_NO
, BT_INTEGER
, di
, GFC_STD_GNU
,
1467 NULL
, NULL
, gfc_resolve_getpid
);
1469 make_generic ("getpid", GFC_ISYM_GETPID
, GFC_STD_GNU
);
1471 add_sym_0 ("getuid", GFC_ISYM_GETUID
, NO_CLASS
, ACTUAL_NO
, BT_INTEGER
, di
, GFC_STD_GNU
,
1472 NULL
, NULL
, gfc_resolve_getuid
);
1474 make_generic ("getuid", GFC_ISYM_GETUID
, GFC_STD_GNU
);
1476 add_sym_1 ("hostnm", GFC_ISYM_HOSTNM
, NO_CLASS
, ACTUAL_NO
, BT_INTEGER
, di
, GFC_STD_GNU
,
1477 gfc_check_hostnm
, NULL
, gfc_resolve_hostnm
,
1478 a
, BT_CHARACTER
, dc
, REQUIRED
);
1480 make_generic ("hostnm", GFC_ISYM_HOSTNM
, GFC_STD_GNU
);
1482 add_sym_1 ("huge", GFC_ISYM_HUGE
, CLASS_INQUIRY
, ACTUAL_NO
, BT_REAL
, dr
, GFC_STD_F95
,
1483 gfc_check_huge
, gfc_simplify_huge
, NULL
,
1484 x
, BT_UNKNOWN
, dr
, REQUIRED
);
1486 make_generic ("huge", GFC_ISYM_HUGE
, GFC_STD_F95
);
1488 add_sym_1 ("iachar", GFC_ISYM_IACHAR
, CLASS_ELEMENTAL
, ACTUAL_NO
, BT_INTEGER
, di
, GFC_STD_F95
,
1489 gfc_check_ichar_iachar
, gfc_simplify_iachar
, NULL
,
1490 c
, BT_CHARACTER
, dc
, REQUIRED
);
1492 make_generic ("iachar", GFC_ISYM_IACHAR
, GFC_STD_F95
);
1494 add_sym_2 ("iand", GFC_ISYM_IAND
, CLASS_ELEMENTAL
, ACTUAL_NO
, BT_INTEGER
, di
, GFC_STD_F95
,
1495 gfc_check_iand
, gfc_simplify_iand
, gfc_resolve_iand
,
1496 i
, BT_INTEGER
, di
, REQUIRED
, j
, BT_INTEGER
, di
, REQUIRED
);
1498 make_generic ("iand", GFC_ISYM_IAND
, GFC_STD_F95
);
1500 add_sym_2 ("and", GFC_ISYM_AND
, NO_CLASS
, ACTUAL_NO
, BT_LOGICAL
, dl
, GFC_STD_GNU
,
1501 gfc_check_and
, gfc_simplify_and
, gfc_resolve_and
,
1502 i
, BT_UNKNOWN
, 0, REQUIRED
, j
, BT_UNKNOWN
, 0, REQUIRED
);
1504 make_generic ("and", GFC_ISYM_AND
, GFC_STD_GNU
);
1506 add_sym_0 ("iargc", GFC_ISYM_IARGC
, NO_CLASS
, ACTUAL_NO
, BT_INTEGER
, di
, GFC_STD_GNU
,
1509 make_generic ("iargc", GFC_ISYM_IARGC
, GFC_STD_GNU
);
1511 add_sym_2 ("ibclr", GFC_ISYM_IBCLR
, CLASS_ELEMENTAL
, ACTUAL_NO
, BT_INTEGER
, di
, GFC_STD_F95
,
1512 gfc_check_ibclr
, gfc_simplify_ibclr
, gfc_resolve_ibclr
,
1513 i
, BT_INTEGER
, di
, REQUIRED
, pos
, BT_INTEGER
, di
, REQUIRED
);
1515 make_generic ("ibclr", GFC_ISYM_IBCLR
, GFC_STD_F95
);
1517 add_sym_3 ("ibits", GFC_ISYM_IBITS
, CLASS_ELEMENTAL
, ACTUAL_NO
, BT_INTEGER
, di
, GFC_STD_F95
,
1518 gfc_check_ibits
, gfc_simplify_ibits
, gfc_resolve_ibits
,
1519 i
, BT_INTEGER
, di
, REQUIRED
, pos
, BT_INTEGER
, di
, REQUIRED
,
1520 ln
, BT_INTEGER
, di
, REQUIRED
);
1522 make_generic ("ibits", GFC_ISYM_IBITS
, GFC_STD_F95
);
1524 add_sym_2 ("ibset", GFC_ISYM_IBSET
, CLASS_ELEMENTAL
, ACTUAL_NO
, BT_INTEGER
, di
, GFC_STD_F95
,
1525 gfc_check_ibset
, gfc_simplify_ibset
, gfc_resolve_ibset
,
1526 i
, BT_INTEGER
, di
, REQUIRED
, pos
, BT_INTEGER
, di
, REQUIRED
);
1528 make_generic ("ibset", GFC_ISYM_IBSET
, GFC_STD_F95
);
1530 add_sym_1 ("ichar", GFC_ISYM_ICHAR
, CLASS_ELEMENTAL
, ACTUAL_NO
, BT_INTEGER
, di
, GFC_STD_F77
,
1531 gfc_check_ichar_iachar
, gfc_simplify_ichar
, gfc_resolve_ichar
,
1532 c
, BT_CHARACTER
, dc
, REQUIRED
);
1534 make_generic ("ichar", GFC_ISYM_ICHAR
, GFC_STD_F77
);
1536 add_sym_2 ("ieor", GFC_ISYM_IEOR
, CLASS_ELEMENTAL
, ACTUAL_NO
, BT_INTEGER
, di
, GFC_STD_F95
,
1537 gfc_check_ieor
, gfc_simplify_ieor
, gfc_resolve_ieor
,
1538 i
, BT_INTEGER
, di
, REQUIRED
, j
, BT_INTEGER
, di
, REQUIRED
);
1540 make_generic ("ieor", GFC_ISYM_IEOR
, GFC_STD_F95
);
1542 add_sym_2 ("xor", GFC_ISYM_XOR
, NO_CLASS
, ACTUAL_NO
, BT_LOGICAL
, dl
, GFC_STD_GNU
,
1543 gfc_check_and
, gfc_simplify_xor
, gfc_resolve_xor
,
1544 i
, BT_UNKNOWN
, 0, REQUIRED
, j
, BT_UNKNOWN
, 0, REQUIRED
);
1546 make_generic ("xor", GFC_ISYM_XOR
, GFC_STD_GNU
);
1548 add_sym_0 ("ierrno", GFC_ISYM_IERRNO
, NO_CLASS
, ACTUAL_NO
, BT_INTEGER
, di
, GFC_STD_GNU
,
1549 NULL
, NULL
, gfc_resolve_ierrno
);
1551 make_generic ("ierrno", GFC_ISYM_IERRNO
, GFC_STD_GNU
);
1553 /* The resolution function for INDEX is called gfc_resolve_index_func
1554 because the name gfc_resolve_index is already used in resolve.c. */
1555 add_sym_3 ("index", GFC_ISYM_INDEX
, CLASS_ELEMENTAL
, ACTUAL_YES
, BT_INTEGER
, di
, GFC_STD_F77
,
1556 gfc_check_index
, gfc_simplify_index
, gfc_resolve_index_func
,
1557 stg
, BT_CHARACTER
, dc
, REQUIRED
, ssg
, BT_CHARACTER
, dc
, REQUIRED
,
1558 bck
, BT_LOGICAL
, dl
, OPTIONAL
);
1560 make_generic ("index", GFC_ISYM_INDEX
, GFC_STD_F77
);
1562 add_sym_2 ("int", GFC_ISYM_INT
, CLASS_ELEMENTAL
, ACTUAL_NO
, BT_INTEGER
, di
, GFC_STD_F77
,
1563 gfc_check_int
, gfc_simplify_int
, gfc_resolve_int
,
1564 a
, BT_REAL
, dr
, REQUIRED
, kind
, BT_INTEGER
, di
, OPTIONAL
);
1566 add_sym_1 ("ifix", GFC_ISYM_INT
, CLASS_ELEMENTAL
, ACTUAL_NO
, BT_INTEGER
, di
, GFC_STD_F77
,
1567 NULL
, gfc_simplify_ifix
, NULL
,
1568 a
, BT_REAL
, dr
, REQUIRED
);
1570 add_sym_1 ("idint", GFC_ISYM_INT
, CLASS_ELEMENTAL
, ACTUAL_NO
, BT_INTEGER
, di
, GFC_STD_F77
,
1571 NULL
, gfc_simplify_idint
, NULL
,
1572 a
, BT_REAL
, dd
, REQUIRED
);
1574 make_generic ("int", GFC_ISYM_INT
, GFC_STD_F77
);
1576 add_sym_1 ("int2", GFC_ISYM_INT2
, CLASS_ELEMENTAL
, ACTUAL_NO
, BT_INTEGER
, di
, GFC_STD_GNU
,
1577 gfc_check_intconv
, gfc_simplify_int2
, gfc_resolve_int2
,
1578 a
, BT_REAL
, dr
, REQUIRED
);
1580 make_alias ("short", GFC_STD_GNU
);
1582 make_generic ("int2", GFC_ISYM_INT2
, GFC_STD_GNU
);
1584 add_sym_1 ("int8", GFC_ISYM_INT8
, CLASS_ELEMENTAL
, ACTUAL_NO
, BT_INTEGER
, di
, GFC_STD_GNU
,
1585 gfc_check_intconv
, gfc_simplify_int8
, gfc_resolve_int8
,
1586 a
, BT_REAL
, dr
, REQUIRED
);
1588 make_generic ("int8", GFC_ISYM_INT8
, GFC_STD_GNU
);
1590 add_sym_1 ("long", GFC_ISYM_LONG
, CLASS_ELEMENTAL
, ACTUAL_NO
, BT_INTEGER
, di
, GFC_STD_GNU
,
1591 gfc_check_intconv
, gfc_simplify_long
, gfc_resolve_long
,
1592 a
, BT_REAL
, dr
, REQUIRED
);
1594 make_generic ("long", GFC_ISYM_LONG
, GFC_STD_GNU
);
1596 add_sym_2 ("ior", GFC_ISYM_IOR
, CLASS_ELEMENTAL
, ACTUAL_NO
, BT_INTEGER
, di
, GFC_STD_F95
,
1597 gfc_check_ior
, gfc_simplify_ior
, gfc_resolve_ior
,
1598 i
, BT_INTEGER
, di
, REQUIRED
, j
, BT_INTEGER
, di
, REQUIRED
);
1600 make_generic ("ior", GFC_ISYM_IOR
, GFC_STD_F95
);
1602 add_sym_2 ("or", GFC_ISYM_OR
, NO_CLASS
, ACTUAL_NO
, BT_LOGICAL
, dl
, GFC_STD_GNU
,
1603 gfc_check_and
, gfc_simplify_or
, gfc_resolve_or
,
1604 i
, BT_UNKNOWN
, 0, REQUIRED
, j
, BT_UNKNOWN
, 0, REQUIRED
);
1606 make_generic ("or", GFC_ISYM_OR
, GFC_STD_GNU
);
1608 /* The following function is for G77 compatibility. */
1609 add_sym_1 ("irand", GFC_ISYM_IRAND
, NO_CLASS
, ACTUAL_NO
, BT_INTEGER
, 4, GFC_STD_GNU
,
1610 gfc_check_irand
, NULL
, NULL
,
1611 i
, BT_INTEGER
, 4, OPTIONAL
);
1613 make_generic ("irand", GFC_ISYM_IRAND
, GFC_STD_GNU
);
1615 add_sym_1 ("isatty", GFC_ISYM_ISATTY
, NO_CLASS
, ACTUAL_NO
, BT_LOGICAL
, dl
, GFC_STD_GNU
,
1616 gfc_check_isatty
, NULL
, gfc_resolve_isatty
,
1617 ut
, BT_INTEGER
, di
, REQUIRED
);
1619 make_generic ("isatty", GFC_ISYM_ISATTY
, GFC_STD_GNU
);
1621 add_sym_2 ("rshift", GFC_ISYM_RSHIFT
, CLASS_ELEMENTAL
, ACTUAL_NO
, BT_INTEGER
, di
, GFC_STD_GNU
,
1622 gfc_check_ishft
, NULL
, gfc_resolve_rshift
,
1623 i
, BT_INTEGER
, di
, REQUIRED
, sh
, BT_INTEGER
, di
, REQUIRED
);
1625 make_generic ("rshift", GFC_ISYM_RSHIFT
, GFC_STD_GNU
);
1627 add_sym_2 ("lshift", GFC_ISYM_LSHIFT
, CLASS_ELEMENTAL
, ACTUAL_NO
, BT_INTEGER
, di
, GFC_STD_GNU
,
1628 gfc_check_ishft
, NULL
, gfc_resolve_lshift
,
1629 i
, BT_INTEGER
, di
, REQUIRED
, sh
, BT_INTEGER
, di
, REQUIRED
);
1631 make_generic ("lshift", GFC_ISYM_LSHIFT
, GFC_STD_GNU
);
1633 add_sym_2 ("ishft", GFC_ISYM_ISHFT
, CLASS_ELEMENTAL
, ACTUAL_NO
, BT_INTEGER
, di
, GFC_STD_F95
,
1634 gfc_check_ishft
, gfc_simplify_ishft
, gfc_resolve_ishft
,
1635 i
, BT_INTEGER
, di
, REQUIRED
, sh
, BT_INTEGER
, di
, REQUIRED
);
1637 make_generic ("ishft", GFC_ISYM_ISHFT
, GFC_STD_F95
);
1639 add_sym_3 ("ishftc", GFC_ISYM_ISHFTC
, CLASS_ELEMENTAL
, ACTUAL_NO
, BT_INTEGER
, di
, GFC_STD_F95
,
1640 gfc_check_ishftc
, gfc_simplify_ishftc
, gfc_resolve_ishftc
,
1641 i
, BT_INTEGER
, di
, REQUIRED
, sh
, BT_INTEGER
, di
, REQUIRED
,
1642 sz
, BT_INTEGER
, di
, OPTIONAL
);
1644 make_generic ("ishftc", GFC_ISYM_ISHFTC
, GFC_STD_F95
);
1646 add_sym_2 ("kill", GFC_ISYM_KILL
, NO_CLASS
, ACTUAL_NO
, BT_INTEGER
, di
, GFC_STD_GNU
,
1647 gfc_check_kill
, NULL
, gfc_resolve_kill
,
1648 a
, BT_INTEGER
, di
, REQUIRED
, b
, BT_INTEGER
, di
, REQUIRED
);
1650 make_generic ("kill", GFC_ISYM_KILL
, GFC_STD_GNU
);
1652 add_sym_1 ("kind", GFC_ISYM_KIND
, CLASS_INQUIRY
, ACTUAL_NO
, BT_INTEGER
, di
, GFC_STD_F95
,
1653 gfc_check_kind
, gfc_simplify_kind
, NULL
,
1654 x
, BT_REAL
, dr
, REQUIRED
);
1656 make_generic ("kind", GFC_ISYM_KIND
, GFC_STD_F95
);
1658 add_sym_2 ("lbound", GFC_ISYM_LBOUND
, CLASS_INQUIRY
, ACTUAL_NO
, BT_INTEGER
, di
, GFC_STD_F95
,
1659 gfc_check_lbound
, gfc_simplify_lbound
, gfc_resolve_lbound
,
1660 ar
, BT_REAL
, dr
, REQUIRED
, dm
, BT_INTEGER
, di
, OPTIONAL
);
1662 make_generic ("lbound", GFC_ISYM_LBOUND
, GFC_STD_F95
);
1664 add_sym_1 ("len", GFC_ISYM_LEN
, CLASS_INQUIRY
, ACTUAL_YES
, BT_INTEGER
, di
, GFC_STD_F77
,
1665 NULL
, gfc_simplify_len
, gfc_resolve_len
,
1666 stg
, BT_CHARACTER
, dc
, REQUIRED
);
1668 make_generic ("len", GFC_ISYM_LEN
, GFC_STD_F77
);
1670 add_sym_1 ("len_trim", GFC_ISYM_LEN_TRIM
, CLASS_ELEMENTAL
, ACTUAL_NO
, BT_INTEGER
, di
, GFC_STD_F95
,
1671 NULL
, gfc_simplify_len_trim
, gfc_resolve_len_trim
,
1672 stg
, BT_CHARACTER
, dc
, REQUIRED
);
1674 make_alias ("lnblnk", GFC_STD_GNU
);
1676 make_generic ("len_trim", GFC_ISYM_LEN_TRIM
, GFC_STD_F95
);
1678 add_sym_2 ("lge", GFC_ISYM_LGE
, CLASS_ELEMENTAL
, ACTUAL_NO
, BT_LOGICAL
, dl
, GFC_STD_F77
,
1679 NULL
, gfc_simplify_lge
, NULL
,
1680 sta
, BT_CHARACTER
, dc
, REQUIRED
, stb
, BT_CHARACTER
, dc
, REQUIRED
);
1682 make_generic ("lge", GFC_ISYM_LGE
, GFC_STD_F77
);
1684 add_sym_2 ("lgt", GFC_ISYM_LGT
, CLASS_ELEMENTAL
, ACTUAL_NO
, BT_LOGICAL
, dl
, GFC_STD_F77
,
1685 NULL
, gfc_simplify_lgt
, NULL
,
1686 sta
, BT_CHARACTER
, dc
, REQUIRED
, stb
, BT_CHARACTER
, dc
, REQUIRED
);
1688 make_generic ("lgt", GFC_ISYM_LGT
, GFC_STD_F77
);
1690 add_sym_2 ("lle",GFC_ISYM_LLE
, CLASS_ELEMENTAL
, ACTUAL_NO
, BT_LOGICAL
, dl
, GFC_STD_F77
,
1691 NULL
, gfc_simplify_lle
, NULL
,
1692 sta
, BT_CHARACTER
, dc
, REQUIRED
, stb
, BT_CHARACTER
, dc
, REQUIRED
);
1694 make_generic ("lle", GFC_ISYM_LLE
, GFC_STD_F77
);
1696 add_sym_2 ("llt", GFC_ISYM_LLT
, CLASS_ELEMENTAL
, ACTUAL_NO
, BT_LOGICAL
, dl
, GFC_STD_F77
,
1697 NULL
, gfc_simplify_llt
, NULL
,
1698 sta
, BT_CHARACTER
, dc
, REQUIRED
, stb
, BT_CHARACTER
, dc
, REQUIRED
);
1700 make_generic ("llt", GFC_ISYM_LLT
, GFC_STD_F77
);
1702 add_sym_2 ("link", GFC_ISYM_LINK
, NO_CLASS
, ACTUAL_NO
, BT_INTEGER
, di
, GFC_STD_GNU
,
1703 gfc_check_link
, NULL
, gfc_resolve_link
,
1704 a
, BT_CHARACTER
, dc
, REQUIRED
, b
, BT_CHARACTER
, dc
, REQUIRED
);
1706 make_generic ("link", GFC_ISYM_LINK
, GFC_STD_GNU
);
1708 add_sym_1 ("log", GFC_ISYM_LOG
, CLASS_ELEMENTAL
, ACTUAL_NO
, BT_REAL
, dr
, GFC_STD_F77
,
1709 gfc_check_fn_rc
, gfc_simplify_log
, gfc_resolve_log
,
1710 x
, BT_REAL
, dr
, REQUIRED
);
1712 add_sym_1 ("alog", GFC_ISYM_LOG
, CLASS_ELEMENTAL
, ACTUAL_YES
, BT_REAL
, dr
, GFC_STD_F77
,
1713 NULL
, gfc_simplify_log
, gfc_resolve_log
,
1714 x
, BT_REAL
, dr
, REQUIRED
);
1716 add_sym_1 ("dlog", GFC_ISYM_LOG
, CLASS_ELEMENTAL
, ACTUAL_YES
, BT_REAL
, dd
, GFC_STD_F77
,
1717 NULL
, gfc_simplify_log
, gfc_resolve_log
,
1718 x
, BT_REAL
, dd
, REQUIRED
);
1720 add_sym_1 ("clog", GFC_ISYM_LOG
, CLASS_ELEMENTAL
, ACTUAL_YES
, BT_COMPLEX
, dz
, GFC_STD_F77
,
1721 NULL
, gfc_simplify_log
, gfc_resolve_log
,
1722 x
, BT_COMPLEX
, dz
, REQUIRED
);
1724 add_sym_1 ("zlog", GFC_ISYM_LOG
, CLASS_ELEMENTAL
, ACTUAL_YES
, BT_COMPLEX
, dd
, GFC_STD_GNU
,
1725 NULL
, gfc_simplify_log
, gfc_resolve_log
,
1726 x
, BT_COMPLEX
, dd
, REQUIRED
);
1728 make_alias ("cdlog", GFC_STD_GNU
);
1730 make_generic ("log", GFC_ISYM_LOG
, GFC_STD_F77
);
1732 add_sym_1 ("log10", GFC_ISYM_LOG10
, CLASS_ELEMENTAL
, ACTUAL_NO
, BT_REAL
, dr
, GFC_STD_F77
,
1733 gfc_check_fn_r
, gfc_simplify_log10
, gfc_resolve_log10
,
1734 x
, BT_REAL
, dr
, REQUIRED
);
1736 add_sym_1 ("alog10", GFC_ISYM_LOG10
, CLASS_ELEMENTAL
, ACTUAL_YES
, BT_REAL
, dr
, GFC_STD_F77
,
1737 NULL
, gfc_simplify_log10
, gfc_resolve_log10
,
1738 x
, BT_REAL
, dr
, REQUIRED
);
1740 add_sym_1 ("dlog10", GFC_ISYM_LOG10
, CLASS_ELEMENTAL
, ACTUAL_YES
, BT_REAL
, dd
, GFC_STD_F77
,
1741 NULL
, gfc_simplify_log10
, gfc_resolve_log10
,
1742 x
, BT_REAL
, dd
, REQUIRED
);
1744 make_generic ("log10", GFC_ISYM_LOG10
, GFC_STD_F77
);
1746 add_sym_2 ("logical", GFC_ISYM_LOGICAL
, CLASS_ELEMENTAL
, ACTUAL_NO
, BT_LOGICAL
, dl
, GFC_STD_F95
,
1747 gfc_check_logical
, gfc_simplify_logical
, gfc_resolve_logical
,
1748 l
, BT_LOGICAL
, dl
, REQUIRED
, kind
, BT_INTEGER
, di
, OPTIONAL
);
1750 make_generic ("logical", GFC_ISYM_LOGICAL
, GFC_STD_F95
);
1752 add_sym_2 ("lstat", GFC_ISYM_LSTAT
, NO_CLASS
, ACTUAL_NO
, BT_INTEGER
, di
, GFC_STD_GNU
,
1753 gfc_check_stat
, NULL
, gfc_resolve_lstat
,
1754 a
, BT_CHARACTER
, dc
, REQUIRED
, b
, BT_INTEGER
, di
, REQUIRED
);
1756 make_generic ("lstat", GFC_ISYM_LSTAT
, GFC_STD_GNU
);
1758 add_sym_1 ("malloc", GFC_ISYM_MALLOC
, NO_CLASS
, ACTUAL_NO
, BT_INTEGER
, ii
, GFC_STD_GNU
,
1759 gfc_check_malloc
, NULL
, gfc_resolve_malloc
, a
, BT_INTEGER
, di
,
1762 make_generic ("malloc", GFC_ISYM_MALLOC
, GFC_STD_GNU
);
1764 add_sym_2 ("matmul", GFC_ISYM_MATMUL
, CLASS_TRANSFORMATIONAL
, ACTUAL_NO
, BT_REAL
, dr
, GFC_STD_F95
,
1765 gfc_check_matmul
, NULL
, gfc_resolve_matmul
,
1766 ma
, BT_REAL
, dr
, REQUIRED
, mb
, BT_REAL
, dr
, REQUIRED
);
1768 make_generic ("matmul", GFC_ISYM_MATMUL
, GFC_STD_F95
);
1770 /* Note: amax0 is equivalent to real(max), max1 is equivalent to
1771 int(max). The max function must take at least two arguments. */
1773 add_sym_1m ("max", GFC_ISYM_MAX
, CLASS_ELEMENTAL
, ACTUAL_NO
, BT_UNKNOWN
, 0, GFC_STD_F77
,
1774 gfc_check_min_max
, gfc_simplify_max
, gfc_resolve_max
,
1775 a1
, BT_UNKNOWN
, dr
, REQUIRED
, a2
, BT_UNKNOWN
, dr
, REQUIRED
);
1777 add_sym_1m ("max0", GFC_ISYM_MAX
, CLASS_ELEMENTAL
, ACTUAL_NO
, BT_INTEGER
, di
, GFC_STD_F77
,
1778 gfc_check_min_max_integer
, gfc_simplify_max
, NULL
,
1779 a1
, BT_INTEGER
, di
, REQUIRED
, a2
, BT_INTEGER
, di
, REQUIRED
);
1781 add_sym_1m ("amax0", GFC_ISYM_MAX
, CLASS_ELEMENTAL
, ACTUAL_NO
, BT_REAL
, dr
, GFC_STD_F77
,
1782 gfc_check_min_max_integer
, gfc_simplify_max
, NULL
,
1783 a1
, BT_INTEGER
, di
, REQUIRED
, a2
, BT_INTEGER
, di
, REQUIRED
);
1785 add_sym_1m ("amax1", GFC_ISYM_MAX
, CLASS_ELEMENTAL
, ACTUAL_NO
, BT_REAL
, dr
, GFC_STD_F77
,
1786 gfc_check_min_max_real
, gfc_simplify_max
, NULL
,
1787 a1
, BT_REAL
, dr
, REQUIRED
, a2
, BT_REAL
, dr
, REQUIRED
);
1789 add_sym_1m ("max1", GFC_ISYM_MAX
, CLASS_ELEMENTAL
, ACTUAL_NO
, BT_INTEGER
, di
, GFC_STD_F77
,
1790 gfc_check_min_max_real
, gfc_simplify_max
, NULL
,
1791 a1
, BT_REAL
, dr
, REQUIRED
, a2
, BT_REAL
, dr
, REQUIRED
);
1793 add_sym_1m ("dmax1", GFC_ISYM_MAX
, CLASS_ELEMENTAL
, ACTUAL_NO
, BT_REAL
, dd
, GFC_STD_F77
,
1794 gfc_check_min_max_double
, gfc_simplify_max
, NULL
,
1795 a1
, BT_REAL
, dd
, REQUIRED
, a2
, BT_REAL
, dd
, REQUIRED
);
1797 make_generic ("max", GFC_ISYM_MAX
, GFC_STD_F77
);
1799 add_sym_1 ("maxexponent", GFC_ISYM_MAXEXPONENT
, CLASS_INQUIRY
, ACTUAL_NO
, BT_INTEGER
, di
,
1800 GFC_STD_F95
, gfc_check_x
, gfc_simplify_maxexponent
, NULL
,
1801 x
, BT_UNKNOWN
, dr
, REQUIRED
);
1803 make_generic ("maxexponent", GFC_ISYM_MAXEXPONENT
, GFC_STD_F95
);
1805 add_sym_3ml ("maxloc", GFC_ISYM_MAXLOC
, CLASS_TRANSFORMATIONAL
, ACTUAL_NO
, BT_INTEGER
, di
, GFC_STD_F95
,
1806 gfc_check_minloc_maxloc
, NULL
, gfc_resolve_maxloc
,
1807 ar
, BT_REAL
, dr
, REQUIRED
, dm
, BT_INTEGER
, ii
, OPTIONAL
,
1808 msk
, BT_LOGICAL
, dl
, OPTIONAL
);
1810 make_generic ("maxloc", GFC_ISYM_MAXLOC
, GFC_STD_F95
);
1812 add_sym_3red ("maxval", GFC_ISYM_MAXVAL
, CLASS_TRANSFORMATIONAL
, ACTUAL_NO
, BT_REAL
, dr
, GFC_STD_F95
,
1813 gfc_check_minval_maxval
, NULL
, gfc_resolve_maxval
,
1814 ar
, BT_REAL
, dr
, REQUIRED
, dm
, BT_INTEGER
, ii
, OPTIONAL
,
1815 msk
, BT_LOGICAL
, dl
, OPTIONAL
);
1817 make_generic ("maxval", GFC_ISYM_MAXVAL
, GFC_STD_F95
);
1819 add_sym_0 ("mclock", GFC_ISYM_MCLOCK
, NO_CLASS
, ACTUAL_NO
, BT_INTEGER
, di
, GFC_STD_GNU
,
1820 NULL
, NULL
, gfc_resolve_mclock
);
1822 make_generic ("mclock", GFC_ISYM_MCLOCK
, GFC_STD_GNU
);
1824 add_sym_0 ("mclock8", GFC_ISYM_MCLOCK8
, NO_CLASS
, ACTUAL_NO
, BT_INTEGER
, di
, GFC_STD_GNU
,
1825 NULL
, NULL
, gfc_resolve_mclock8
);
1827 make_generic ("mclock8", GFC_ISYM_MCLOCK8
, GFC_STD_GNU
);
1829 add_sym_3 ("merge", GFC_ISYM_MERGE
, CLASS_ELEMENTAL
, ACTUAL_NO
, BT_REAL
, dr
, GFC_STD_F95
,
1830 gfc_check_merge
, NULL
, gfc_resolve_merge
,
1831 ts
, BT_REAL
, dr
, REQUIRED
, fs
, BT_REAL
, dr
, REQUIRED
,
1832 msk
, BT_LOGICAL
, dl
, REQUIRED
);
1834 make_generic ("merge", GFC_ISYM_MERGE
, GFC_STD_F95
);
1836 /* Note: amin0 is equivalent to real(min), min1 is equivalent to
1839 add_sym_1m ("min", GFC_ISYM_MIN
, CLASS_ELEMENTAL
, ACTUAL_NO
, BT_UNKNOWN
, 0, GFC_STD_F77
,
1840 gfc_check_min_max
, gfc_simplify_min
, gfc_resolve_min
,
1841 a1
, BT_REAL
, dr
, REQUIRED
, a2
, BT_REAL
, dr
, REQUIRED
);
1843 add_sym_1m ("min0", GFC_ISYM_MIN
, CLASS_ELEMENTAL
, ACTUAL_NO
, BT_INTEGER
, di
, GFC_STD_F77
,
1844 gfc_check_min_max_integer
, gfc_simplify_min
, NULL
,
1845 a1
, BT_INTEGER
, di
, REQUIRED
, a2
, BT_INTEGER
, di
, REQUIRED
);
1847 add_sym_1m ("amin0", GFC_ISYM_MIN
, CLASS_ELEMENTAL
, ACTUAL_NO
, BT_REAL
, dr
, GFC_STD_F77
,
1848 gfc_check_min_max_integer
, gfc_simplify_min
, NULL
,
1849 a1
, BT_INTEGER
, di
, REQUIRED
, a2
, BT_INTEGER
, di
, REQUIRED
);
1851 add_sym_1m ("amin1", GFC_ISYM_MIN
, CLASS_ELEMENTAL
, ACTUAL_NO
, BT_REAL
, dr
, GFC_STD_F77
,
1852 gfc_check_min_max_real
, gfc_simplify_min
, NULL
,
1853 a1
, BT_REAL
, dr
, REQUIRED
, a2
, BT_REAL
, dr
, REQUIRED
);
1855 add_sym_1m ("min1", GFC_ISYM_MIN
, CLASS_ELEMENTAL
, ACTUAL_NO
, BT_INTEGER
, di
, GFC_STD_F77
,
1856 gfc_check_min_max_real
, gfc_simplify_min
, NULL
,
1857 a1
, BT_REAL
, dr
, REQUIRED
, a2
, BT_REAL
, dr
, REQUIRED
);
1859 add_sym_1m ("dmin1", GFC_ISYM_MIN
, CLASS_ELEMENTAL
, ACTUAL_NO
, BT_REAL
, dd
, GFC_STD_F77
,
1860 gfc_check_min_max_double
, gfc_simplify_min
, NULL
,
1861 a1
, BT_REAL
, dd
, REQUIRED
, a2
, BT_REAL
, dd
, REQUIRED
);
1863 make_generic ("min", GFC_ISYM_MIN
, GFC_STD_F77
);
1865 add_sym_1 ("minexponent", GFC_ISYM_MINEXPONENT
, CLASS_INQUIRY
, ACTUAL_NO
, BT_INTEGER
, di
,
1866 GFC_STD_F95
, gfc_check_x
, gfc_simplify_minexponent
, NULL
,
1867 x
, BT_UNKNOWN
, dr
, REQUIRED
);
1869 make_generic ("minexponent", GFC_ISYM_MINEXPONENT
, GFC_STD_F95
);
1871 add_sym_3ml ("minloc", GFC_ISYM_MINLOC
, CLASS_TRANSFORMATIONAL
, ACTUAL_NO
, BT_INTEGER
, di
, GFC_STD_F95
,
1872 gfc_check_minloc_maxloc
, NULL
, gfc_resolve_minloc
,
1873 ar
, BT_REAL
, dr
, REQUIRED
, dm
, BT_INTEGER
, ii
, OPTIONAL
,
1874 msk
, BT_LOGICAL
, dl
, OPTIONAL
);
1876 make_generic ("minloc", GFC_ISYM_MINLOC
, GFC_STD_F95
);
1878 add_sym_3red ("minval", GFC_ISYM_MINVAL
, CLASS_TRANSFORMATIONAL
, ACTUAL_NO
, BT_REAL
, dr
, GFC_STD_F95
,
1879 gfc_check_minval_maxval
, NULL
, gfc_resolve_minval
,
1880 ar
, BT_REAL
, dr
, REQUIRED
, dm
, BT_INTEGER
, ii
, OPTIONAL
,
1881 msk
, BT_LOGICAL
, dl
, OPTIONAL
);
1883 make_generic ("minval", GFC_ISYM_MINVAL
, GFC_STD_F95
);
1885 add_sym_2 ("mod", GFC_ISYM_MOD
, CLASS_ELEMENTAL
, ACTUAL_YES
, BT_INTEGER
, di
, GFC_STD_F77
,
1886 gfc_check_a_p
, gfc_simplify_mod
, gfc_resolve_mod
,
1887 a
, BT_INTEGER
, di
, REQUIRED
, p
, BT_INTEGER
, di
, REQUIRED
);
1889 add_sym_2 ("amod", GFC_ISYM_MOD
, CLASS_ELEMENTAL
, ACTUAL_YES
, BT_REAL
, dr
, GFC_STD_F77
,
1890 NULL
, gfc_simplify_mod
, gfc_resolve_mod
,
1891 a
, BT_REAL
, dr
, REQUIRED
, p
, BT_REAL
, dr
, REQUIRED
);
1893 add_sym_2 ("dmod", GFC_ISYM_MOD
, CLASS_ELEMENTAL
, ACTUAL_YES
, BT_REAL
, dd
, GFC_STD_F77
,
1894 NULL
, gfc_simplify_mod
, gfc_resolve_mod
,
1895 a
, BT_REAL
, dd
, REQUIRED
, p
, BT_REAL
, dd
, REQUIRED
);
1897 make_generic ("mod", GFC_ISYM_MOD
, GFC_STD_F77
);
1899 add_sym_2 ("modulo", GFC_ISYM_MODULO
, CLASS_ELEMENTAL
, ACTUAL_NO
, BT_REAL
, di
, GFC_STD_F95
,
1900 gfc_check_a_p
, gfc_simplify_modulo
, gfc_resolve_modulo
,
1901 a
, BT_REAL
, di
, REQUIRED
, p
, BT_REAL
, di
, REQUIRED
);
1903 make_generic ("modulo", GFC_ISYM_MODULO
, GFC_STD_F95
);
1905 add_sym_2 ("nearest", GFC_ISYM_NEAREST
, CLASS_ELEMENTAL
, ACTUAL_NO
, BT_REAL
, dr
, GFC_STD_F95
,
1906 gfc_check_nearest
, gfc_simplify_nearest
, gfc_resolve_nearest
,
1907 x
, BT_REAL
, dr
, REQUIRED
, s
, BT_REAL
, dr
, REQUIRED
);
1909 make_generic ("nearest", GFC_ISYM_NEAREST
, GFC_STD_F95
);
1911 add_sym_1 ("new_line", GFC_ISYM_NEW_LINE
, CLASS_INQUIRY
, ACTUAL_NO
, BT_CHARACTER
, dc
,
1912 GFC_STD_F2003
, gfc_check_new_line
, gfc_simplify_new_line
, NULL
,
1913 a
, BT_CHARACTER
, dc
, REQUIRED
);
1915 make_generic ("new_line", GFC_ISYM_NEW_LINE
, GFC_STD_F2003
);
1917 add_sym_2 ("nint", GFC_ISYM_NINT
, CLASS_ELEMENTAL
, ACTUAL_YES
, BT_INTEGER
, di
, GFC_STD_F77
,
1918 gfc_check_a_ikind
, gfc_simplify_nint
, gfc_resolve_nint
,
1919 a
, BT_REAL
, dr
, REQUIRED
, kind
, BT_INTEGER
, di
, OPTIONAL
);
1921 add_sym_1 ("idnint", GFC_ISYM_NINT
, CLASS_ELEMENTAL
, ACTUAL_YES
, BT_INTEGER
, di
, GFC_STD_F77
,
1922 gfc_check_idnint
, gfc_simplify_idnint
, gfc_resolve_idnint
,
1923 a
, BT_REAL
, dd
, REQUIRED
);
1925 make_generic ("nint", GFC_ISYM_NINT
, GFC_STD_F77
);
1927 add_sym_1 ("not", GFC_ISYM_NOT
, CLASS_ELEMENTAL
, ACTUAL_NO
, BT_INTEGER
, di
, GFC_STD_F95
,
1928 gfc_check_i
, gfc_simplify_not
, gfc_resolve_not
,
1929 i
, BT_INTEGER
, di
, REQUIRED
);
1931 make_generic ("not", GFC_ISYM_NOT
, GFC_STD_F95
);
1933 add_sym_1 ("null", GFC_ISYM_NULL
, CLASS_TRANSFORMATIONAL
, ACTUAL_NO
, BT_INTEGER
, di
, GFC_STD_F95
,
1934 gfc_check_null
, gfc_simplify_null
, NULL
,
1935 mo
, BT_INTEGER
, di
, OPTIONAL
);
1937 make_generic ("null", GFC_ISYM_NULL
, GFC_STD_F95
);
1939 add_sym_3 ("pack", GFC_ISYM_PACK
, CLASS_TRANSFORMATIONAL
, ACTUAL_NO
, BT_REAL
, dr
, GFC_STD_F95
,
1940 gfc_check_pack
, NULL
, gfc_resolve_pack
,
1941 ar
, BT_REAL
, dr
, REQUIRED
, msk
, BT_LOGICAL
, dl
, REQUIRED
,
1942 v
, BT_REAL
, dr
, OPTIONAL
);
1944 make_generic ("pack", GFC_ISYM_PACK
, GFC_STD_F95
);
1946 add_sym_1 ("precision", GFC_ISYM_PRECISION
, CLASS_INQUIRY
, ACTUAL_NO
, BT_INTEGER
, di
, GFC_STD_F95
,
1947 gfc_check_precision
, gfc_simplify_precision
, NULL
,
1948 x
, BT_UNKNOWN
, 0, REQUIRED
);
1950 make_generic ("precision", GFC_ISYM_PRECISION
, GFC_STD_F95
);
1952 add_sym_1 ("present", GFC_ISYM_PRESENT
, CLASS_INQUIRY
, ACTUAL_NO
, BT_LOGICAL
, dl
, GFC_STD_F95
,
1953 gfc_check_present
, NULL
, NULL
,
1954 a
, BT_REAL
, dr
, REQUIRED
);
1956 make_generic ("present", GFC_ISYM_PRESENT
, GFC_STD_F95
);
1958 add_sym_3red ("product", GFC_ISYM_PRODUCT
, CLASS_TRANSFORMATIONAL
, ACTUAL_NO
, BT_REAL
, dr
, GFC_STD_F95
,
1959 gfc_check_product_sum
, NULL
, gfc_resolve_product
,
1960 ar
, BT_REAL
, dr
, REQUIRED
, dm
, BT_INTEGER
, ii
, OPTIONAL
,
1961 msk
, BT_LOGICAL
, dl
, OPTIONAL
);
1963 make_generic ("product", GFC_ISYM_PRODUCT
, GFC_STD_F95
);
1965 add_sym_1 ("radix", GFC_ISYM_RADIX
, CLASS_INQUIRY
, ACTUAL_NO
, BT_INTEGER
, di
, GFC_STD_F95
,
1966 gfc_check_radix
, gfc_simplify_radix
, NULL
,
1967 x
, BT_UNKNOWN
, 0, REQUIRED
);
1969 make_generic ("radix", GFC_ISYM_RADIX
, GFC_STD_F95
);
1971 /* The following function is for G77 compatibility. */
1972 add_sym_1 ("rand", GFC_ISYM_RAND
, NO_CLASS
, ACTUAL_NO
, BT_REAL
, 4, GFC_STD_GNU
,
1973 gfc_check_rand
, NULL
, NULL
,
1974 i
, BT_INTEGER
, 4, OPTIONAL
);
1976 /* Compatibility with HP FORTRAN 77/iX Reference. Note, rand() and ran()
1977 use slightly different shoddy multiplicative congruential PRNG. */
1978 make_alias ("ran", GFC_STD_GNU
);
1980 make_generic ("rand", GFC_ISYM_RAND
, GFC_STD_GNU
);
1982 add_sym_1 ("range", GFC_ISYM_RANGE
, CLASS_INQUIRY
, ACTUAL_NO
, BT_INTEGER
, di
, GFC_STD_F95
,
1983 gfc_check_range
, gfc_simplify_range
, NULL
,
1984 x
, BT_REAL
, dr
, REQUIRED
);
1986 make_generic ("range", GFC_ISYM_RANGE
, GFC_STD_F95
);
1988 add_sym_2 ("real", GFC_ISYM_REAL
, CLASS_ELEMENTAL
, ACTUAL_NO
, BT_REAL
, dr
, GFC_STD_F77
,
1989 gfc_check_real
, gfc_simplify_real
, gfc_resolve_real
,
1990 a
, BT_UNKNOWN
, dr
, REQUIRED
, kind
, BT_INTEGER
, di
, OPTIONAL
);
1992 /* This provides compatibility with g77. */
1993 add_sym_1 ("realpart", GFC_ISYM_REAL
, CLASS_ELEMENTAL
, ACTUAL_NO
, BT_REAL
, dr
, GFC_STD_GNU
,
1994 gfc_check_fn_c
, gfc_simplify_realpart
, gfc_resolve_realpart
,
1995 a
, BT_UNKNOWN
, dr
, REQUIRED
);
1997 add_sym_1 ("float", GFC_ISYM_REAL
, CLASS_ELEMENTAL
, ACTUAL_NO
, BT_REAL
, dr
, GFC_STD_F77
,
1998 gfc_check_i
, gfc_simplify_float
, NULL
,
1999 a
, BT_INTEGER
, di
, REQUIRED
);
2001 add_sym_1 ("sngl", GFC_ISYM_REAL
, CLASS_ELEMENTAL
, ACTUAL_NO
, BT_REAL
, dr
, GFC_STD_F77
,
2002 NULL
, gfc_simplify_sngl
, NULL
,
2003 a
, BT_REAL
, dd
, REQUIRED
);
2005 make_generic ("real", GFC_ISYM_REAL
, GFC_STD_F77
);
2007 add_sym_2 ("rename", GFC_ISYM_RENAME
, NO_CLASS
, ACTUAL_NO
, BT_INTEGER
, di
, GFC_STD_GNU
,
2008 gfc_check_rename
, NULL
, gfc_resolve_rename
,
2009 a
, BT_CHARACTER
, dc
, REQUIRED
, b
, BT_CHARACTER
, dc
, REQUIRED
);
2011 make_generic ("rename", GFC_ISYM_RENAME
, GFC_STD_GNU
);
2013 add_sym_2 ("repeat", GFC_ISYM_REPEAT
, CLASS_TRANSFORMATIONAL
, ACTUAL_NO
, BT_CHARACTER
, dc
, GFC_STD_F95
,
2014 gfc_check_repeat
, gfc_simplify_repeat
, gfc_resolve_repeat
,
2015 stg
, BT_CHARACTER
, dc
, REQUIRED
, ncopies
, BT_INTEGER
, di
, REQUIRED
);
2017 make_generic ("repeat", GFC_ISYM_REPEAT
, GFC_STD_F95
);
2019 add_sym_4 ("reshape", GFC_ISYM_RESHAPE
, CLASS_TRANSFORMATIONAL
, ACTUAL_NO
, BT_REAL
, dr
, GFC_STD_F95
,
2020 gfc_check_reshape
, gfc_simplify_reshape
, gfc_resolve_reshape
,
2021 src
, BT_REAL
, dr
, REQUIRED
, shp
, BT_INTEGER
, ii
, REQUIRED
,
2022 pad
, BT_REAL
, dr
, OPTIONAL
, ord
, BT_INTEGER
, ii
, OPTIONAL
);
2024 make_generic ("reshape", GFC_ISYM_RESHAPE
, GFC_STD_F95
);
2026 add_sym_1 ("rrspacing", GFC_ISYM_RRSPACING
, CLASS_ELEMENTAL
, ACTUAL_NO
, BT_REAL
, dr
, GFC_STD_F95
,
2027 gfc_check_x
, gfc_simplify_rrspacing
, gfc_resolve_rrspacing
,
2028 x
, BT_REAL
, dr
, REQUIRED
);
2030 make_generic ("rrspacing", GFC_ISYM_RRSPACING
, GFC_STD_F95
);
2032 add_sym_2 ("scale", GFC_ISYM_SCALE
, CLASS_ELEMENTAL
, ACTUAL_NO
, BT_REAL
, dr
, GFC_STD_F95
,
2033 gfc_check_scale
, gfc_simplify_scale
, gfc_resolve_scale
,
2034 x
, BT_REAL
, dr
, REQUIRED
, i
, BT_INTEGER
, di
, REQUIRED
);
2036 make_generic ("scale", GFC_ISYM_SCALE
, GFC_STD_F95
);
2038 add_sym_3 ("scan", GFC_ISYM_SCAN
, CLASS_ELEMENTAL
, ACTUAL_NO
, BT_INTEGER
, di
, GFC_STD_F95
,
2039 gfc_check_scan
, gfc_simplify_scan
, gfc_resolve_scan
,
2040 stg
, BT_CHARACTER
, dc
, REQUIRED
, set
, BT_CHARACTER
, dc
, REQUIRED
,
2041 bck
, BT_LOGICAL
, dl
, OPTIONAL
);
2043 make_generic ("scan", GFC_ISYM_SCAN
, GFC_STD_F95
);
2045 /* Added for G77 compatibility garbage. */
2046 add_sym_0 ("second", GFC_ISYM_SECOND
, NO_CLASS
, ACTUAL_NO
, BT_REAL
, 4, GFC_STD_GNU
,
2049 make_generic ("second", GFC_ISYM_SECOND
, GFC_STD_GNU
);
2051 /* Added for G77 compatibility. */
2052 add_sym_1 ("secnds", GFC_ISYM_SECNDS
, NO_CLASS
, ACTUAL_NO
, BT_REAL
, dr
, GFC_STD_GNU
,
2053 gfc_check_secnds
, NULL
, gfc_resolve_secnds
,
2054 x
, BT_REAL
, dr
, REQUIRED
);
2056 make_generic ("secnds", GFC_ISYM_SECNDS
, GFC_STD_GNU
);
2058 add_sym_1 ("selected_int_kind", GFC_ISYM_SI_KIND
, CLASS_TRANSFORMATIONAL
, ACTUAL_NO
, BT_INTEGER
, di
,
2059 GFC_STD_F95
, gfc_check_selected_int_kind
,
2060 gfc_simplify_selected_int_kind
, NULL
, r
, BT_INTEGER
, di
, REQUIRED
);
2062 make_generic ("selected_int_kind", GFC_ISYM_SI_KIND
, GFC_STD_F95
);
2064 add_sym_2 ("selected_real_kind", GFC_ISYM_SR_KIND
, CLASS_TRANSFORMATIONAL
, ACTUAL_NO
, BT_INTEGER
, di
,
2065 GFC_STD_F95
, gfc_check_selected_real_kind
,
2066 gfc_simplify_selected_real_kind
, NULL
,
2067 p
, BT_INTEGER
, di
, OPTIONAL
, r
, BT_INTEGER
, di
, OPTIONAL
);
2069 make_generic ("selected_real_kind", GFC_ISYM_SR_KIND
, GFC_STD_F95
);
2071 add_sym_2 ("set_exponent", GFC_ISYM_SET_EXPONENT
, CLASS_ELEMENTAL
, ACTUAL_NO
, BT_REAL
, dr
, GFC_STD_F95
,
2072 gfc_check_set_exponent
, gfc_simplify_set_exponent
,
2073 gfc_resolve_set_exponent
,
2074 x
, BT_REAL
, dr
, REQUIRED
, i
, BT_INTEGER
, di
, REQUIRED
);
2076 make_generic ("set_exponent", GFC_ISYM_SET_EXPONENT
, GFC_STD_F95
);
2078 add_sym_1 ("shape", GFC_ISYM_SHAPE
, CLASS_INQUIRY
, ACTUAL_NO
, BT_INTEGER
, di
, GFC_STD_F95
,
2079 gfc_check_shape
, gfc_simplify_shape
, gfc_resolve_shape
,
2080 src
, BT_REAL
, dr
, REQUIRED
);
2082 make_generic ("shape", GFC_ISYM_SHAPE
, GFC_STD_F95
);
2084 add_sym_2 ("sign", GFC_ISYM_SIGN
, CLASS_ELEMENTAL
, ACTUAL_YES
, BT_REAL
, dr
, GFC_STD_F77
,
2085 gfc_check_sign
, gfc_simplify_sign
, gfc_resolve_sign
,
2086 a
, BT_REAL
, dr
, REQUIRED
, b
, BT_REAL
, dr
, REQUIRED
);
2088 add_sym_2 ("isign", GFC_ISYM_SIGN
, CLASS_ELEMENTAL
, ACTUAL_YES
, BT_INTEGER
, di
, GFC_STD_F77
,
2089 NULL
, gfc_simplify_sign
, gfc_resolve_sign
,
2090 a
, BT_INTEGER
, di
, REQUIRED
, b
, BT_INTEGER
, di
, REQUIRED
);
2092 add_sym_2 ("dsign", GFC_ISYM_SIGN
, CLASS_ELEMENTAL
, ACTUAL_YES
, BT_REAL
, dd
, GFC_STD_F77
,
2093 NULL
, gfc_simplify_sign
, gfc_resolve_sign
,
2094 a
, BT_REAL
, dd
, REQUIRED
, b
, BT_REAL
, dd
, REQUIRED
);
2096 make_generic ("sign", GFC_ISYM_SIGN
, GFC_STD_F77
);
2098 add_sym_2 ("signal", GFC_ISYM_SIGNAL
, NO_CLASS
, ACTUAL_NO
, BT_INTEGER
, di
, GFC_STD_GNU
,
2099 gfc_check_signal
, NULL
, gfc_resolve_signal
,
2100 num
, BT_INTEGER
, di
, REQUIRED
, han
, BT_UNKNOWN
, 0, REQUIRED
);
2102 make_generic ("signal", GFC_ISYM_SIGNAL
, GFC_STD_GNU
);
2104 add_sym_1 ("sin", GFC_ISYM_SIN
, CLASS_ELEMENTAL
, ACTUAL_YES
, BT_REAL
, dr
, GFC_STD_F77
,
2105 gfc_check_fn_rc
, gfc_simplify_sin
, gfc_resolve_sin
,
2106 x
, BT_REAL
, dr
, REQUIRED
);
2108 add_sym_1 ("dsin", GFC_ISYM_SIN
, CLASS_ELEMENTAL
, ACTUAL_YES
, BT_REAL
, dd
, GFC_STD_F77
,
2109 NULL
, gfc_simplify_sin
, gfc_resolve_sin
,
2110 x
, BT_REAL
, dd
, REQUIRED
);
2112 add_sym_1 ("csin", GFC_ISYM_SIN
, CLASS_ELEMENTAL
, ACTUAL_YES
, BT_COMPLEX
, dz
, GFC_STD_F77
,
2113 NULL
, gfc_simplify_sin
, gfc_resolve_sin
,
2114 x
, BT_COMPLEX
, dz
, REQUIRED
);
2116 add_sym_1 ("zsin", GFC_ISYM_SIN
, CLASS_ELEMENTAL
, ACTUAL_YES
, BT_COMPLEX
, dd
, GFC_STD_GNU
,
2117 NULL
, gfc_simplify_sin
, gfc_resolve_sin
,
2118 x
, BT_COMPLEX
, dd
, REQUIRED
);
2120 make_alias ("cdsin", GFC_STD_GNU
);
2122 make_generic ("sin", GFC_ISYM_SIN
, GFC_STD_F77
);
2124 add_sym_1 ("sinh", GFC_ISYM_SINH
, CLASS_ELEMENTAL
, ACTUAL_YES
, BT_REAL
, dr
, GFC_STD_F77
,
2125 gfc_check_fn_r
, gfc_simplify_sinh
, gfc_resolve_sinh
,
2126 x
, BT_REAL
, dr
, REQUIRED
);
2128 add_sym_1 ("dsinh", GFC_ISYM_SINH
,CLASS_ELEMENTAL
, ACTUAL_YES
, BT_REAL
, dd
, GFC_STD_F77
,
2129 NULL
, gfc_simplify_sinh
, gfc_resolve_sinh
,
2130 x
, BT_REAL
, dd
, REQUIRED
);
2132 make_generic ("sinh", GFC_ISYM_SINH
, GFC_STD_F77
);
2134 add_sym_2 ("size", GFC_ISYM_SIZE
, CLASS_INQUIRY
, ACTUAL_NO
, BT_INTEGER
, di
, GFC_STD_F95
,
2135 gfc_check_size
, gfc_simplify_size
, NULL
,
2136 ar
, BT_REAL
, dr
, REQUIRED
, dm
, BT_INTEGER
, ii
, OPTIONAL
);
2138 make_generic ("size", GFC_ISYM_SIZE
, GFC_STD_F95
);
2140 add_sym_1 ("sizeof", GFC_ISYM_SIZEOF
, NO_CLASS
, ACTUAL_NO
, BT_INTEGER
, ii
,
2141 GFC_STD_GNU
, gfc_check_sizeof
, NULL
, NULL
,
2142 i
, BT_UNKNOWN
, 0, REQUIRED
);
2144 make_generic ("sizeof", GFC_ISYM_SIZEOF
, GFC_STD_GNU
);
2146 add_sym_1 ("spacing", GFC_ISYM_SPACING
, CLASS_ELEMENTAL
, ACTUAL_NO
, BT_REAL
, dr
, GFC_STD_F95
,
2147 gfc_check_x
, gfc_simplify_spacing
, gfc_resolve_spacing
,
2148 x
, BT_REAL
, dr
, REQUIRED
);
2150 make_generic ("spacing", GFC_ISYM_SPACING
, GFC_STD_F95
);
2152 add_sym_3 ("spread", GFC_ISYM_SPREAD
, CLASS_TRANSFORMATIONAL
, ACTUAL_NO
, BT_REAL
, dr
, GFC_STD_F95
,
2153 gfc_check_spread
, NULL
, gfc_resolve_spread
,
2154 src
, BT_REAL
, dr
, REQUIRED
, dm
, BT_INTEGER
, ii
, REQUIRED
,
2155 ncopies
, BT_INTEGER
, di
, REQUIRED
);
2157 make_generic ("spread", GFC_ISYM_SPREAD
, GFC_STD_F95
);
2159 add_sym_1 ("sqrt", GFC_ISYM_SQRT
, CLASS_ELEMENTAL
, ACTUAL_YES
, BT_REAL
, dr
, GFC_STD_F77
,
2160 gfc_check_fn_rc
, gfc_simplify_sqrt
, gfc_resolve_sqrt
,
2161 x
, BT_REAL
, dr
, REQUIRED
);
2163 add_sym_1 ("dsqrt", GFC_ISYM_SQRT
, CLASS_ELEMENTAL
, ACTUAL_YES
, BT_REAL
, dd
, GFC_STD_F77
,
2164 NULL
, gfc_simplify_sqrt
, gfc_resolve_sqrt
,
2165 x
, BT_REAL
, dd
, REQUIRED
);
2167 add_sym_1 ("csqrt", GFC_ISYM_SQRT
, CLASS_ELEMENTAL
, ACTUAL_YES
, BT_COMPLEX
, dz
, GFC_STD_F77
,
2168 NULL
, gfc_simplify_sqrt
, gfc_resolve_sqrt
,
2169 x
, BT_COMPLEX
, dz
, REQUIRED
);
2171 add_sym_1 ("zsqrt", GFC_ISYM_SQRT
, CLASS_ELEMENTAL
, ACTUAL_YES
, BT_COMPLEX
, dd
, GFC_STD_GNU
,
2172 NULL
, gfc_simplify_sqrt
, gfc_resolve_sqrt
,
2173 x
, BT_COMPLEX
, dd
, REQUIRED
);
2175 make_alias ("cdsqrt", GFC_STD_GNU
);
2177 make_generic ("sqrt", GFC_ISYM_SQRT
, GFC_STD_F77
);
2179 add_sym_2 ("stat", GFC_ISYM_STAT
, NO_CLASS
, ACTUAL_NO
, BT_INTEGER
, di
, GFC_STD_GNU
,
2180 gfc_check_stat
, NULL
, gfc_resolve_stat
,
2181 a
, BT_CHARACTER
, dc
, REQUIRED
, b
, BT_INTEGER
, di
, REQUIRED
);
2183 make_generic ("stat", GFC_ISYM_STAT
, GFC_STD_GNU
);
2185 add_sym_3red ("sum", GFC_ISYM_SUM
, CLASS_TRANSFORMATIONAL
, ACTUAL_NO
, BT_REAL
, dr
, GFC_STD_F95
,
2186 gfc_check_product_sum
, NULL
, gfc_resolve_sum
,
2187 ar
, BT_REAL
, dr
, REQUIRED
, dm
, BT_INTEGER
, ii
, OPTIONAL
,
2188 msk
, BT_LOGICAL
, dl
, OPTIONAL
);
2190 make_generic ("sum", GFC_ISYM_SUM
, GFC_STD_F95
);
2192 add_sym_2 ("symlnk", GFC_ISYM_SYMLNK
, NO_CLASS
, ACTUAL_NO
, BT_INTEGER
, di
, GFC_STD_GNU
,
2193 gfc_check_symlnk
, NULL
, gfc_resolve_symlnk
,
2194 a
, BT_CHARACTER
, dc
, REQUIRED
, b
, BT_CHARACTER
, dc
, REQUIRED
);
2196 make_generic ("symlnk", GFC_ISYM_SYMLNK
, GFC_STD_GNU
);
2198 add_sym_1 ("system", GFC_ISYM_SYSTEM
, NO_CLASS
, ACTUAL_NO
, BT_INTEGER
, di
, GFC_STD_GNU
,
2200 c
, BT_CHARACTER
, dc
, REQUIRED
);
2202 make_generic ("system", GFC_ISYM_SYSTEM
, GFC_STD_GNU
);
2204 add_sym_1 ("tan", GFC_ISYM_TAN
, CLASS_ELEMENTAL
, ACTUAL_YES
, BT_REAL
, dr
, GFC_STD_F77
,
2205 gfc_check_fn_r
, gfc_simplify_tan
, gfc_resolve_tan
,
2206 x
, BT_REAL
, dr
, REQUIRED
);
2208 add_sym_1 ("dtan", GFC_ISYM_TAN
, CLASS_ELEMENTAL
, ACTUAL_YES
, BT_REAL
, dd
, GFC_STD_F77
,
2209 NULL
, gfc_simplify_tan
, gfc_resolve_tan
,
2210 x
, BT_REAL
, dd
, REQUIRED
);
2212 make_generic ("tan", GFC_ISYM_TAN
, GFC_STD_F77
);
2214 add_sym_1 ("tanh", GFC_ISYM_TANH
, CLASS_ELEMENTAL
, ACTUAL_YES
, BT_REAL
, dr
, GFC_STD_F77
,
2215 gfc_check_fn_r
, gfc_simplify_tanh
, gfc_resolve_tanh
,
2216 x
, BT_REAL
, dr
, REQUIRED
);
2218 add_sym_1 ("dtanh", GFC_ISYM_TANH
, CLASS_ELEMENTAL
, ACTUAL_YES
, BT_REAL
, dd
, GFC_STD_F77
,
2219 NULL
, gfc_simplify_tanh
, gfc_resolve_tanh
,
2220 x
, BT_REAL
, dd
, REQUIRED
);
2222 make_generic ("tanh", GFC_ISYM_TANH
, GFC_STD_F77
);
2224 add_sym_0 ("time", GFC_ISYM_TIME
, NO_CLASS
, ACTUAL_NO
, BT_INTEGER
, di
, GFC_STD_GNU
,
2225 NULL
, NULL
, gfc_resolve_time
);
2227 make_generic ("time", GFC_ISYM_TIME
, GFC_STD_GNU
);
2229 add_sym_0 ("time8", GFC_ISYM_TIME8
, NO_CLASS
, ACTUAL_NO
, BT_INTEGER
, di
, GFC_STD_GNU
,
2230 NULL
, NULL
, gfc_resolve_time8
);
2232 make_generic ("time8", GFC_ISYM_TIME8
, GFC_STD_GNU
);
2234 add_sym_1 ("tiny", GFC_ISYM_TINY
, CLASS_INQUIRY
, ACTUAL_NO
, BT_REAL
, dr
, GFC_STD_F95
,
2235 gfc_check_x
, gfc_simplify_tiny
, NULL
,
2236 x
, BT_REAL
, dr
, REQUIRED
);
2238 make_generic ("tiny", GFC_ISYM_TINY
, GFC_STD_F95
);
2240 add_sym_3 ("transfer", GFC_ISYM_TRANSFER
, CLASS_TRANSFORMATIONAL
, ACTUAL_NO
, BT_REAL
, dr
, GFC_STD_F95
,
2241 gfc_check_transfer
, gfc_simplify_transfer
, gfc_resolve_transfer
,
2242 src
, BT_REAL
, dr
, REQUIRED
, mo
, BT_REAL
, dr
, REQUIRED
,
2243 sz
, BT_INTEGER
, di
, OPTIONAL
);
2245 make_generic ("transfer", GFC_ISYM_TRANSFER
, GFC_STD_F95
);
2247 add_sym_1 ("transpose", GFC_ISYM_TRANSPOSE
, CLASS_TRANSFORMATIONAL
, ACTUAL_NO
, BT_REAL
, dr
, GFC_STD_F95
,
2248 gfc_check_transpose
, NULL
, gfc_resolve_transpose
,
2249 m
, BT_REAL
, dr
, REQUIRED
);
2251 make_generic ("transpose", GFC_ISYM_TRANSPOSE
, GFC_STD_F95
);
2253 add_sym_1 ("trim", GFC_ISYM_TRIM
, CLASS_TRANSFORMATIONAL
, ACTUAL_NO
, BT_CHARACTER
, dc
, GFC_STD_F95
,
2254 gfc_check_trim
, gfc_simplify_trim
, gfc_resolve_trim
,
2255 stg
, BT_CHARACTER
, dc
, REQUIRED
);
2257 make_generic ("trim", GFC_ISYM_TRIM
, GFC_STD_F95
);
2259 add_sym_1 ("ttynam", GFC_ISYM_TTYNAM
, NO_CLASS
, ACTUAL_NO
, BT_CHARACTER
, 0, GFC_STD_GNU
,
2260 gfc_check_ttynam
, NULL
, gfc_resolve_ttynam
,
2261 ut
, BT_INTEGER
, di
, REQUIRED
);
2263 make_generic ("ttynam", GFC_ISYM_TTYNAM
, GFC_STD_GNU
);
2265 add_sym_2 ("ubound", GFC_ISYM_UBOUND
, CLASS_INQUIRY
, ACTUAL_NO
, BT_INTEGER
, di
, GFC_STD_F95
,
2266 gfc_check_ubound
, gfc_simplify_ubound
, gfc_resolve_ubound
,
2267 ar
, BT_REAL
, dr
, REQUIRED
, dm
, BT_INTEGER
, ii
, OPTIONAL
);
2269 make_generic ("ubound", GFC_ISYM_UBOUND
, GFC_STD_F95
);
2271 /* g77 compatibility for UMASK. */
2272 add_sym_1 ("umask", GFC_ISYM_UMASK
, NO_CLASS
, ACTUAL_NO
, BT_INTEGER
, di
, GFC_STD_GNU
,
2273 gfc_check_umask
, NULL
, gfc_resolve_umask
,
2274 a
, BT_INTEGER
, di
, REQUIRED
);
2276 make_generic ("umask", GFC_ISYM_UMASK
, GFC_STD_GNU
);
2278 /* g77 compatibility for UNLINK. */
2279 add_sym_1 ("unlink", GFC_ISYM_UNLINK
, NO_CLASS
, ACTUAL_NO
, BT_INTEGER
, di
, GFC_STD_GNU
,
2280 gfc_check_unlink
, NULL
, gfc_resolve_unlink
,
2281 a
, BT_CHARACTER
, dc
, REQUIRED
);
2283 make_generic ("unlink", GFC_ISYM_UNLINK
, GFC_STD_GNU
);
2285 add_sym_3 ("unpack", GFC_ISYM_UNPACK
, CLASS_TRANSFORMATIONAL
, ACTUAL_NO
, BT_REAL
, dr
, GFC_STD_F95
,
2286 gfc_check_unpack
, NULL
, gfc_resolve_unpack
,
2287 v
, BT_REAL
, dr
, REQUIRED
, msk
, BT_LOGICAL
, dl
, REQUIRED
,
2288 f
, BT_REAL
, dr
, REQUIRED
);
2290 make_generic ("unpack", GFC_ISYM_UNPACK
, GFC_STD_F95
);
2292 add_sym_3 ("verify", GFC_ISYM_VERIFY
, CLASS_ELEMENTAL
, ACTUAL_NO
, BT_INTEGER
, di
, GFC_STD_F95
,
2293 gfc_check_verify
, gfc_simplify_verify
, gfc_resolve_verify
,
2294 stg
, BT_CHARACTER
, dc
, REQUIRED
, set
, BT_CHARACTER
, dc
, REQUIRED
,
2295 bck
, BT_LOGICAL
, dl
, OPTIONAL
);
2297 make_generic ("verify", GFC_ISYM_VERIFY
, GFC_STD_F95
);
2299 add_sym_1 ("loc", GFC_ISYM_LOC
, NO_CLASS
, ACTUAL_NO
, BT_INTEGER
, ii
, GFC_STD_GNU
,
2300 gfc_check_loc
, NULL
, gfc_resolve_loc
,
2301 ar
, BT_UNKNOWN
, 0, REQUIRED
);
2303 make_generic ("loc", GFC_ISYM_LOC
, GFC_STD_GNU
);
2307 /* Add intrinsic subroutines. */
2310 add_subroutines (void)
2312 /* Argument names as in the standard (to be used as argument keywords). */
2314 *h
= "harvest", *dt
= "date", *vl
= "values", *pt
= "put",
2315 *c
= "count", *tm
= "time", *tp
= "topos", *gt
= "get",
2316 *t
= "to", *zn
= "zone", *fp
= "frompos", *cm
= "count_max",
2317 *f
= "from", *sz
= "size", *ln
= "len", *cr
= "count_rate",
2318 *com
= "command", *length
= "length", *st
= "status",
2319 *val
= "value", *num
= "number", *name
= "name",
2320 *trim_name
= "trim_name", *ut
= "unit", *han
= "handler",
2321 *sec
= "seconds", *res
= "result", *of
= "offset", *md
= "mode",
2324 int di
, dr
, dc
, dl
, ii
;
2326 di
= gfc_default_integer_kind
;
2327 dr
= gfc_default_real_kind
;
2328 dc
= gfc_default_character_kind
;
2329 dl
= gfc_default_logical_kind
;
2330 ii
= gfc_index_integer_kind
;
2332 add_sym_0s ("abort", GFC_ISYM_ABORT
, GFC_STD_GNU
, NULL
);
2336 add_sym_1s ("cpu_time", GFC_ISYM_CPU_TIME
, NO_CLASS
, BT_UNKNOWN
, 0, GFC_STD_F95
,
2337 gfc_check_cpu_time
, NULL
, gfc_resolve_cpu_time
,
2338 tm
, BT_REAL
, dr
, REQUIRED
);
2340 /* More G77 compatibility garbage. */
2341 add_sym_2s ("ctime", GFC_ISYM_CTIME
, NO_CLASS
, BT_UNKNOWN
, 0, GFC_STD_GNU
,
2342 gfc_check_ctime_sub
, NULL
, gfc_resolve_ctime_sub
,
2343 tm
, BT_INTEGER
, di
, REQUIRED
, res
, BT_CHARACTER
, dc
, REQUIRED
);
2345 add_sym_1s ("idate", GFC_ISYM_IDATE
, NO_CLASS
, BT_UNKNOWN
, 0, GFC_STD_GNU
,
2346 gfc_check_itime_idate
, NULL
, gfc_resolve_idate
,
2347 vl
, BT_INTEGER
, 4, REQUIRED
);
2349 add_sym_1s ("itime", GFC_ISYM_ITIME
, NO_CLASS
, BT_UNKNOWN
, 0, GFC_STD_GNU
,
2350 gfc_check_itime_idate
, NULL
, gfc_resolve_itime
,
2351 vl
, BT_INTEGER
, 4, REQUIRED
);
2353 add_sym_2s ("ltime", GFC_ISYM_LTIME
, NO_CLASS
, BT_UNKNOWN
, 0, GFC_STD_GNU
,
2354 gfc_check_ltime_gmtime
, NULL
, gfc_resolve_ltime
,
2355 tm
, BT_INTEGER
, di
, REQUIRED
, vl
, BT_INTEGER
, di
, REQUIRED
);
2357 add_sym_2s ("gmtime", GFC_ISYM_GMTIME
, NO_CLASS
, BT_UNKNOWN
, 0, GFC_STD_GNU
,
2358 gfc_check_ltime_gmtime
, NULL
, gfc_resolve_gmtime
,
2359 tm
, BT_INTEGER
, di
, REQUIRED
, vl
, BT_INTEGER
, di
, REQUIRED
);
2361 add_sym_1s ("second", GFC_ISYM_SECOND
, NO_CLASS
, BT_UNKNOWN
, 0, GFC_STD_GNU
,
2362 gfc_check_second_sub
, NULL
, gfc_resolve_second_sub
,
2363 tm
, BT_REAL
, dr
, REQUIRED
);
2365 add_sym_2s ("chdir", GFC_ISYM_CHDIR
, NO_CLASS
, BT_UNKNOWN
, 0, GFC_STD_GNU
,
2366 gfc_check_chdir_sub
, NULL
, gfc_resolve_chdir_sub
,
2367 name
, BT_CHARACTER
, dc
, REQUIRED
, st
, BT_INTEGER
, di
, OPTIONAL
);
2369 add_sym_3s ("chmod", GFC_ISYM_CHMOD
, NO_CLASS
, BT_UNKNOWN
, 0, GFC_STD_GNU
,
2370 gfc_check_chmod_sub
, NULL
, gfc_resolve_chmod_sub
,
2371 name
, BT_CHARACTER
, dc
, REQUIRED
, md
, BT_CHARACTER
, dc
, REQUIRED
,
2372 st
, BT_INTEGER
, di
, OPTIONAL
);
2374 add_sym_4s ("date_and_time", GFC_ISYM_DATE_AND_TIME
, NO_CLASS
, BT_UNKNOWN
, 0, GFC_STD_F95
,
2375 gfc_check_date_and_time
, NULL
, NULL
,
2376 dt
, BT_CHARACTER
, dc
, OPTIONAL
, tm
, BT_CHARACTER
, dc
, OPTIONAL
,
2377 zn
, BT_CHARACTER
, dc
, OPTIONAL
, vl
, BT_INTEGER
, di
, OPTIONAL
);
2379 /* More G77 compatibility garbage. */
2380 add_sym_2s ("etime", GFC_ISYM_ETIME
, NO_CLASS
, BT_UNKNOWN
, 0, GFC_STD_GNU
,
2381 gfc_check_etime_sub
, NULL
, gfc_resolve_etime_sub
,
2382 vl
, BT_REAL
, 4, REQUIRED
, tm
, BT_REAL
, 4, REQUIRED
);
2384 add_sym_2s ("dtime", GFC_ISYM_DTIME
, NO_CLASS
, BT_UNKNOWN
, 0, GFC_STD_GNU
,
2385 gfc_check_etime_sub
, NULL
, gfc_resolve_etime_sub
,
2386 vl
, BT_REAL
, 4, REQUIRED
, tm
, BT_REAL
, 4, REQUIRED
);
2388 add_sym_1s ("fdate", GFC_ISYM_FDATE
, NO_CLASS
, BT_UNKNOWN
, 0, GFC_STD_GNU
,
2389 gfc_check_fdate_sub
, NULL
, gfc_resolve_fdate_sub
,
2390 dt
, BT_CHARACTER
, dc
, REQUIRED
);
2392 add_sym_1s ("gerror", GFC_ISYM_GERROR
, NO_CLASS
, BT_UNKNOWN
, 0, GFC_STD_GNU
,
2393 gfc_check_gerror
, NULL
, gfc_resolve_gerror
, res
, BT_CHARACTER
,
2396 add_sym_2s ("getcwd", GFC_ISYM_GETCWD
, NO_CLASS
, BT_UNKNOWN
, 0, GFC_STD_GNU
,
2397 gfc_check_getcwd_sub
, NULL
, gfc_resolve_getcwd_sub
,
2398 c
, BT_CHARACTER
, dc
, REQUIRED
, st
, BT_INTEGER
, di
, OPTIONAL
);
2400 add_sym_2s ("getenv", GFC_ISYM_GETENV
, NO_CLASS
, BT_UNKNOWN
, 0, GFC_STD_GNU
,
2402 name
, BT_CHARACTER
, dc
, REQUIRED
, val
, BT_CHARACTER
, dc
,
2405 add_sym_2s ("getarg", GFC_ISYM_GETARG
, NO_CLASS
, BT_UNKNOWN
, 0, GFC_STD_GNU
,
2406 NULL
, NULL
, gfc_resolve_getarg
,
2407 c
, BT_INTEGER
, di
, REQUIRED
, vl
, BT_CHARACTER
, dc
, REQUIRED
);
2409 add_sym_1s ("getlog", GFC_ISYM_GETLOG
, NO_CLASS
, BT_UNKNOWN
, 0, GFC_STD_GNU
,
2410 gfc_check_getlog
, NULL
, gfc_resolve_getlog
, c
, BT_CHARACTER
,
2413 /* F2003 commandline routines. */
2415 add_sym_3s ("get_command", GFC_ISYM_GET_COMMAND
, NO_CLASS
, BT_UNKNOWN
, 0, GFC_STD_F2003
,
2416 NULL
, NULL
, gfc_resolve_get_command
,
2417 com
, BT_CHARACTER
, dc
, OPTIONAL
,
2418 length
, BT_INTEGER
, di
, OPTIONAL
,
2419 st
, BT_INTEGER
, di
, OPTIONAL
);
2421 add_sym_4s ("get_command_argument", GFC_ISYM_GET_COMMAND_ARGUMENT
, NO_CLASS
, BT_UNKNOWN
, 0, GFC_STD_F2003
,
2422 NULL
, NULL
, gfc_resolve_get_command_argument
,
2423 num
, BT_INTEGER
, di
, REQUIRED
, val
, BT_CHARACTER
, dc
, OPTIONAL
,
2424 length
, BT_INTEGER
, di
, OPTIONAL
, st
, BT_INTEGER
, di
, OPTIONAL
);
2426 /* F2003 subroutine to get environment variables. */
2428 add_sym_5s ("get_environment_variable", GFC_ISYM_GET_ENVIRONMENT_VARIABLE
, NO_CLASS
, BT_UNKNOWN
, 0, GFC_STD_F2003
,
2429 NULL
, NULL
, gfc_resolve_get_environment_variable
,
2430 name
, BT_CHARACTER
, dc
, REQUIRED
,
2431 val
, BT_CHARACTER
, dc
, OPTIONAL
,
2432 length
, BT_INTEGER
, di
, OPTIONAL
, st
, BT_INTEGER
, di
, OPTIONAL
,
2433 trim_name
, BT_LOGICAL
, dl
, OPTIONAL
);
2435 add_sym_2s ("move_alloc", GFC_ISYM_MOVE_ALLOC
, NO_CLASS
, BT_UNKNOWN
, 0, GFC_STD_F2003
,
2436 gfc_check_move_alloc
, NULL
, NULL
,
2437 f
, BT_UNKNOWN
, 0, REQUIRED
,
2438 t
, BT_UNKNOWN
, 0, REQUIRED
);
2440 add_sym_5s ("mvbits", GFC_ISYM_MVBITS
, CLASS_ELEMENTAL
, BT_UNKNOWN
, 0, GFC_STD_F95
,
2441 gfc_check_mvbits
, gfc_simplify_mvbits
, gfc_resolve_mvbits
,
2442 f
, BT_INTEGER
, di
, REQUIRED
, fp
, BT_INTEGER
, di
, REQUIRED
,
2443 ln
, BT_INTEGER
, di
, REQUIRED
, t
, BT_INTEGER
, di
, REQUIRED
,
2444 tp
, BT_INTEGER
, di
, REQUIRED
);
2446 add_sym_1s ("random_number", GFC_ISYM_RANDOM_NUMBER
, NO_CLASS
, BT_UNKNOWN
, 0, GFC_STD_F95
,
2447 gfc_check_random_number
, NULL
, gfc_resolve_random_number
,
2448 h
, BT_REAL
, dr
, REQUIRED
);
2450 add_sym_3s ("random_seed", GFC_ISYM_RANDOM_SEED
, NO_CLASS
, BT_UNKNOWN
, 0, GFC_STD_F95
,
2451 gfc_check_random_seed
, NULL
, NULL
,
2452 sz
, BT_INTEGER
, di
, OPTIONAL
, pt
, BT_INTEGER
, di
, OPTIONAL
,
2453 gt
, BT_INTEGER
, di
, OPTIONAL
);
2455 /* More G77 compatibility garbage. */
2456 add_sym_3s ("alarm", GFC_ISYM_ALARM
, NO_CLASS
, BT_UNKNOWN
, 0, GFC_STD_GNU
,
2457 gfc_check_alarm_sub
, NULL
, gfc_resolve_alarm_sub
,
2458 sec
, BT_INTEGER
, di
, REQUIRED
, han
, BT_UNKNOWN
, 0, REQUIRED
,
2459 st
, BT_INTEGER
, di
, OPTIONAL
);
2461 add_sym_1s ("srand", GFC_ISYM_SRAND
, NO_CLASS
, BT_UNKNOWN
, di
, GFC_STD_GNU
,
2462 gfc_check_srand
, NULL
, gfc_resolve_srand
,
2463 c
, BT_INTEGER
, 4, REQUIRED
);
2465 add_sym_1s ("exit", GFC_ISYM_EXIT
, NO_CLASS
, BT_UNKNOWN
, 0, GFC_STD_GNU
,
2466 gfc_check_exit
, NULL
, gfc_resolve_exit
,
2467 st
, BT_INTEGER
, di
, OPTIONAL
);
2471 add_sym_3s ("fgetc", GFC_ISYM_FGETC
, NO_CLASS
, BT_UNKNOWN
, 0, GFC_STD_GNU
,
2472 gfc_check_fgetputc_sub
, NULL
, gfc_resolve_fgetc_sub
,
2473 ut
, BT_INTEGER
, di
, REQUIRED
, c
, BT_CHARACTER
, dc
, REQUIRED
,
2474 st
, BT_INTEGER
, di
, OPTIONAL
);
2476 add_sym_2s ("fget", GFC_ISYM_FGET
, NO_CLASS
, BT_UNKNOWN
, 0, GFC_STD_GNU
,
2477 gfc_check_fgetput_sub
, NULL
, gfc_resolve_fget_sub
,
2478 c
, BT_CHARACTER
, dc
, REQUIRED
, st
, BT_INTEGER
, di
, OPTIONAL
);
2480 add_sym_1s ("flush", GFC_ISYM_FLUSH
, NO_CLASS
, BT_UNKNOWN
, 0, GFC_STD_GNU
,
2481 gfc_check_flush
, NULL
, gfc_resolve_flush
,
2482 c
, BT_INTEGER
, di
, OPTIONAL
);
2484 add_sym_3s ("fputc", GFC_ISYM_FPUTC
, NO_CLASS
, BT_UNKNOWN
, 0, GFC_STD_GNU
,
2485 gfc_check_fgetputc_sub
, NULL
, gfc_resolve_fputc_sub
,
2486 ut
, BT_INTEGER
, di
, REQUIRED
, c
, BT_CHARACTER
, dc
, REQUIRED
,
2487 st
, BT_INTEGER
, di
, OPTIONAL
);
2489 add_sym_2s ("fput", GFC_ISYM_FPUT
, NO_CLASS
, BT_UNKNOWN
, 0, GFC_STD_GNU
,
2490 gfc_check_fgetput_sub
, NULL
, gfc_resolve_fput_sub
,
2491 c
, BT_CHARACTER
, dc
, REQUIRED
, st
, BT_INTEGER
, di
, OPTIONAL
);
2493 add_sym_1s ("free", GFC_ISYM_FREE
, NO_CLASS
, BT_UNKNOWN
, 0, GFC_STD_GNU
, gfc_check_free
,
2494 NULL
, gfc_resolve_free
, c
, BT_INTEGER
, ii
, REQUIRED
);
2496 add_sym_4s ("fseek", GFC_ISYM_FSEEK
, NO_CLASS
, BT_UNKNOWN
, 0, GFC_STD_GNU
,
2497 gfc_check_fseek_sub
, NULL
, gfc_resolve_fseek_sub
,
2498 ut
, BT_INTEGER
, di
, REQUIRED
, of
, BT_INTEGER
, di
, REQUIRED
,
2499 whence
, BT_INTEGER
, di
, REQUIRED
, st
, BT_INTEGER
, di
, OPTIONAL
);
2501 add_sym_2s ("ftell", GFC_ISYM_FTELL
, NO_CLASS
, BT_UNKNOWN
, 0, GFC_STD_GNU
,
2502 gfc_check_ftell_sub
, NULL
, gfc_resolve_ftell_sub
,
2503 ut
, BT_INTEGER
, di
, REQUIRED
, of
, BT_INTEGER
, ii
, REQUIRED
);
2505 add_sym_2s ("hostnm", GFC_ISYM_HOSTNM
, NO_CLASS
, BT_UNKNOWN
, 0, GFC_STD_GNU
,
2506 gfc_check_hostnm_sub
, NULL
, gfc_resolve_hostnm_sub
,
2507 c
, BT_CHARACTER
, dc
, REQUIRED
, st
, BT_INTEGER
, di
, OPTIONAL
);
2509 add_sym_3s ("kill", GFC_ISYM_KILL
, NO_CLASS
, BT_UNKNOWN
, 0, GFC_STD_GNU
, gfc_check_kill_sub
,
2510 NULL
, gfc_resolve_kill_sub
, c
, BT_INTEGER
, di
, REQUIRED
,
2511 val
, BT_INTEGER
, di
, REQUIRED
, st
, BT_INTEGER
, di
, OPTIONAL
);
2513 add_sym_3s ("link", GFC_ISYM_LINK
, NO_CLASS
, BT_UNKNOWN
, 0, GFC_STD_GNU
,
2514 gfc_check_link_sub
, NULL
, gfc_resolve_link_sub
,
2515 name
, BT_CHARACTER
, dc
, REQUIRED
, val
, BT_CHARACTER
,
2516 dc
, REQUIRED
, st
, BT_INTEGER
, di
, OPTIONAL
);
2518 add_sym_1s ("perror", GFC_ISYM_PERROR
, NO_CLASS
, BT_UNKNOWN
, 0, GFC_STD_GNU
,
2519 gfc_check_perror
, NULL
, gfc_resolve_perror
,
2520 c
, BT_CHARACTER
, dc
, REQUIRED
);
2522 add_sym_3s ("rename", GFC_ISYM_RENAME
, NO_CLASS
, BT_UNKNOWN
, 0, GFC_STD_GNU
,
2523 gfc_check_rename_sub
, NULL
, gfc_resolve_rename_sub
,
2524 name
, BT_CHARACTER
, dc
, REQUIRED
, val
, BT_CHARACTER
,
2525 dc
, REQUIRED
, st
, BT_INTEGER
, di
, OPTIONAL
);
2527 add_sym_1s ("sleep", GFC_ISYM_SLEEP
, NO_CLASS
, BT_UNKNOWN
, 0, GFC_STD_GNU
,
2528 gfc_check_sleep_sub
, NULL
, gfc_resolve_sleep_sub
,
2529 val
, BT_CHARACTER
, dc
, REQUIRED
);
2531 add_sym_3s ("fstat", GFC_ISYM_FSTAT
, NO_CLASS
, BT_UNKNOWN
, 0, GFC_STD_GNU
,
2532 gfc_check_fstat_sub
, NULL
, gfc_resolve_fstat_sub
,
2533 ut
, BT_INTEGER
, di
, REQUIRED
, vl
, BT_INTEGER
, di
, REQUIRED
,
2534 st
, BT_INTEGER
, di
, OPTIONAL
);
2536 add_sym_3s ("lstat", GFC_ISYM_LSTAT
, NO_CLASS
, BT_UNKNOWN
, 0, GFC_STD_GNU
,
2537 gfc_check_stat_sub
, NULL
, gfc_resolve_lstat_sub
,
2538 name
, BT_CHARACTER
, dc
, REQUIRED
, vl
, BT_INTEGER
, di
, REQUIRED
,
2539 st
, BT_INTEGER
, di
, OPTIONAL
);
2541 add_sym_3s ("stat", GFC_ISYM_STAT
, NO_CLASS
, BT_UNKNOWN
, 0, GFC_STD_GNU
,
2542 gfc_check_stat_sub
, NULL
, gfc_resolve_stat_sub
,
2543 name
, BT_CHARACTER
, dc
, REQUIRED
, vl
, BT_INTEGER
, di
, REQUIRED
,
2544 st
, BT_INTEGER
, di
, OPTIONAL
);
2546 add_sym_3s ("signal", GFC_ISYM_SIGNAL
, NO_CLASS
, BT_UNKNOWN
, 0, GFC_STD_GNU
,
2547 gfc_check_signal_sub
, NULL
, gfc_resolve_signal_sub
,
2548 num
, BT_INTEGER
, di
, REQUIRED
, han
, BT_UNKNOWN
, 0, REQUIRED
,
2549 st
, BT_INTEGER
, di
, OPTIONAL
);
2551 add_sym_3s ("symlnk", GFC_ISYM_SYMLINK
, NO_CLASS
, BT_UNKNOWN
, 0, GFC_STD_GNU
,
2552 gfc_check_symlnk_sub
, NULL
, gfc_resolve_symlnk_sub
,
2553 name
, BT_CHARACTER
, dc
, REQUIRED
, val
, BT_CHARACTER
,
2554 dc
, REQUIRED
, st
, BT_INTEGER
, di
, OPTIONAL
);
2556 add_sym_2s ("system", GFC_ISYM_SYSTEM
, NO_CLASS
, BT_UNKNOWN
, 0, GFC_STD_GNU
,
2557 NULL
, NULL
, gfc_resolve_system_sub
,
2558 c
, BT_CHARACTER
, dc
, REQUIRED
, st
, BT_INTEGER
, di
, OPTIONAL
);
2560 add_sym_3s ("system_clock", GFC_ISYM_SYSTEM_CLOCK
, NO_CLASS
, BT_UNKNOWN
, 0, GFC_STD_F95
,
2561 gfc_check_system_clock
, NULL
, gfc_resolve_system_clock
,
2562 c
, BT_INTEGER
, di
, OPTIONAL
, cr
, BT_INTEGER
, di
, OPTIONAL
,
2563 cm
, BT_INTEGER
, di
, OPTIONAL
);
2565 add_sym_2s ("ttynam", GFC_ISYM_TTYNAM
, NO_CLASS
, BT_UNKNOWN
, 0, GFC_STD_GNU
,
2566 gfc_check_ttynam_sub
, NULL
, gfc_resolve_ttynam_sub
,
2567 ut
, BT_INTEGER
, di
, REQUIRED
, name
, BT_CHARACTER
, dc
, REQUIRED
);
2569 add_sym_2s ("umask", GFC_ISYM_UMASK
, NO_CLASS
, BT_UNKNOWN
, 0, GFC_STD_GNU
,
2570 gfc_check_umask_sub
, NULL
, gfc_resolve_umask_sub
,
2571 val
, BT_INTEGER
, di
, REQUIRED
, num
, BT_INTEGER
, di
, OPTIONAL
);
2573 add_sym_2s ("unlink", GFC_ISYM_UNLINK
, NO_CLASS
, BT_UNKNOWN
, 0, GFC_STD_GNU
,
2574 gfc_check_unlink_sub
, NULL
, gfc_resolve_unlink_sub
,
2575 c
, BT_CHARACTER
, dc
, REQUIRED
, st
, BT_INTEGER
, di
, OPTIONAL
);
2579 /* Add a function to the list of conversion symbols. */
2582 add_conv (bt from_type
, int from_kind
, bt to_type
, int to_kind
, int standard
)
2584 gfc_typespec from
, to
;
2585 gfc_intrinsic_sym
*sym
;
2587 if (sizing
== SZ_CONVS
)
2593 gfc_clear_ts (&from
);
2594 from
.type
= from_type
;
2595 from
.kind
= from_kind
;
2601 sym
= conversion
+ nconv
;
2603 sym
->name
= conv_name (&from
, &to
);
2604 sym
->lib_name
= sym
->name
;
2605 sym
->simplify
.cc
= gfc_convert_constant
;
2606 sym
->standard
= standard
;
2608 sym
->conversion
= 1;
2610 sym
->id
= GFC_ISYM_CONVERSION
;
2616 /* Create gfc_intrinsic_sym nodes for all intrinsic conversion
2617 functions by looping over the kind tables. */
2620 add_conversions (void)
2624 /* Integer-Integer conversions. */
2625 for (i
= 0; gfc_integer_kinds
[i
].kind
!= 0; i
++)
2626 for (j
= 0; gfc_integer_kinds
[j
].kind
!= 0; j
++)
2631 add_conv (BT_INTEGER
, gfc_integer_kinds
[i
].kind
,
2632 BT_INTEGER
, gfc_integer_kinds
[j
].kind
, GFC_STD_F77
);
2635 /* Integer-Real/Complex conversions. */
2636 for (i
= 0; gfc_integer_kinds
[i
].kind
!= 0; i
++)
2637 for (j
= 0; gfc_real_kinds
[j
].kind
!= 0; j
++)
2639 add_conv (BT_INTEGER
, gfc_integer_kinds
[i
].kind
,
2640 BT_REAL
, gfc_real_kinds
[j
].kind
, GFC_STD_F77
);
2642 add_conv (BT_REAL
, gfc_real_kinds
[j
].kind
,
2643 BT_INTEGER
, gfc_integer_kinds
[i
].kind
, GFC_STD_F77
);
2645 add_conv (BT_INTEGER
, gfc_integer_kinds
[i
].kind
,
2646 BT_COMPLEX
, gfc_real_kinds
[j
].kind
, GFC_STD_F77
);
2648 add_conv (BT_COMPLEX
, gfc_real_kinds
[j
].kind
,
2649 BT_INTEGER
, gfc_integer_kinds
[i
].kind
, GFC_STD_F77
);
2652 if ((gfc_option
.allow_std
& GFC_STD_LEGACY
) != 0)
2654 /* Hollerith-Integer conversions. */
2655 for (i
= 0; gfc_integer_kinds
[i
].kind
!= 0; i
++)
2656 add_conv (BT_HOLLERITH
, gfc_default_character_kind
,
2657 BT_INTEGER
, gfc_integer_kinds
[i
].kind
, GFC_STD_LEGACY
);
2658 /* Hollerith-Real conversions. */
2659 for (i
= 0; gfc_real_kinds
[i
].kind
!= 0; i
++)
2660 add_conv (BT_HOLLERITH
, gfc_default_character_kind
,
2661 BT_REAL
, gfc_real_kinds
[i
].kind
, GFC_STD_LEGACY
);
2662 /* Hollerith-Complex conversions. */
2663 for (i
= 0; gfc_real_kinds
[i
].kind
!= 0; i
++)
2664 add_conv (BT_HOLLERITH
, gfc_default_character_kind
,
2665 BT_COMPLEX
, gfc_real_kinds
[i
].kind
, GFC_STD_LEGACY
);
2667 /* Hollerith-Character conversions. */
2668 add_conv (BT_HOLLERITH
, gfc_default_character_kind
, BT_CHARACTER
,
2669 gfc_default_character_kind
, GFC_STD_LEGACY
);
2671 /* Hollerith-Logical conversions. */
2672 for (i
= 0; gfc_logical_kinds
[i
].kind
!= 0; i
++)
2673 add_conv (BT_HOLLERITH
, gfc_default_character_kind
,
2674 BT_LOGICAL
, gfc_logical_kinds
[i
].kind
, GFC_STD_LEGACY
);
2677 /* Real/Complex - Real/Complex conversions. */
2678 for (i
= 0; gfc_real_kinds
[i
].kind
!= 0; i
++)
2679 for (j
= 0; gfc_real_kinds
[j
].kind
!= 0; j
++)
2683 add_conv (BT_REAL
, gfc_real_kinds
[i
].kind
,
2684 BT_REAL
, gfc_real_kinds
[j
].kind
, GFC_STD_F77
);
2686 add_conv (BT_COMPLEX
, gfc_real_kinds
[i
].kind
,
2687 BT_COMPLEX
, gfc_real_kinds
[j
].kind
, GFC_STD_F77
);
2690 add_conv (BT_REAL
, gfc_real_kinds
[i
].kind
,
2691 BT_COMPLEX
, gfc_real_kinds
[j
].kind
, GFC_STD_F77
);
2693 add_conv (BT_COMPLEX
, gfc_real_kinds
[i
].kind
,
2694 BT_REAL
, gfc_real_kinds
[j
].kind
, GFC_STD_F77
);
2697 /* Logical/Logical kind conversion. */
2698 for (i
= 0; gfc_logical_kinds
[i
].kind
; i
++)
2699 for (j
= 0; gfc_logical_kinds
[j
].kind
; j
++)
2704 add_conv (BT_LOGICAL
, gfc_logical_kinds
[i
].kind
,
2705 BT_LOGICAL
, gfc_logical_kinds
[j
].kind
, GFC_STD_F77
);
2708 /* Integer-Logical and Logical-Integer conversions. */
2709 if ((gfc_option
.allow_std
& GFC_STD_LEGACY
) != 0)
2710 for (i
=0; gfc_integer_kinds
[i
].kind
; i
++)
2711 for (j
=0; gfc_logical_kinds
[j
].kind
; j
++)
2713 add_conv (BT_INTEGER
, gfc_integer_kinds
[i
].kind
,
2714 BT_LOGICAL
, gfc_logical_kinds
[j
].kind
, GFC_STD_LEGACY
);
2715 add_conv (BT_LOGICAL
, gfc_logical_kinds
[j
].kind
,
2716 BT_INTEGER
, gfc_integer_kinds
[i
].kind
, GFC_STD_LEGACY
);
2721 /* Initialize the table of intrinsics. */
2723 gfc_intrinsic_init_1 (void)
2727 nargs
= nfunc
= nsub
= nconv
= 0;
2729 /* Create a namespace to hold the resolved intrinsic symbols. */
2730 gfc_intrinsic_namespace
= gfc_get_namespace (NULL
, 0);
2739 functions
= gfc_getmem (sizeof (gfc_intrinsic_sym
) * (nfunc
+ nsub
)
2740 + sizeof (gfc_intrinsic_arg
) * nargs
);
2742 next_sym
= functions
;
2743 subroutines
= functions
+ nfunc
;
2745 conversion
= gfc_getmem (sizeof (gfc_intrinsic_sym
) * nconv
);
2747 next_arg
= ((gfc_intrinsic_arg
*) (subroutines
+ nsub
)) - 1;
2749 sizing
= SZ_NOTHING
;
2756 /* Set the pure flag. All intrinsic functions are pure, and
2757 intrinsic subroutines are pure if they are elemental. */
2759 for (i
= 0; i
< nfunc
; i
++)
2760 functions
[i
].pure
= 1;
2762 for (i
= 0; i
< nsub
; i
++)
2763 subroutines
[i
].pure
= subroutines
[i
].elemental
;
2768 gfc_intrinsic_done_1 (void)
2770 gfc_free (functions
);
2771 gfc_free (conversion
);
2772 gfc_free_namespace (gfc_intrinsic_namespace
);
2776 /******** Subroutines to check intrinsic interfaces ***********/
2778 /* Given a formal argument list, remove any NULL arguments that may
2779 have been left behind by a sort against some formal argument list. */
2782 remove_nullargs (gfc_actual_arglist
**ap
)
2784 gfc_actual_arglist
*head
, *tail
, *next
;
2788 for (head
= *ap
; head
; head
= next
)
2792 if (head
->expr
== NULL
&& !head
->label
)
2795 gfc_free_actual_arglist (head
);
2814 /* Given an actual arglist and a formal arglist, sort the actual
2815 arglist so that its arguments are in a one-to-one correspondence
2816 with the format arglist. Arguments that are not present are given
2817 a blank gfc_actual_arglist structure. If something is obviously
2818 wrong (say, a missing required argument) we abort sorting and
2822 sort_actual (const char *name
, gfc_actual_arglist
**ap
,
2823 gfc_intrinsic_arg
*formal
, locus
*where
)
2825 gfc_actual_arglist
*actual
, *a
;
2826 gfc_intrinsic_arg
*f
;
2828 remove_nullargs (ap
);
2831 for (f
= formal
; f
; f
= f
->next
)
2837 if (f
== NULL
&& a
== NULL
) /* No arguments */
2841 { /* Put the nonkeyword arguments in a 1:1 correspondence */
2847 if (a
->name
!= NULL
)
2859 gfc_error ("Too many arguments in call to '%s' at %L", name
, where
);
2863 /* Associate the remaining actual arguments, all of which have
2864 to be keyword arguments. */
2865 for (; a
; a
= a
->next
)
2867 for (f
= formal
; f
; f
= f
->next
)
2868 if (strcmp (a
->name
, f
->name
) == 0)
2873 if (a
->name
[0] == '%')
2874 gfc_error ("The argument list functions %%VAL, %%LOC or %%REF "
2875 "are not allowed in this context at %L", where
);
2877 gfc_error ("Can't find keyword named '%s' in call to '%s' at %L",
2878 a
->name
, name
, where
);
2882 if (f
->actual
!= NULL
)
2884 gfc_error ("Argument '%s' is appears twice in call to '%s' at %L",
2885 f
->name
, name
, where
);
2893 /* At this point, all unmatched formal args must be optional. */
2894 for (f
= formal
; f
; f
= f
->next
)
2896 if (f
->actual
== NULL
&& f
->optional
== 0)
2898 gfc_error ("Missing actual argument '%s' in call to '%s' at %L",
2899 f
->name
, name
, where
);
2905 /* Using the formal argument list, string the actual argument list
2906 together in a way that corresponds with the formal list. */
2909 for (f
= formal
; f
; f
= f
->next
)
2911 if (f
->actual
&& f
->actual
->label
!= NULL
&& f
->ts
.type
)
2913 gfc_error ("ALTERNATE RETURN not permitted at %L", where
);
2917 if (f
->actual
== NULL
)
2919 a
= gfc_get_actual_arglist ();
2920 a
->missing_arg_type
= f
->ts
.type
;
2932 actual
->next
= NULL
; /* End the sorted argument list. */
2938 /* Compare an actual argument list with an intrinsic's formal argument
2939 list. The lists are checked for agreement of type. We don't check
2940 for arrayness here. */
2943 check_arglist (gfc_actual_arglist
**ap
, gfc_intrinsic_sym
*sym
,
2946 gfc_actual_arglist
*actual
;
2947 gfc_intrinsic_arg
*formal
;
2950 formal
= sym
->formal
;
2954 for (; formal
; formal
= formal
->next
, actual
= actual
->next
, i
++)
2956 if (actual
->expr
== NULL
)
2959 if (!gfc_compare_types (&formal
->ts
, &actual
->expr
->ts
))
2962 gfc_error ("Type of argument '%s' in call to '%s' at %L should "
2963 "be %s, not %s", gfc_current_intrinsic_arg
[i
],
2964 gfc_current_intrinsic
, &actual
->expr
->where
,
2965 gfc_typename (&formal
->ts
),
2966 gfc_typename (&actual
->expr
->ts
));
2975 /* Given a pointer to an intrinsic symbol and an expression node that
2976 represent the function call to that subroutine, figure out the type
2977 of the result. This may involve calling a resolution subroutine. */
2980 resolve_intrinsic (gfc_intrinsic_sym
*specific
, gfc_expr
*e
)
2982 gfc_expr
*a1
, *a2
, *a3
, *a4
, *a5
;
2983 gfc_actual_arglist
*arg
;
2985 if (specific
->resolve
.f1
== NULL
)
2987 if (e
->value
.function
.name
== NULL
)
2988 e
->value
.function
.name
= specific
->lib_name
;
2990 if (e
->ts
.type
== BT_UNKNOWN
)
2991 e
->ts
= specific
->ts
;
2995 arg
= e
->value
.function
.actual
;
2997 /* Special case hacks for MIN and MAX. */
2998 if (specific
->resolve
.f1m
== gfc_resolve_max
2999 || specific
->resolve
.f1m
== gfc_resolve_min
)
3001 (*specific
->resolve
.f1m
) (e
, arg
);
3007 (*specific
->resolve
.f0
) (e
);
3016 (*specific
->resolve
.f1
) (e
, a1
);
3025 (*specific
->resolve
.f2
) (e
, a1
, a2
);
3034 (*specific
->resolve
.f3
) (e
, a1
, a2
, a3
);
3043 (*specific
->resolve
.f4
) (e
, a1
, a2
, a3
, a4
);
3052 (*specific
->resolve
.f5
) (e
, a1
, a2
, a3
, a4
, a5
);
3056 gfc_internal_error ("resolve_intrinsic(): Too many args for intrinsic");
3060 /* Given an intrinsic symbol node and an expression node, call the
3061 simplification function (if there is one), perhaps replacing the
3062 expression with something simpler. We return FAILURE on an error
3063 of the simplification, SUCCESS if the simplification worked, even
3064 if nothing has changed in the expression itself. */
3067 do_simplify (gfc_intrinsic_sym
*specific
, gfc_expr
*e
)
3069 gfc_expr
*result
, *a1
, *a2
, *a3
, *a4
, *a5
;
3070 gfc_actual_arglist
*arg
;
3072 /* Max and min require special handling due to the variable number
3074 if (specific
->simplify
.f1
== gfc_simplify_min
)
3076 result
= gfc_simplify_min (e
);
3080 if (specific
->simplify
.f1
== gfc_simplify_max
)
3082 result
= gfc_simplify_max (e
);
3086 if (specific
->simplify
.f1
== NULL
)
3092 arg
= e
->value
.function
.actual
;
3096 result
= (*specific
->simplify
.f0
) ();
3103 if (specific
->simplify
.cc
== gfc_convert_constant
)
3105 result
= gfc_convert_constant (a1
, specific
->ts
.type
, specific
->ts
.kind
);
3109 /* TODO: Warn if -pedantic and initialization expression and arg
3110 types not integer or character */
3113 result
= (*specific
->simplify
.f1
) (a1
);
3120 result
= (*specific
->simplify
.f2
) (a1
, a2
);
3127 result
= (*specific
->simplify
.f3
) (a1
, a2
, a3
);
3134 result
= (*specific
->simplify
.f4
) (a1
, a2
, a3
, a4
);
3141 result
= (*specific
->simplify
.f5
) (a1
, a2
, a3
, a4
, a5
);
3144 ("do_simplify(): Too many args for intrinsic");
3151 if (result
== &gfc_bad_expr
)
3155 resolve_intrinsic (specific
, e
); /* Must call at run-time */
3158 result
->where
= e
->where
;
3159 gfc_replace_expr (e
, result
);
3166 /* Initialize the gfc_current_intrinsic_arg[] array for the benefit of
3167 error messages. This subroutine returns FAILURE if a subroutine
3168 has more than MAX_INTRINSIC_ARGS, in which case the actual argument
3169 list cannot match any intrinsic. */
3172 init_arglist (gfc_intrinsic_sym
*isym
)
3174 gfc_intrinsic_arg
*formal
;
3177 gfc_current_intrinsic
= isym
->name
;
3180 for (formal
= isym
->formal
; formal
; formal
= formal
->next
)
3182 if (i
>= MAX_INTRINSIC_ARGS
)
3183 gfc_internal_error ("init_arglist(): too many arguments");
3184 gfc_current_intrinsic_arg
[i
++] = formal
->name
;
3189 /* Given a pointer to an intrinsic symbol and an expression consisting
3190 of a function call, see if the function call is consistent with the
3191 intrinsic's formal argument list. Return SUCCESS if the expression
3192 and intrinsic match, FAILURE otherwise. */
3195 check_specific (gfc_intrinsic_sym
*specific
, gfc_expr
*expr
, int error_flag
)
3197 gfc_actual_arglist
*arg
, **ap
;
3200 ap
= &expr
->value
.function
.actual
;
3202 init_arglist (specific
);
3204 /* Don't attempt to sort the argument list for min or max. */
3205 if (specific
->check
.f1m
== gfc_check_min_max
3206 || specific
->check
.f1m
== gfc_check_min_max_integer
3207 || specific
->check
.f1m
== gfc_check_min_max_real
3208 || specific
->check
.f1m
== gfc_check_min_max_double
)
3209 return (*specific
->check
.f1m
) (*ap
);
3211 if (sort_actual (specific
->name
, ap
, specific
->formal
,
3212 &expr
->where
) == FAILURE
)
3215 if (specific
->check
.f3ml
== gfc_check_minloc_maxloc
)
3216 /* This is special because we might have to reorder the argument list. */
3217 t
= gfc_check_minloc_maxloc (*ap
);
3218 else if (specific
->check
.f3red
== gfc_check_minval_maxval
)
3219 /* This is also special because we also might have to reorder the
3221 t
= gfc_check_minval_maxval (*ap
);
3222 else if (specific
->check
.f3red
== gfc_check_product_sum
)
3223 /* Same here. The difference to the previous case is that we allow a
3224 general numeric type. */
3225 t
= gfc_check_product_sum (*ap
);
3228 if (specific
->check
.f1
== NULL
)
3230 t
= check_arglist (ap
, specific
, error_flag
);
3232 expr
->ts
= specific
->ts
;
3235 t
= do_check (specific
, *ap
);
3238 /* Check conformance of elemental intrinsics. */
3239 if (t
== SUCCESS
&& specific
->elemental
)
3242 gfc_expr
*first_expr
;
3243 arg
= expr
->value
.function
.actual
;
3245 /* There is no elemental intrinsic without arguments. */
3246 gcc_assert(arg
!= NULL
);
3247 first_expr
= arg
->expr
;
3249 for ( ; arg
&& arg
->expr
; arg
= arg
->next
, n
++)
3252 snprintf (buffer
, 80, "arguments '%s' and '%s' for intrinsic '%s'",
3253 gfc_current_intrinsic_arg
[0], gfc_current_intrinsic_arg
[n
],
3254 gfc_current_intrinsic
);
3255 if (gfc_check_conformance (buffer
, first_expr
, arg
->expr
) == FAILURE
)
3261 remove_nullargs (ap
);
3267 /* Check whether an intrinsic belongs to whatever standard the user
3271 check_intrinsic_standard (const char *name
, int standard
, locus
*where
)
3273 /* Do not warn about GNU-extensions if -std=gnu. */
3274 if (!gfc_option
.warn_nonstd_intrinsics
3275 || (standard
== GFC_STD_GNU
&& gfc_option
.warn_std
& GFC_STD_GNU
))
3278 if (gfc_notify_std (standard
, "Intrinsic '%s' at %L is not included "
3279 "in the selected standard", name
, where
) == FAILURE
)
3286 /* See if a function call corresponds to an intrinsic function call.
3289 MATCH_YES if the call corresponds to an intrinsic, simplification
3290 is done if possible.
3292 MATCH_NO if the call does not correspond to an intrinsic
3294 MATCH_ERROR if the call corresponds to an intrinsic but there was an
3295 error during the simplification process.
3297 The error_flag parameter enables an error reporting. */
3300 gfc_intrinsic_func_interface (gfc_expr
*expr
, int error_flag
)
3302 gfc_intrinsic_sym
*isym
, *specific
;
3303 gfc_actual_arglist
*actual
;
3307 if (expr
->value
.function
.isym
!= NULL
)
3308 return (do_simplify (expr
->value
.function
.isym
, expr
) == FAILURE
)
3309 ? MATCH_ERROR
: MATCH_YES
;
3311 gfc_suppress_error
= !error_flag
;
3314 for (actual
= expr
->value
.function
.actual
; actual
; actual
= actual
->next
)
3315 if (actual
->expr
!= NULL
)
3316 flag
|= (actual
->expr
->ts
.type
!= BT_INTEGER
3317 && actual
->expr
->ts
.type
!= BT_CHARACTER
);
3319 name
= expr
->symtree
->n
.sym
->name
;
3321 isym
= specific
= gfc_find_function (name
);
3324 gfc_suppress_error
= 0;
3328 if (check_intrinsic_standard (name
, isym
->standard
, &expr
->where
) == FAILURE
)
3331 gfc_current_intrinsic_where
= &expr
->where
;
3333 /* Bypass the generic list for min and max. */
3334 if (isym
->check
.f1m
== gfc_check_min_max
)
3336 init_arglist (isym
);
3338 if (gfc_check_min_max (expr
->value
.function
.actual
) == SUCCESS
)
3341 gfc_suppress_error
= 0;
3345 /* If the function is generic, check all of its specific
3346 incarnations. If the generic name is also a specific, we check
3347 that name last, so that any error message will correspond to the
3349 gfc_suppress_error
= 1;
3353 for (specific
= isym
->specific_head
; specific
;
3354 specific
= specific
->next
)
3356 if (specific
== isym
)
3358 if (check_specific (specific
, expr
, 0) == SUCCESS
)
3363 gfc_suppress_error
= !error_flag
;
3365 if (check_specific (isym
, expr
, error_flag
) == FAILURE
)
3367 gfc_suppress_error
= 0;
3374 expr
->value
.function
.isym
= specific
;
3375 gfc_intrinsic_symbol (expr
->symtree
->n
.sym
);
3377 gfc_suppress_error
= 0;
3378 if (do_simplify (specific
, expr
) == FAILURE
)
3381 /* F95, 7.1.6.1, Initialization expressions
3382 (4) An elemental intrinsic function reference of type integer or
3383 character where each argument is an initialization expression
3384 of type integer or character
3386 F2003, 7.1.7 Initialization expression
3387 (4) A reference to an elemental standard intrinsic function,
3388 where each argument is an initialization expression */
3392 && (expr
->ts
.type
!= BT_INTEGER
|| expr
->ts
.type
!= BT_CHARACTER
)
3393 && gfc_notify_std (GFC_STD_F2003
, "Extension: Evaluation of "
3394 "nonstandard initialization expression at %L",
3395 &expr
->where
) == FAILURE
)
3402 /* See if a CALL statement corresponds to an intrinsic subroutine.
3403 Returns MATCH_YES if the subroutine corresponds to an intrinsic,
3404 MATCH_NO if not, and MATCH_ERROR if there was an error (but did
3408 gfc_intrinsic_sub_interface (gfc_code
*c
, int error_flag
)
3410 gfc_intrinsic_sym
*isym
;
3413 name
= c
->symtree
->n
.sym
->name
;
3415 isym
= gfc_find_subroutine (name
);
3419 if (check_intrinsic_standard (name
, isym
->standard
, &c
->loc
) == FAILURE
)
3422 gfc_suppress_error
= !error_flag
;
3424 init_arglist (isym
);
3426 if (sort_actual (name
, &c
->ext
.actual
, isym
->formal
, &c
->loc
) == FAILURE
)
3429 if (isym
->check
.f1
!= NULL
)
3431 if (do_check (isym
, c
->ext
.actual
) == FAILURE
)
3436 if (check_arglist (&c
->ext
.actual
, isym
, 1) == FAILURE
)
3440 /* The subroutine corresponds to an intrinsic. Allow errors to be
3441 seen at this point. */
3442 gfc_suppress_error
= 0;
3444 if (isym
->resolve
.s1
!= NULL
)
3445 isym
->resolve
.s1 (c
);
3447 c
->resolved_sym
= gfc_get_intrinsic_sub_symbol (isym
->lib_name
);
3449 if (gfc_pure (NULL
) && !isym
->elemental
)
3451 gfc_error ("Subroutine call to intrinsic '%s' at %L is not PURE", name
,
3456 c
->resolved_sym
->attr
.noreturn
= isym
->noreturn
;
3461 gfc_suppress_error
= 0;
3466 /* Call gfc_convert_type() with warning enabled. */
3469 gfc_convert_type (gfc_expr
*expr
, gfc_typespec
*ts
, int eflag
)
3471 return gfc_convert_type_warn (expr
, ts
, eflag
, 1);
3475 /* Try to convert an expression (in place) from one type to another.
3476 'eflag' controls the behavior on error.
3478 The possible values are:
3480 1 Generate a gfc_error()
3481 2 Generate a gfc_internal_error().
3483 'wflag' controls the warning related to conversion. */
3486 gfc_convert_type_warn (gfc_expr
*expr
, gfc_typespec
*ts
, int eflag
, int wflag
)
3488 gfc_intrinsic_sym
*sym
;
3489 gfc_typespec from_ts
;
3495 from_ts
= expr
->ts
; /* expr->ts gets clobbered */
3497 if (ts
->type
== BT_UNKNOWN
)
3500 /* NULL and zero size arrays get their type here. */
3501 if (expr
->expr_type
== EXPR_NULL
3502 || (expr
->expr_type
== EXPR_ARRAY
&& expr
->value
.constructor
== NULL
))
3504 /* Sometimes the RHS acquire the type. */
3509 if (expr
->ts
.type
== BT_UNKNOWN
)
3512 if (expr
->ts
.type
== BT_DERIVED
&& ts
->type
== BT_DERIVED
3513 && gfc_compare_types (&expr
->ts
, ts
))
3516 sym
= find_conv (&expr
->ts
, ts
);
3520 /* At this point, a conversion is necessary. A warning may be needed. */
3521 if ((gfc_option
.warn_std
& sym
->standard
) != 0)
3522 gfc_warning_now ("Extension: Conversion from %s to %s at %L",
3523 gfc_typename (&from_ts
), gfc_typename (ts
), &expr
->where
);
3524 else if (wflag
&& gfc_option
.warn_conversion
)
3525 gfc_warning_now ("Conversion from %s to %s at %L",
3526 gfc_typename (&from_ts
), gfc_typename (ts
), &expr
->where
);
3528 /* Insert a pre-resolved function call to the right function. */
3529 old_where
= expr
->where
;
3531 shape
= expr
->shape
;
3533 new = gfc_get_expr ();
3536 new = gfc_build_conversion (new);
3537 new->value
.function
.name
= sym
->lib_name
;
3538 new->value
.function
.isym
= sym
;
3539 new->where
= old_where
;
3541 new->shape
= gfc_copy_shape (shape
, rank
);
3543 gfc_get_ha_sym_tree (sym
->name
, &new->symtree
);
3544 new->symtree
->n
.sym
->ts
= *ts
;
3545 new->symtree
->n
.sym
->attr
.flavor
= FL_PROCEDURE
;
3546 new->symtree
->n
.sym
->attr
.function
= 1;
3547 new->symtree
->n
.sym
->attr
.elemental
= 1;
3548 new->symtree
->n
.sym
->attr
.pure
= 1;
3549 new->symtree
->n
.sym
->attr
.referenced
= 1;
3550 gfc_intrinsic_symbol(new->symtree
->n
.sym
);
3551 gfc_commit_symbol (new->symtree
->n
.sym
);
3558 if (gfc_is_constant_expr (expr
->value
.function
.actual
->expr
)
3559 && do_simplify (sym
, expr
) == FAILURE
)
3564 return FAILURE
; /* Error already generated in do_simplify() */
3572 gfc_error ("Can't convert %s to %s at %L",
3573 gfc_typename (&from_ts
), gfc_typename (ts
), &expr
->where
);
3577 gfc_internal_error ("Can't convert %s to %s at %L",
3578 gfc_typename (&from_ts
), gfc_typename (ts
),