1 /* Build up a list of intrinsic subroutines and functions for the
3 Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation,
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
29 #include "intrinsic.h"
32 /* Namespace to hold the resolved symbols for intrinsic subroutines. */
33 static gfc_namespace
*gfc_intrinsic_namespace
;
35 int gfc_init_expr
= 0;
37 /* Pointers to an intrinsic function and its argument names that are being
40 const char *gfc_current_intrinsic
;
41 const char *gfc_current_intrinsic_arg
[MAX_INTRINSIC_ARGS
];
42 locus
*gfc_current_intrinsic_where
;
44 static gfc_intrinsic_sym
*functions
, *subroutines
, *conversion
, *next_sym
;
45 static gfc_intrinsic_arg
*next_arg
;
47 static int nfunc
, nsub
, nargs
, nconv
;
50 { SZ_NOTHING
= 0, SZ_SUBS
, SZ_FUNCS
, SZ_CONVS
}
56 /* Return a letter based on the passed type. Used to construct the
57 name of a type-dependent subroutine. */
60 gfc_type_letter (bt type
)
95 /* Get a symbol for a resolved name. */
98 gfc_get_intrinsic_sub_symbol (const char * name
)
102 gfc_get_symbol (name
, gfc_intrinsic_namespace
, &sym
);
103 sym
->attr
.always_explicit
= 1;
104 sym
->attr
.subroutine
= 1;
105 sym
->attr
.flavor
= FL_PROCEDURE
;
106 sym
->attr
.proc
= PROC_INTRINSIC
;
112 /* Return a pointer to the name of a conversion function given two
116 conv_name (gfc_typespec
* from
, gfc_typespec
* to
)
118 static char name
[30];
120 sprintf (name
, "__convert_%c%d_%c%d", gfc_type_letter (from
->type
),
121 from
->kind
, gfc_type_letter (to
->type
), to
->kind
);
123 return gfc_get_string (name
);
127 /* Given a pair of typespecs, find the gfc_intrinsic_sym node that
128 corresponds to the conversion. Returns NULL if the conversion
131 static gfc_intrinsic_sym
*
132 find_conv (gfc_typespec
* from
, gfc_typespec
* to
)
134 gfc_intrinsic_sym
*sym
;
138 target
= conv_name (from
, to
);
141 for (i
= 0; i
< nconv
; i
++, sym
++)
142 if (strcmp (target
, sym
->name
) == 0)
149 /* Interface to the check functions. We break apart an argument list
150 and call the proper check function rather than forcing each
151 function to manipulate the argument list. */
154 do_check (gfc_intrinsic_sym
* specific
, gfc_actual_arglist
* arg
)
156 gfc_expr
*a1
, *a2
, *a3
, *a4
, *a5
;
159 return (*specific
->check
.f0
) ();
164 return (*specific
->check
.f1
) (a1
);
169 return (*specific
->check
.f2
) (a1
, a2
);
174 return (*specific
->check
.f3
) (a1
, a2
, a3
);
179 return (*specific
->check
.f4
) (a1
, a2
, a3
, a4
);
184 return (*specific
->check
.f5
) (a1
, a2
, a3
, a4
, a5
);
186 gfc_internal_error ("do_check(): too many args");
190 /*********** Subroutines to build the intrinsic list ****************/
192 /* Add a single intrinsic symbol to the current list.
195 char * name of function
196 int whether function is elemental
197 int If the function can be used as an actual argument
198 bt return type of function
199 int kind of return type of function
200 int Fortran standard version
201 check pointer to check function
202 simplify pointer to simplification function
203 resolve pointer to resolution function
205 Optional arguments come in multiples of four:
206 char * name of argument
209 int arg optional flag (1=optional, 0=required)
211 The sequence is terminated by a NULL name.
213 TODO: Are checks on actual_ok implemented elsewhere, or is that just
217 add_sym (const char *name
, int elemental
, int actual_ok ATTRIBUTE_UNUSED
,
218 bt type
, int kind
, int standard
, gfc_check_f check
,
219 gfc_simplify_f simplify
, gfc_resolve_f resolve
, ...)
221 char buf
[GFC_MAX_SYMBOL_LEN
+ 11]; /* 10 for '_gfortran_', 1 for '\0' */
222 int optional
, first_flag
;
225 /* First check that the intrinsic belongs to the selected standard.
226 If not, don't add it to the symbol list. */
227 if (!(gfc_option
.allow_std
& standard
)
228 && gfc_option
.flag_all_intrinsics
== 0)
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
= elemental
;
249 next_sym
->ts
.type
= type
;
250 next_sym
->ts
.kind
= kind
;
251 next_sym
->standard
= standard
;
252 next_sym
->simplify
= simplify
;
253 next_sym
->check
= check
;
254 next_sym
->resolve
= resolve
;
255 next_sym
->specific
= 0;
256 next_sym
->generic
= 0;
260 gfc_internal_error ("add_sym(): Bad sizing mode");
263 va_start (argp
, resolve
);
269 name
= va_arg (argp
, char *);
273 type
= (bt
) va_arg (argp
, int);
274 kind
= va_arg (argp
, int);
275 optional
= va_arg (argp
, int);
277 if (sizing
!= SZ_NOTHING
)
284 next_sym
->formal
= next_arg
;
286 (next_arg
- 1)->next
= next_arg
;
290 strcpy (next_arg
->name
, name
);
291 next_arg
->ts
.type
= type
;
292 next_arg
->ts
.kind
= kind
;
293 next_arg
->optional
= optional
;
303 /* Add a symbol to the function list where the function takes
307 add_sym_0 (const char *name
, int elemental
, int actual_ok
, bt type
,
308 int kind
, int standard
,
310 gfc_expr
*(*simplify
)(void),
311 void (*resolve
)(gfc_expr
*))
321 add_sym (name
, elemental
, actual_ok
, type
, kind
, standard
, cf
, sf
, rf
,
326 /* Add a symbol to the subroutine list where the subroutine takes
330 add_sym_0s (const char * name
, int actual_ok
, int standard
,
331 void (*resolve
)(gfc_code
*))
341 add_sym (name
, 1, actual_ok
, BT_UNKNOWN
, 0, standard
, cf
, sf
, rf
,
346 /* Add a symbol to the function list where the function takes
350 add_sym_1 (const char *name
, int elemental
, int actual_ok
, bt type
,
351 int kind
, int standard
,
352 try (*check
)(gfc_expr
*),
353 gfc_expr
*(*simplify
)(gfc_expr
*),
354 void (*resolve
)(gfc_expr
*,gfc_expr
*),
355 const char* a1
, bt type1
, int kind1
, int optional1
)
365 add_sym (name
, elemental
, actual_ok
, type
, kind
, standard
, cf
, sf
, rf
,
366 a1
, type1
, kind1
, optional1
,
371 /* Add a symbol to the subroutine list where the subroutine takes
375 add_sym_1s (const char *name
, int elemental
, int actual_ok
, bt type
,
376 int kind
, int standard
,
377 try (*check
)(gfc_expr
*),
378 gfc_expr
*(*simplify
)(gfc_expr
*),
379 void (*resolve
)(gfc_code
*),
380 const char* a1
, bt type1
, int kind1
, int optional1
)
390 add_sym (name
, elemental
, actual_ok
, type
, kind
, standard
, cf
, sf
, rf
,
391 a1
, type1
, kind1
, optional1
,
396 /* Add a symbol from the MAX/MIN family of intrinsic functions to the
397 function. MAX et al take 2 or more arguments. */
400 add_sym_1m (const char *name
, int elemental
, int actual_ok
, bt type
,
401 int kind
, int standard
,
402 try (*check
)(gfc_actual_arglist
*),
403 gfc_expr
*(*simplify
)(gfc_expr
*),
404 void (*resolve
)(gfc_expr
*,gfc_actual_arglist
*),
405 const char* a1
, bt type1
, int kind1
, int optional1
,
406 const char* a2
, bt type2
, int kind2
, int optional2
)
416 add_sym (name
, elemental
, actual_ok
, type
, kind
, standard
, cf
, sf
, rf
,
417 a1
, type1
, kind1
, optional1
,
418 a2
, type2
, kind2
, optional2
,
423 /* Add a symbol to the function list where the function takes
427 add_sym_2 (const char *name
, int elemental
, int actual_ok
, bt type
,
428 int kind
, int standard
,
429 try (*check
)(gfc_expr
*,gfc_expr
*),
430 gfc_expr
*(*simplify
)(gfc_expr
*,gfc_expr
*),
431 void (*resolve
)(gfc_expr
*,gfc_expr
*,gfc_expr
*),
432 const char* a1
, bt type1
, int kind1
, int optional1
,
433 const char* a2
, bt type2
, int kind2
, int optional2
)
443 add_sym (name
, elemental
, actual_ok
, type
, kind
, standard
, cf
, sf
, rf
,
444 a1
, type1
, kind1
, optional1
,
445 a2
, type2
, kind2
, optional2
,
450 /* Add a symbol to the subroutine list where the subroutine takes
454 add_sym_2s (const char *name
, int elemental
, int actual_ok
, bt type
,
455 int kind
, int standard
,
456 try (*check
)(gfc_expr
*,gfc_expr
*),
457 gfc_expr
*(*simplify
)(gfc_expr
*,gfc_expr
*),
458 void (*resolve
)(gfc_code
*),
459 const char* a1
, bt type1
, int kind1
, int optional1
,
460 const char* a2
, bt type2
, int kind2
, int optional2
)
470 add_sym (name
, elemental
, actual_ok
, type
, kind
, standard
, cf
, sf
, rf
,
471 a1
, type1
, kind1
, optional1
,
472 a2
, type2
, kind2
, optional2
,
477 /* Add a symbol to the function list where the function takes
481 add_sym_3 (const char *name
, int elemental
, int actual_ok
, bt type
,
482 int kind
, int standard
,
483 try (*check
)(gfc_expr
*,gfc_expr
*,gfc_expr
*),
484 gfc_expr
*(*simplify
)(gfc_expr
*,gfc_expr
*,gfc_expr
*),
485 void (*resolve
)(gfc_expr
*,gfc_expr
*,gfc_expr
*,gfc_expr
*),
486 const char* a1
, bt type1
, int kind1
, int optional1
,
487 const char* a2
, bt type2
, int kind2
, int optional2
,
488 const char* a3
, bt type3
, int kind3
, int optional3
)
498 add_sym (name
, elemental
, actual_ok
, type
, kind
, standard
, cf
, sf
, rf
,
499 a1
, type1
, kind1
, optional1
,
500 a2
, type2
, kind2
, optional2
,
501 a3
, type3
, kind3
, optional3
,
506 /* MINLOC and MAXLOC get special treatment because their argument
507 might have to be reordered. */
510 add_sym_3ml (const char *name
, int elemental
,
511 int actual_ok
, bt type
, int kind
, int standard
,
512 try (*check
)(gfc_actual_arglist
*),
513 gfc_expr
*(*simplify
)(gfc_expr
*,gfc_expr
*,gfc_expr
*),
514 void (*resolve
)(gfc_expr
*,gfc_expr
*,gfc_expr
*,gfc_expr
*),
515 const char* a1
, bt type1
, int kind1
, int optional1
,
516 const char* a2
, bt type2
, int kind2
, int optional2
,
517 const char* a3
, bt type3
, int kind3
, int optional3
)
527 add_sym (name
, elemental
, actual_ok
, type
, kind
, standard
, cf
, sf
, rf
,
528 a1
, type1
, kind1
, optional1
,
529 a2
, type2
, kind2
, optional2
,
530 a3
, type3
, kind3
, optional3
,
535 /* MINVAL, MAXVAL, PRODUCT, and SUM also get special treatment because
536 their argument also might have to be reordered. */
539 add_sym_3red (const char *name
, int elemental
,
540 int actual_ok
, bt type
, int kind
, int standard
,
541 try (*check
)(gfc_actual_arglist
*),
542 gfc_expr
*(*simplify
)(gfc_expr
*,gfc_expr
*,gfc_expr
*),
543 void (*resolve
)(gfc_expr
*,gfc_expr
*,gfc_expr
*,gfc_expr
*),
544 const char* a1
, bt type1
, int kind1
, int optional1
,
545 const char* a2
, bt type2
, int kind2
, int optional2
,
546 const char* a3
, bt type3
, int kind3
, int optional3
)
556 add_sym (name
, elemental
, actual_ok
, type
, kind
, standard
, cf
, sf
, rf
,
557 a1
, type1
, kind1
, optional1
,
558 a2
, type2
, kind2
, optional2
,
559 a3
, type3
, kind3
, optional3
,
564 /* Add a symbol to the subroutine list where the subroutine takes
568 add_sym_3s (const char *name
, int elemental
, int actual_ok
, bt type
,
569 int kind
, int standard
,
570 try (*check
)(gfc_expr
*,gfc_expr
*,gfc_expr
*),
571 gfc_expr
*(*simplify
)(gfc_expr
*,gfc_expr
*,gfc_expr
*),
572 void (*resolve
)(gfc_code
*),
573 const char* a1
, bt type1
, int kind1
, int optional1
,
574 const char* a2
, bt type2
, int kind2
, int optional2
,
575 const char* a3
, bt type3
, int kind3
, int optional3
)
585 add_sym (name
, elemental
, actual_ok
, type
, kind
, standard
, cf
, sf
, rf
,
586 a1
, type1
, kind1
, optional1
,
587 a2
, type2
, kind2
, optional2
,
588 a3
, type3
, kind3
, optional3
,
593 /* Add a symbol to the function list where the function takes
597 add_sym_4 (const char *name
, int elemental
, int actual_ok
, bt type
,
598 int kind
, int standard
,
599 try (*check
)(gfc_expr
*,gfc_expr
*,gfc_expr
*,gfc_expr
*),
600 gfc_expr
*(*simplify
)(gfc_expr
*,gfc_expr
*,gfc_expr
*,gfc_expr
*),
601 void (*resolve
)(gfc_expr
*,gfc_expr
*,gfc_expr
*,gfc_expr
*,gfc_expr
*),
602 const char* a1
, bt type1
, int kind1
, int optional1
,
603 const char* a2
, bt type2
, int kind2
, int optional2
,
604 const char* a3
, bt type3
, int kind3
, int optional3
,
605 const char* a4
, bt type4
, int kind4
, int optional4
)
615 add_sym (name
, elemental
, actual_ok
, type
, kind
, standard
, cf
, sf
, rf
,
616 a1
, type1
, kind1
, optional1
,
617 a2
, type2
, kind2
, optional2
,
618 a3
, type3
, kind3
, optional3
,
619 a4
, type4
, kind4
, optional4
,
624 /* Add a symbol to the subroutine list where the subroutine takes
628 add_sym_4s (const char *name
, int elemental
, int actual_ok
,
629 bt type
, int kind
, int standard
,
630 try (*check
)(gfc_expr
*,gfc_expr
*,gfc_expr
*,gfc_expr
*),
631 gfc_expr
*(*simplify
)(gfc_expr
*,gfc_expr
*,gfc_expr
*,gfc_expr
*),
632 void (*resolve
)(gfc_code
*),
633 const char* a1
, bt type1
, int kind1
, int optional1
,
634 const char* a2
, bt type2
, int kind2
, int optional2
,
635 const char* a3
, bt type3
, int kind3
, int optional3
,
636 const char* a4
, bt type4
, int kind4
, int optional4
)
646 add_sym (name
, elemental
, actual_ok
, type
, kind
, standard
, cf
, sf
, rf
,
647 a1
, type1
, kind1
, optional1
,
648 a2
, type2
, kind2
, optional2
,
649 a3
, type3
, kind3
, optional3
,
650 a4
, type4
, kind4
, optional4
,
655 /* Add a symbol to the subroutine list where the subroutine takes
659 add_sym_5s (const char *name
, int elemental
, int actual_ok
,
660 bt type
, int kind
, int standard
,
661 try (*check
)(gfc_expr
*,gfc_expr
*,gfc_expr
*,gfc_expr
*,gfc_expr
*),
662 gfc_expr
*(*simplify
)(gfc_expr
*,gfc_expr
*,gfc_expr
*,gfc_expr
*,gfc_expr
*),
663 void (*resolve
)(gfc_code
*),
664 const char* a1
, bt type1
, int kind1
, int optional1
,
665 const char* a2
, bt type2
, int kind2
, int optional2
,
666 const char* a3
, bt type3
, int kind3
, int optional3
,
667 const char* a4
, bt type4
, int kind4
, int optional4
,
668 const char* a5
, bt type5
, int kind5
, int optional5
)
678 add_sym (name
, elemental
, actual_ok
, type
, kind
, standard
, cf
, sf
, rf
,
679 a1
, type1
, kind1
, optional1
,
680 a2
, type2
, kind2
, optional2
,
681 a3
, type3
, kind3
, optional3
,
682 a4
, type4
, kind4
, optional4
,
683 a5
, type5
, kind5
, optional5
,
688 /* Locate an intrinsic symbol given a base pointer, number of elements
689 in the table and a pointer to a name. Returns the NULL pointer if
690 a name is not found. */
692 static gfc_intrinsic_sym
*
693 find_sym (gfc_intrinsic_sym
* start
, int n
, const char *name
)
698 if (strcmp (name
, start
->name
) == 0)
709 /* Given a name, find a function in the intrinsic function table.
710 Returns NULL if not found. */
713 gfc_find_function (const char *name
)
715 gfc_intrinsic_sym
*sym
;
717 sym
= find_sym (functions
, nfunc
, name
);
719 sym
= find_sym (conversion
, nconv
, name
);
725 /* Given a name, find a function in the intrinsic subroutine table.
726 Returns NULL if not found. */
728 static gfc_intrinsic_sym
*
729 find_subroutine (const char *name
)
732 return find_sym (subroutines
, nsub
, name
);
736 /* Given a string, figure out if it is the name of a generic intrinsic
740 gfc_generic_intrinsic (const char *name
)
742 gfc_intrinsic_sym
*sym
;
744 sym
= gfc_find_function (name
);
745 return (sym
== NULL
) ? 0 : sym
->generic
;
749 /* Given a string, figure out if it is the name of a specific
750 intrinsic function or not. */
753 gfc_specific_intrinsic (const char *name
)
755 gfc_intrinsic_sym
*sym
;
757 sym
= gfc_find_function (name
);
758 return (sym
== NULL
) ? 0 : sym
->specific
;
762 /* Given a string, figure out if it is the name of an intrinsic
763 subroutine or function. There are no generic intrinsic
764 subroutines, they are all specific. */
767 gfc_intrinsic_name (const char *name
, int subroutine_flag
)
770 return subroutine_flag
?
771 find_subroutine (name
) != NULL
: gfc_find_function (name
) != NULL
;
775 /* Collect a set of intrinsic functions into a generic collection.
776 The first argument is the name of the generic function, which is
777 also the name of a specific function. The rest of the specifics
778 currently in the table are placed into the list of specific
779 functions associated with that generic. */
782 make_generic (const char *name
, gfc_generic_isym_id generic_id
, int standard
)
784 gfc_intrinsic_sym
*g
;
786 if (!(gfc_option
.allow_std
& standard
)
787 && gfc_option
.flag_all_intrinsics
== 0)
790 if (sizing
!= SZ_NOTHING
)
793 g
= gfc_find_function (name
);
795 gfc_internal_error ("make_generic(): Can't find generic symbol '%s'",
800 g
->generic_id
= generic_id
;
801 if ((g
+ 1)->name
!= NULL
)
802 g
->specific_head
= g
+ 1;
805 while (g
->name
!= NULL
)
809 g
->generic_id
= generic_id
;
818 /* Create a duplicate intrinsic function entry for the current
819 function, the only difference being the alternate name. Note that
820 we use argument lists more than once, but all argument lists are
821 freed as a single block. */
824 make_alias (const char *name
, int standard
)
827 /* First check that the intrinsic belongs to the selected standard.
828 If not, don't add it to the symbol list. */
829 if (!(gfc_option
.allow_std
& standard
)
830 && gfc_option
.flag_all_intrinsics
== 0)
844 next_sym
[0] = next_sym
[-1];
845 next_sym
->name
= gfc_get_string (name
);
854 /* Make the current subroutine noreturn. */
859 if (sizing
== SZ_NOTHING
)
860 next_sym
[-1].noreturn
= 1;
863 /* Add intrinsic functions. */
869 /* Argument names as in the standard (to be used as argument keywords). */
871 *a
= "a", *f
= "field", *pt
= "pointer", *tg
= "target",
872 *b
= "b", *m
= "matrix", *ma
= "matrix_a", *mb
= "matrix_b",
873 *c
= "c", *n
= "ncopies", *pos
= "pos", *bck
= "back",
874 *i
= "i", *v
= "vector", *va
= "vector_a", *vb
= "vector_b",
875 *j
= "j", *a1
= "a1", *fs
= "fsource", *ts
= "tsource",
876 *l
= "l", *a2
= "a2", *mo
= "mold", *ord
= "order",
877 *p
= "p", *ar
= "array", *shp
= "shape", *src
= "source",
878 *r
= "r", *bd
= "boundary", *pad
= "pad", *set
= "set",
879 *s
= "s", *dm
= "dim", *kind
= "kind", *msk
= "mask",
880 *x
= "x", *sh
= "shift", *stg
= "string", *ssg
= "substring",
881 *y
= "y", *sz
= "size", *sta
= "string_a", *stb
= "string_b",
882 *z
= "z", *ln
= "len", *ut
= "unit", *han
= "handler",
883 *num
= "number", *tm
= "time";
885 int di
, dr
, dd
, dl
, dc
, dz
, ii
;
887 di
= gfc_default_integer_kind
;
888 dr
= gfc_default_real_kind
;
889 dd
= gfc_default_double_kind
;
890 dl
= gfc_default_logical_kind
;
891 dc
= gfc_default_character_kind
;
892 dz
= gfc_default_complex_kind
;
893 ii
= gfc_index_integer_kind
;
895 add_sym_1 ("abs", 1, 1, BT_REAL
, dr
, GFC_STD_F77
,
896 gfc_check_abs
, gfc_simplify_abs
, gfc_resolve_abs
,
897 a
, BT_REAL
, dr
, REQUIRED
);
899 add_sym_1 ("iabs", 1, 1, BT_INTEGER
, di
, GFC_STD_F77
,
900 NULL
, gfc_simplify_abs
, gfc_resolve_abs
,
901 a
, BT_INTEGER
, di
, REQUIRED
);
903 add_sym_1 ("dabs", 1, 1, BT_REAL
, dd
, GFC_STD_F77
,
904 NULL
, gfc_simplify_abs
, gfc_resolve_abs
,
905 a
, BT_REAL
, dd
, REQUIRED
);
907 add_sym_1 ("cabs", 1, 1, BT_REAL
, dr
, GFC_STD_F77
,
908 NULL
, gfc_simplify_abs
, gfc_resolve_abs
,
909 a
, BT_COMPLEX
, dz
, REQUIRED
);
911 add_sym_1 ("zabs", 1, 1, BT_REAL
, dd
, GFC_STD_GNU
,
912 NULL
, gfc_simplify_abs
, gfc_resolve_abs
,
913 a
, BT_COMPLEX
, dd
, REQUIRED
);
915 make_alias ("cdabs", GFC_STD_GNU
);
917 make_generic ("abs", GFC_ISYM_ABS
, GFC_STD_F77
);
919 add_sym_1 ("achar", 1, 1, BT_CHARACTER
, dc
, GFC_STD_F95
,
920 gfc_check_achar
, gfc_simplify_achar
, NULL
,
921 i
, BT_INTEGER
, di
, REQUIRED
);
923 make_generic ("achar", GFC_ISYM_ACHAR
, GFC_STD_F95
);
925 add_sym_1 ("acos", 1, 1, BT_REAL
, dr
, GFC_STD_F77
,
926 gfc_check_fn_r
, gfc_simplify_acos
, gfc_resolve_acos
,
927 x
, BT_REAL
, dr
, REQUIRED
);
929 add_sym_1 ("dacos", 1, 1, BT_REAL
, dd
, GFC_STD_F77
,
930 NULL
, gfc_simplify_acos
, gfc_resolve_acos
,
931 x
, BT_REAL
, dd
, REQUIRED
);
933 make_generic ("acos", GFC_ISYM_ACOS
, GFC_STD_F77
);
935 add_sym_1 ("acosh", 1, 1, BT_REAL
, dr
, GFC_STD_GNU
,
936 gfc_check_fn_r
, gfc_simplify_acosh
, gfc_resolve_acosh
,
937 x
, BT_REAL
, dr
, REQUIRED
);
939 add_sym_1 ("dacosh", 1, 1, BT_REAL
, dd
, GFC_STD_GNU
,
940 NULL
, gfc_simplify_acosh
, gfc_resolve_acosh
,
941 x
, BT_REAL
, dd
, REQUIRED
);
943 make_generic ("acosh", GFC_ISYM_ACOSH
, GFC_STD_GNU
);
945 add_sym_1 ("adjustl", 1, 1, BT_CHARACTER
, dc
, GFC_STD_F95
,
946 NULL
, gfc_simplify_adjustl
, NULL
,
947 stg
, BT_CHARACTER
, dc
, REQUIRED
);
949 make_generic ("adjustl", GFC_ISYM_ADJUSTL
, GFC_STD_F95
);
951 add_sym_1 ("adjustr", 1, 1, BT_CHARACTER
, dc
, GFC_STD_F95
,
952 NULL
, gfc_simplify_adjustr
, NULL
,
953 stg
, BT_CHARACTER
, dc
, REQUIRED
);
955 make_generic ("adjustr", GFC_ISYM_ADJUSTR
, GFC_STD_F95
);
957 add_sym_1 ("aimag", 1, 1, BT_REAL
, dr
, GFC_STD_F77
,
958 gfc_check_fn_c
, gfc_simplify_aimag
, gfc_resolve_aimag
,
959 z
, BT_COMPLEX
, dz
, REQUIRED
);
961 make_alias ("imag", GFC_STD_GNU
);
962 make_alias ("imagpart", GFC_STD_GNU
);
964 add_sym_1 ("dimag", 1, 1, BT_REAL
, dd
, GFC_STD_GNU
,
965 NULL
, gfc_simplify_aimag
, gfc_resolve_aimag
,
966 z
, BT_COMPLEX
, dd
, REQUIRED
);
969 make_generic ("aimag", GFC_ISYM_AIMAG
, GFC_STD_F77
);
971 add_sym_2 ("aint", 1, 1, BT_REAL
, dr
, GFC_STD_F77
,
972 gfc_check_a_xkind
, gfc_simplify_aint
, gfc_resolve_aint
,
973 a
, BT_REAL
, dr
, REQUIRED
, kind
, BT_INTEGER
, di
, OPTIONAL
);
975 add_sym_1 ("dint", 1, 1, BT_REAL
, dd
, GFC_STD_F77
,
976 NULL
, gfc_simplify_dint
, gfc_resolve_dint
,
977 a
, BT_REAL
, dd
, REQUIRED
);
979 make_generic ("aint", GFC_ISYM_AINT
, GFC_STD_F77
);
981 add_sym_2 ("all", 0, 1, BT_UNKNOWN
, 0, GFC_STD_F95
,
982 gfc_check_all_any
, NULL
, gfc_resolve_all
,
983 msk
, BT_LOGICAL
, dl
, REQUIRED
, dm
, BT_INTEGER
, ii
, OPTIONAL
);
985 make_generic ("all", GFC_ISYM_ALL
, GFC_STD_F95
);
987 add_sym_1 ("allocated", 0, 1, BT_LOGICAL
, dl
, GFC_STD_F95
,
988 gfc_check_allocated
, NULL
, NULL
,
989 ar
, BT_UNKNOWN
, 0, REQUIRED
);
991 make_generic ("allocated", GFC_ISYM_ALLOCATED
, GFC_STD_F95
);
993 add_sym_2 ("anint", 1, 1, BT_REAL
, dr
, GFC_STD_F77
,
994 gfc_check_a_xkind
, gfc_simplify_anint
, gfc_resolve_anint
,
995 a
, BT_REAL
, dr
, REQUIRED
, kind
, BT_INTEGER
, di
, OPTIONAL
);
997 add_sym_1 ("dnint", 1, 1, BT_REAL
, dd
, GFC_STD_F77
,
998 NULL
, gfc_simplify_dnint
, gfc_resolve_dnint
,
999 a
, BT_REAL
, dd
, REQUIRED
);
1001 make_generic ("anint", GFC_ISYM_ANINT
, GFC_STD_F77
);
1003 add_sym_2 ("any", 0, 1, BT_UNKNOWN
, 0, GFC_STD_F95
,
1004 gfc_check_all_any
, NULL
, gfc_resolve_any
,
1005 msk
, BT_LOGICAL
, dl
, REQUIRED
, dm
, BT_INTEGER
, ii
, OPTIONAL
);
1007 make_generic ("any", GFC_ISYM_ANY
, GFC_STD_F95
);
1009 add_sym_1 ("asin", 1, 1, BT_REAL
, dr
, GFC_STD_F77
,
1010 gfc_check_fn_r
, gfc_simplify_asin
, gfc_resolve_asin
,
1011 x
, BT_REAL
, dr
, REQUIRED
);
1013 add_sym_1 ("dasin", 1, 1, BT_REAL
, dd
, GFC_STD_F77
,
1014 NULL
, gfc_simplify_asin
, gfc_resolve_asin
,
1015 x
, BT_REAL
, dd
, REQUIRED
);
1017 make_generic ("asin", GFC_ISYM_ASIN
, GFC_STD_F77
);
1019 add_sym_1 ("asinh", 1, 1, BT_REAL
, dr
, GFC_STD_GNU
,
1020 gfc_check_fn_r
, gfc_simplify_asinh
, gfc_resolve_asinh
,
1021 x
, BT_REAL
, dr
, REQUIRED
);
1023 add_sym_1 ("dasinh", 1, 1, BT_REAL
, dd
, GFC_STD_GNU
,
1024 NULL
, gfc_simplify_asinh
, gfc_resolve_asinh
,
1025 x
, BT_REAL
, dd
, REQUIRED
);
1027 make_generic ("asinh", GFC_ISYM_ASINH
, GFC_STD_GNU
);
1029 add_sym_2 ("associated", 0, 1, BT_LOGICAL
, dl
, GFC_STD_F95
,
1030 gfc_check_associated
, NULL
, NULL
,
1031 pt
, BT_UNKNOWN
, 0, REQUIRED
, tg
, BT_UNKNOWN
, 0, OPTIONAL
);
1033 make_generic ("associated", GFC_ISYM_ASSOCIATED
, GFC_STD_F95
);
1035 add_sym_1 ("atan", 1, 1, BT_REAL
, dr
, GFC_STD_F77
,
1036 gfc_check_fn_r
, gfc_simplify_atan
, gfc_resolve_atan
,
1037 x
, BT_REAL
, dr
, REQUIRED
);
1039 add_sym_1 ("datan", 1, 1, BT_REAL
, dd
, GFC_STD_F77
,
1040 NULL
, gfc_simplify_atan
, gfc_resolve_atan
,
1041 x
, BT_REAL
, dd
, REQUIRED
);
1043 make_generic ("atan", GFC_ISYM_ATAN
, GFC_STD_F77
);
1045 add_sym_1 ("atanh", 1, 1, BT_REAL
, dr
, GFC_STD_GNU
,
1046 gfc_check_fn_r
, gfc_simplify_atanh
, gfc_resolve_atanh
,
1047 x
, BT_REAL
, dr
, REQUIRED
);
1049 add_sym_1 ("datanh", 1, 1, BT_REAL
, dd
, GFC_STD_GNU
,
1050 NULL
, gfc_simplify_atanh
, gfc_resolve_atanh
,
1051 x
, BT_REAL
, dd
, REQUIRED
);
1053 make_generic ("atanh", GFC_ISYM_ATANH
, GFC_STD_GNU
);
1055 add_sym_2 ("atan2", 1, 1, BT_REAL
, dr
, GFC_STD_F77
,
1056 gfc_check_atan2
, gfc_simplify_atan2
, gfc_resolve_atan2
,
1057 y
, BT_REAL
, dr
, REQUIRED
, x
, BT_REAL
, dr
, REQUIRED
);
1059 add_sym_2 ("datan2", 1, 1, BT_REAL
, dd
, GFC_STD_F77
,
1060 NULL
, gfc_simplify_atan2
, gfc_resolve_atan2
,
1061 y
, BT_REAL
, dd
, REQUIRED
, x
, BT_REAL
, dd
, REQUIRED
);
1063 make_generic ("atan2", GFC_ISYM_ATAN2
, GFC_STD_F77
);
1065 /* Bessel and Neumann functions for G77 compatibility. */
1066 add_sym_1 ("besj0", 1, 0, BT_REAL
, dr
, GFC_STD_GNU
,
1067 gfc_check_g77_math1
, NULL
, gfc_resolve_g77_math1
,
1068 x
, BT_REAL
, dr
, REQUIRED
);
1070 add_sym_1 ("dbesj0", 1, 0, BT_REAL
, dd
, GFC_STD_GNU
,
1071 gfc_check_g77_math1
, NULL
, gfc_resolve_g77_math1
,
1072 x
, BT_REAL
, dd
, REQUIRED
);
1074 make_generic ("besj0", GFC_ISYM_J0
, GFC_STD_GNU
);
1076 add_sym_1 ("besj1", 1, 0, BT_REAL
, dr
, GFC_STD_GNU
,
1077 gfc_check_g77_math1
, NULL
, gfc_resolve_g77_math1
,
1078 x
, BT_REAL
, dr
, REQUIRED
);
1080 add_sym_1 ("dbesj1", 1, 0, BT_REAL
, dd
, GFC_STD_GNU
,
1081 gfc_check_g77_math1
, NULL
, gfc_resolve_g77_math1
,
1082 x
, BT_REAL
, dd
, REQUIRED
);
1084 make_generic ("besj1", GFC_ISYM_J1
, GFC_STD_GNU
);
1086 add_sym_2 ("besjn", 1, 0, BT_REAL
, dr
, GFC_STD_GNU
,
1087 gfc_check_besn
, NULL
, gfc_resolve_besn
,
1088 n
, BT_INTEGER
, di
, REQUIRED
, x
, BT_REAL
, dr
, REQUIRED
);
1090 add_sym_2 ("dbesjn", 1, 0, BT_REAL
, dd
, GFC_STD_GNU
,
1091 gfc_check_besn
, NULL
, gfc_resolve_besn
,
1092 n
, BT_INTEGER
, di
, REQUIRED
, x
, BT_REAL
, dd
, REQUIRED
);
1094 make_generic ("besjn", GFC_ISYM_JN
, GFC_STD_GNU
);
1096 add_sym_1 ("besy0", 1, 0, BT_REAL
, dr
, GFC_STD_GNU
,
1097 gfc_check_g77_math1
, NULL
, gfc_resolve_g77_math1
,
1098 x
, BT_REAL
, dr
, REQUIRED
);
1100 add_sym_1 ("dbesy0", 1, 0, BT_REAL
, dd
, GFC_STD_GNU
,
1101 gfc_check_g77_math1
, NULL
, gfc_resolve_g77_math1
,
1102 x
, BT_REAL
, dd
, REQUIRED
);
1104 make_generic ("besy0", GFC_ISYM_Y0
, GFC_STD_GNU
);
1106 add_sym_1 ("besy1", 1, 0, BT_REAL
, dr
, GFC_STD_GNU
,
1107 gfc_check_g77_math1
, NULL
, gfc_resolve_g77_math1
,
1108 x
, BT_REAL
, dr
, REQUIRED
);
1110 add_sym_1 ("dbesy1", 1, 0, BT_REAL
, dd
, GFC_STD_GNU
,
1111 gfc_check_g77_math1
, NULL
, gfc_resolve_g77_math1
,
1112 x
, BT_REAL
, dd
, REQUIRED
);
1114 make_generic ("besy1", GFC_ISYM_Y1
, GFC_STD_GNU
);
1116 add_sym_2 ("besyn", 1, 0, 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 ("dbesyn", 1, 0, 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 ("besyn", GFC_ISYM_YN
, GFC_STD_GNU
);
1126 add_sym_1 ("bit_size", 0, 1, BT_INTEGER
, di
, GFC_STD_F95
,
1127 gfc_check_i
, gfc_simplify_bit_size
, NULL
,
1128 i
, BT_INTEGER
, di
, REQUIRED
);
1130 make_generic ("bit_size", GFC_ISYM_NONE
, GFC_STD_F95
);
1132 add_sym_2 ("btest", 1, 1, BT_LOGICAL
, dl
, GFC_STD_F95
,
1133 gfc_check_btest
, gfc_simplify_btest
, gfc_resolve_btest
,
1134 i
, BT_INTEGER
, di
, REQUIRED
, pos
, BT_INTEGER
, di
, REQUIRED
);
1136 make_generic ("btest", GFC_ISYM_BTEST
, GFC_STD_F95
);
1138 add_sym_2 ("ceiling", 1, 1, BT_INTEGER
, di
, GFC_STD_F95
,
1139 gfc_check_a_ikind
, gfc_simplify_ceiling
, gfc_resolve_ceiling
,
1140 a
, BT_REAL
, dr
, REQUIRED
, kind
, BT_INTEGER
, di
, OPTIONAL
);
1142 make_generic ("ceiling", GFC_ISYM_CEILING
, GFC_STD_F95
);
1144 add_sym_2 ("char", 1, 0, BT_CHARACTER
, dc
, GFC_STD_F77
,
1145 gfc_check_char
, gfc_simplify_char
, gfc_resolve_char
,
1146 i
, BT_INTEGER
, di
, REQUIRED
, kind
, BT_INTEGER
, di
, OPTIONAL
);
1148 make_generic ("char", GFC_ISYM_CHAR
, GFC_STD_F77
);
1150 add_sym_1 ("chdir", 0, 1, BT_INTEGER
, di
, GFC_STD_GNU
,
1151 gfc_check_chdir
, NULL
, gfc_resolve_chdir
,
1152 a
, BT_CHARACTER
, dc
, REQUIRED
);
1154 make_generic ("chdir", GFC_ISYM_CHDIR
, GFC_STD_GNU
);
1156 add_sym_3 ("cmplx", 1, 1, BT_COMPLEX
, dz
, GFC_STD_F77
,
1157 gfc_check_cmplx
, gfc_simplify_cmplx
, gfc_resolve_cmplx
,
1158 x
, BT_UNKNOWN
, dr
, REQUIRED
, y
, BT_UNKNOWN
, dr
, OPTIONAL
,
1159 kind
, BT_INTEGER
, di
, OPTIONAL
);
1161 make_generic ("cmplx", GFC_ISYM_CMPLX
, GFC_STD_F77
);
1163 add_sym_2 ("complex", 1, 1, BT_COMPLEX
, dz
, GFC_STD_GNU
,
1164 gfc_check_complex
, gfc_simplify_complex
, gfc_resolve_complex
,
1165 x
, BT_UNKNOWN
, dr
, REQUIRED
, y
, BT_UNKNOWN
, dr
, REQUIRED
);
1167 make_generic ("complex", GFC_ISYM_COMPLEX
, GFC_STD_GNU
);
1169 /* Making dcmplx a specific of cmplx causes cmplx to return a double
1170 complex instead of the default complex. */
1172 add_sym_2 ("dcmplx", 1, 1, BT_COMPLEX
, dd
, GFC_STD_GNU
,
1173 gfc_check_dcmplx
, gfc_simplify_dcmplx
, gfc_resolve_dcmplx
,
1174 x
, BT_REAL
, dd
, REQUIRED
, y
, BT_REAL
, dd
, OPTIONAL
);
1176 make_generic ("dcmplx", GFC_ISYM_CMPLX
, GFC_STD_GNU
);
1178 add_sym_1 ("conjg", 1, 1, BT_COMPLEX
, dz
, GFC_STD_F77
,
1179 gfc_check_fn_c
, gfc_simplify_conjg
, gfc_resolve_conjg
,
1180 z
, BT_COMPLEX
, dz
, REQUIRED
);
1182 add_sym_1 ("dconjg", 1, 1, BT_COMPLEX
, dd
, GFC_STD_GNU
,
1183 NULL
, gfc_simplify_conjg
, gfc_resolve_conjg
,
1184 z
, BT_COMPLEX
, dd
, REQUIRED
);
1186 make_generic ("conjg", GFC_ISYM_CONJG
, GFC_STD_F77
);
1188 add_sym_1 ("cos", 1, 1, BT_REAL
, dr
, GFC_STD_F77
,
1189 gfc_check_fn_rc
, gfc_simplify_cos
, gfc_resolve_cos
,
1190 x
, BT_REAL
, dr
, REQUIRED
);
1192 add_sym_1 ("dcos", 1, 1, BT_REAL
, dd
, GFC_STD_F77
,
1193 gfc_check_fn_rc
, gfc_simplify_cos
, gfc_resolve_cos
,
1194 x
, BT_REAL
, dd
, REQUIRED
);
1196 add_sym_1 ("ccos", 1, 1, BT_COMPLEX
, dz
, GFC_STD_F77
,
1197 NULL
, gfc_simplify_cos
, gfc_resolve_cos
,
1198 x
, BT_COMPLEX
, dz
, REQUIRED
);
1200 add_sym_1 ("zcos", 1, 1, BT_COMPLEX
, dd
, GFC_STD_GNU
,
1201 NULL
, gfc_simplify_cos
, gfc_resolve_cos
,
1202 x
, BT_COMPLEX
, dd
, REQUIRED
);
1204 make_alias ("cdcos", GFC_STD_GNU
);
1206 make_generic ("cos", GFC_ISYM_COS
, GFC_STD_F77
);
1208 add_sym_1 ("cosh", 1, 1, BT_REAL
, dr
, GFC_STD_F77
,
1209 gfc_check_fn_r
, gfc_simplify_cosh
, gfc_resolve_cosh
,
1210 x
, BT_REAL
, dr
, REQUIRED
);
1212 add_sym_1 ("dcosh", 1, 1, BT_REAL
, dd
, GFC_STD_F77
,
1213 NULL
, gfc_simplify_cosh
, gfc_resolve_cosh
,
1214 x
, BT_REAL
, dd
, REQUIRED
);
1216 make_generic ("cosh", GFC_ISYM_COSH
, GFC_STD_F77
);
1218 add_sym_2 ("count", 0, 1, BT_INTEGER
, di
, GFC_STD_F95
,
1219 gfc_check_count
, NULL
, gfc_resolve_count
,
1220 msk
, BT_LOGICAL
, dl
, REQUIRED
, dm
, BT_INTEGER
, ii
, OPTIONAL
);
1222 make_generic ("count", GFC_ISYM_COUNT
, GFC_STD_F95
);
1224 add_sym_3 ("cshift", 0, 1, BT_REAL
, dr
, GFC_STD_F95
,
1225 gfc_check_cshift
, NULL
, gfc_resolve_cshift
,
1226 ar
, BT_REAL
, dr
, REQUIRED
, sh
, BT_INTEGER
, di
, REQUIRED
,
1227 dm
, BT_INTEGER
, ii
, OPTIONAL
);
1229 make_generic ("cshift", GFC_ISYM_CSHIFT
, GFC_STD_F95
);
1231 add_sym_1 ("ctime", 0, 1, BT_CHARACTER
, 0, GFC_STD_GNU
,
1232 gfc_check_ctime
, NULL
, gfc_resolve_ctime
,
1233 tm
, BT_INTEGER
, di
, REQUIRED
);
1235 make_generic ("ctime", GFC_ISYM_CTIME
, GFC_STD_GNU
);
1237 add_sym_1 ("dble", 1, 1, BT_REAL
, dd
, GFC_STD_F77
,
1238 gfc_check_dble
, gfc_simplify_dble
, gfc_resolve_dble
,
1239 a
, BT_REAL
, dr
, REQUIRED
);
1241 make_alias ("dfloat", GFC_STD_GNU
);
1243 make_generic ("dble", GFC_ISYM_DBLE
, GFC_STD_F77
);
1245 add_sym_1 ("digits", 0, 1, BT_INTEGER
, di
, GFC_STD_F95
,
1246 gfc_check_digits
, gfc_simplify_digits
, NULL
,
1247 x
, BT_UNKNOWN
, dr
, REQUIRED
);
1249 make_generic ("digits", GFC_ISYM_NONE
, GFC_STD_F95
);
1251 add_sym_2 ("dim", 1, 1, BT_REAL
, dr
, GFC_STD_F77
,
1252 gfc_check_a_p
, gfc_simplify_dim
, gfc_resolve_dim
,
1253 x
, BT_UNKNOWN
, dr
, REQUIRED
, y
, BT_UNKNOWN
, dr
, REQUIRED
);
1255 add_sym_2 ("idim", 1, 1, BT_INTEGER
, di
, GFC_STD_F77
,
1256 NULL
, gfc_simplify_dim
, gfc_resolve_dim
,
1257 x
, BT_INTEGER
, di
, REQUIRED
, y
, BT_INTEGER
, di
, REQUIRED
);
1259 add_sym_2 ("ddim", 1, 1, BT_REAL
, dd
, GFC_STD_F77
,
1260 NULL
, gfc_simplify_dim
, gfc_resolve_dim
,
1261 x
, BT_REAL
, dd
, REQUIRED
, y
, BT_REAL
, dd
, REQUIRED
);
1263 make_generic ("dim", GFC_ISYM_DIM
, GFC_STD_F77
);
1265 add_sym_2 ("dot_product", 0, 1, BT_UNKNOWN
, 0, GFC_STD_F95
,
1266 gfc_check_dot_product
, NULL
, gfc_resolve_dot_product
,
1267 va
, BT_REAL
, dr
, REQUIRED
, vb
, BT_REAL
, dr
, REQUIRED
);
1269 make_generic ("dot_product", GFC_ISYM_DOT_PRODUCT
, GFC_STD_F95
);
1271 add_sym_2 ("dprod", 1, 1, BT_REAL
, dd
, GFC_STD_F77
,
1272 NULL
, gfc_simplify_dprod
, gfc_resolve_dprod
,
1273 x
, BT_REAL
, dr
, REQUIRED
, y
, BT_REAL
, dr
, REQUIRED
);
1275 make_generic ("dprod", GFC_ISYM_DPROD
, GFC_STD_F77
);
1277 add_sym_1 ("dreal", 1, 0, BT_REAL
, dd
, GFC_STD_GNU
,
1279 a
, BT_COMPLEX
, dd
, REQUIRED
);
1281 make_generic ("dreal", GFC_ISYM_REAL
, GFC_STD_GNU
);
1283 add_sym_4 ("eoshift", 0, 1, BT_REAL
, dr
, GFC_STD_F95
,
1284 gfc_check_eoshift
, NULL
, gfc_resolve_eoshift
,
1285 ar
, BT_REAL
, dr
, 0, sh
, BT_INTEGER
, ii
, REQUIRED
,
1286 bd
, BT_REAL
, dr
, 1, dm
, BT_INTEGER
, ii
, OPTIONAL
);
1288 make_generic ("eoshift", GFC_ISYM_EOSHIFT
, GFC_STD_F95
);
1290 add_sym_1 ("epsilon", 0, 1, BT_REAL
, dr
, GFC_STD_F95
,
1291 gfc_check_x
, gfc_simplify_epsilon
, NULL
,
1292 x
, BT_REAL
, dr
, REQUIRED
);
1294 make_generic ("epsilon", GFC_ISYM_NONE
, GFC_STD_F95
);
1296 /* G77 compatibility for the ERF() and ERFC() functions. */
1297 add_sym_1 ("erf", 1, 0, BT_REAL
, dr
, GFC_STD_GNU
,
1298 gfc_check_g77_math1
, NULL
, gfc_resolve_g77_math1
,
1299 x
, BT_REAL
, dr
, REQUIRED
);
1301 add_sym_1 ("derf", 1, 0, BT_REAL
, dd
, GFC_STD_GNU
,
1302 gfc_check_g77_math1
, NULL
, gfc_resolve_g77_math1
,
1303 x
, BT_REAL
, dd
, REQUIRED
);
1305 make_generic ("erf", GFC_ISYM_ERF
, GFC_STD_GNU
);
1307 add_sym_1 ("erfc", 1, 0, BT_REAL
, dr
, GFC_STD_GNU
,
1308 gfc_check_g77_math1
, NULL
, gfc_resolve_g77_math1
,
1309 x
, BT_REAL
, dr
, REQUIRED
);
1311 add_sym_1 ("derfc", 1, 0, BT_REAL
, dd
, GFC_STD_GNU
,
1312 gfc_check_g77_math1
, NULL
, gfc_resolve_g77_math1
,
1313 x
, BT_REAL
, dd
, REQUIRED
);
1315 make_generic ("erfc", GFC_ISYM_ERFC
, GFC_STD_GNU
);
1317 /* G77 compatibility */
1318 add_sym_1 ("etime", 0, 1, BT_REAL
, 4, GFC_STD_GNU
,
1319 gfc_check_etime
, NULL
, NULL
,
1320 x
, BT_REAL
, 4, REQUIRED
);
1322 make_alias ("dtime", GFC_STD_GNU
);
1324 make_generic ("etime", GFC_ISYM_ETIME
, GFC_STD_GNU
);
1326 add_sym_1 ("exp", 1, 1, BT_REAL
, dr
, GFC_STD_F77
,
1327 gfc_check_fn_rc
, gfc_simplify_exp
, gfc_resolve_exp
,
1328 x
, BT_REAL
, dr
, REQUIRED
);
1330 add_sym_1 ("dexp", 1, 1, BT_REAL
, dd
, GFC_STD_F77
,
1331 NULL
, gfc_simplify_exp
, gfc_resolve_exp
,
1332 x
, BT_REAL
, dd
, REQUIRED
);
1334 add_sym_1 ("cexp", 1, 1, BT_COMPLEX
, dz
, GFC_STD_F77
,
1335 NULL
, gfc_simplify_exp
, gfc_resolve_exp
,
1336 x
, BT_COMPLEX
, dz
, REQUIRED
);
1338 add_sym_1 ("zexp", 1, 1, BT_COMPLEX
, dd
, GFC_STD_GNU
,
1339 NULL
, gfc_simplify_exp
, gfc_resolve_exp
,
1340 x
, BT_COMPLEX
, dd
, REQUIRED
);
1342 make_alias ("cdexp", GFC_STD_GNU
);
1344 make_generic ("exp", GFC_ISYM_EXP
, GFC_STD_F77
);
1346 add_sym_1 ("exponent", 1, 1, BT_INTEGER
, di
, GFC_STD_F95
,
1347 gfc_check_x
, gfc_simplify_exponent
, gfc_resolve_exponent
,
1348 x
, BT_REAL
, dr
, REQUIRED
);
1350 make_generic ("exponent", GFC_ISYM_EXPONENT
, GFC_STD_F95
);
1352 add_sym_0 ("fdate", 1, 0, BT_CHARACTER
, dc
, GFC_STD_GNU
,
1353 NULL
, NULL
, gfc_resolve_fdate
);
1355 make_generic ("fdate", GFC_ISYM_FDATE
, GFC_STD_GNU
);
1357 add_sym_2 ("floor", 1, 1, BT_INTEGER
, di
, GFC_STD_F95
,
1358 gfc_check_a_ikind
, gfc_simplify_floor
, gfc_resolve_floor
,
1359 a
, BT_REAL
, dr
, REQUIRED
, kind
, BT_INTEGER
, di
, OPTIONAL
);
1361 make_generic ("floor", GFC_ISYM_FLOOR
, GFC_STD_F95
);
1363 /* G77 compatible fnum */
1364 add_sym_1 ("fnum", 0, 1, BT_INTEGER
, di
, GFC_STD_GNU
,
1365 gfc_check_fnum
, NULL
, gfc_resolve_fnum
,
1366 ut
, BT_INTEGER
, di
, REQUIRED
);
1368 make_generic ("fnum", GFC_ISYM_FNUM
, GFC_STD_GNU
);
1370 add_sym_1 ("fraction", 1, 1, BT_REAL
, dr
, GFC_STD_F95
,
1371 gfc_check_x
, gfc_simplify_fraction
, gfc_resolve_fraction
,
1372 x
, BT_REAL
, dr
, REQUIRED
);
1374 make_generic ("fraction", GFC_ISYM_FRACTION
, GFC_STD_F95
);
1376 add_sym_2 ("fstat", 0, 1, BT_INTEGER
, di
, GFC_STD_GNU
,
1377 gfc_check_fstat
, NULL
, gfc_resolve_fstat
,
1378 a
, BT_INTEGER
, di
, REQUIRED
, b
, BT_INTEGER
, di
, REQUIRED
);
1380 make_generic ("fstat", GFC_ISYM_FSTAT
, GFC_STD_GNU
);
1382 add_sym_1 ("ftell", 0, 1, BT_INTEGER
, ii
, GFC_STD_GNU
,
1383 gfc_check_ftell
, NULL
, gfc_resolve_ftell
,
1384 ut
, BT_INTEGER
, di
, REQUIRED
);
1386 make_generic ("ftell", GFC_ISYM_FTELL
, GFC_STD_GNU
);
1388 add_sym_2 ("fgetc", 0, 1, BT_INTEGER
, di
, GFC_STD_GNU
,
1389 gfc_check_fgetputc
, NULL
, gfc_resolve_fgetc
,
1390 ut
, BT_INTEGER
, di
, REQUIRED
, c
, BT_CHARACTER
, dc
, REQUIRED
);
1392 make_generic ("fgetc", GFC_ISYM_FGETC
, GFC_STD_GNU
);
1394 add_sym_1 ("fget", 0, 1, BT_INTEGER
, di
, GFC_STD_GNU
,
1395 gfc_check_fgetput
, NULL
, gfc_resolve_fget
,
1396 c
, BT_CHARACTER
, dc
, REQUIRED
);
1398 make_generic ("fget", GFC_ISYM_FGET
, GFC_STD_GNU
);
1400 add_sym_2 ("fputc", 0, 1, BT_INTEGER
, di
, GFC_STD_GNU
,
1401 gfc_check_fgetputc
, NULL
, gfc_resolve_fputc
,
1402 ut
, BT_INTEGER
, di
, REQUIRED
, c
, BT_CHARACTER
, dc
, REQUIRED
);
1404 make_generic ("fputc", GFC_ISYM_FPUTC
, GFC_STD_GNU
);
1406 add_sym_1 ("fput", 0, 1, BT_INTEGER
, di
, GFC_STD_GNU
,
1407 gfc_check_fgetput
, NULL
, gfc_resolve_fput
,
1408 c
, BT_CHARACTER
, dc
, REQUIRED
);
1410 make_generic ("fput", GFC_ISYM_FPUT
, GFC_STD_GNU
);
1412 /* Unix IDs (g77 compatibility) */
1413 add_sym_1 ("getcwd", 0, 1, BT_INTEGER
, di
, GFC_STD_GNU
,
1414 NULL
, NULL
, gfc_resolve_getcwd
,
1415 c
, BT_CHARACTER
, dc
, REQUIRED
);
1417 make_generic ("getcwd", GFC_ISYM_GETCWD
, GFC_STD_GNU
);
1419 add_sym_0 ("getgid", 1, 0, BT_INTEGER
, di
, GFC_STD_GNU
,
1420 NULL
, NULL
, gfc_resolve_getgid
);
1422 make_generic ("getgid", GFC_ISYM_GETGID
, GFC_STD_GNU
);
1424 add_sym_0 ("getpid", 1, 0, BT_INTEGER
, di
, GFC_STD_GNU
,
1425 NULL
, NULL
, gfc_resolve_getpid
);
1427 make_generic ("getpid", GFC_ISYM_GETPID
, GFC_STD_GNU
);
1429 add_sym_0 ("getuid", 1, 0, BT_INTEGER
, di
, GFC_STD_GNU
,
1430 NULL
, NULL
, gfc_resolve_getuid
);
1432 make_generic ("getuid", GFC_ISYM_GETUID
, GFC_STD_GNU
);
1434 add_sym_1 ("hostnm", 0, 1, BT_INTEGER
, di
, GFC_STD_GNU
,
1435 gfc_check_hostnm
, NULL
, gfc_resolve_hostnm
,
1436 a
, BT_CHARACTER
, dc
, REQUIRED
);
1438 make_generic ("hostnm", GFC_ISYM_HOSTNM
, GFC_STD_GNU
);
1440 add_sym_1 ("huge", 0, 1, BT_REAL
, dr
, GFC_STD_F95
,
1441 gfc_check_huge
, gfc_simplify_huge
, NULL
,
1442 x
, BT_UNKNOWN
, dr
, REQUIRED
);
1444 make_generic ("huge", GFC_ISYM_NONE
, GFC_STD_F95
);
1446 add_sym_1 ("iachar", 1, 1, BT_INTEGER
, di
, GFC_STD_F95
,
1447 gfc_check_ichar_iachar
, gfc_simplify_iachar
, NULL
,
1448 c
, BT_CHARACTER
, dc
, REQUIRED
);
1450 make_generic ("iachar", GFC_ISYM_IACHAR
, GFC_STD_F95
);
1452 add_sym_2 ("iand", 1, 1, BT_INTEGER
, di
, GFC_STD_F95
,
1453 gfc_check_iand
, gfc_simplify_iand
, gfc_resolve_iand
,
1454 i
, BT_INTEGER
, di
, REQUIRED
, j
, BT_INTEGER
, di
, REQUIRED
);
1456 make_generic ("iand", GFC_ISYM_IAND
, GFC_STD_F95
);
1458 add_sym_2 ("and", 1, 0, BT_UNKNOWN
, 0, GFC_STD_GNU
,
1459 gfc_check_and
, gfc_simplify_and
, gfc_resolve_and
,
1460 i
, BT_UNKNOWN
, 0, REQUIRED
, j
, BT_UNKNOWN
, 0, REQUIRED
);
1462 make_generic ("and", GFC_ISYM_AND
, GFC_STD_GNU
);
1464 add_sym_0 ("iargc", 1, 1, BT_INTEGER
, di
, GFC_STD_GNU
,
1467 make_generic ("iargc", GFC_ISYM_IARGC
, GFC_STD_GNU
);
1469 add_sym_0 ("command_argument_count", 1, 1, BT_INTEGER
, di
, GFC_STD_F2003
,
1472 make_generic ("command_argument_count", GFC_ISYM_COMMAND_ARGUMENT_COUNT
,
1475 add_sym_2 ("ibclr", 1, 1, BT_INTEGER
, di
, GFC_STD_F95
,
1476 gfc_check_ibclr
, gfc_simplify_ibclr
, gfc_resolve_ibclr
,
1477 i
, BT_INTEGER
, di
, REQUIRED
, pos
, BT_INTEGER
, di
, REQUIRED
);
1479 make_generic ("ibclr", GFC_ISYM_IBCLR
, GFC_STD_F95
);
1481 add_sym_3 ("ibits", 1, 1, BT_INTEGER
, di
, GFC_STD_F95
,
1482 gfc_check_ibits
, gfc_simplify_ibits
, gfc_resolve_ibits
,
1483 i
, BT_INTEGER
, di
, REQUIRED
, pos
, BT_INTEGER
, di
, REQUIRED
,
1484 ln
, BT_INTEGER
, di
, REQUIRED
);
1486 make_generic ("ibits", GFC_ISYM_IBITS
, GFC_STD_F95
);
1488 add_sym_2 ("ibset", 1, 1, BT_INTEGER
, di
, GFC_STD_F95
,
1489 gfc_check_ibset
, gfc_simplify_ibset
, gfc_resolve_ibset
,
1490 i
, BT_INTEGER
, di
, REQUIRED
, pos
, BT_INTEGER
, di
, REQUIRED
);
1492 make_generic ("ibset", GFC_ISYM_IBSET
, GFC_STD_F95
);
1494 add_sym_1 ("ichar", 1, 0, BT_INTEGER
, di
, GFC_STD_F77
,
1495 gfc_check_ichar_iachar
, gfc_simplify_ichar
, gfc_resolve_ichar
,
1496 c
, BT_CHARACTER
, dc
, REQUIRED
);
1498 make_generic ("ichar", GFC_ISYM_ICHAR
, GFC_STD_F77
);
1500 add_sym_2 ("ieor", 1, 1, BT_INTEGER
, di
, GFC_STD_F95
,
1501 gfc_check_ieor
, gfc_simplify_ieor
, gfc_resolve_ieor
,
1502 i
, BT_INTEGER
, di
, REQUIRED
, j
, BT_INTEGER
, di
, REQUIRED
);
1504 make_generic ("ieor", GFC_ISYM_IEOR
, GFC_STD_F95
);
1506 add_sym_2 ("xor", 1, 0, BT_UNKNOWN
, 0, GFC_STD_GNU
,
1507 gfc_check_and
, gfc_simplify_xor
, gfc_resolve_xor
,
1508 i
, BT_UNKNOWN
, 0, REQUIRED
, j
, BT_UNKNOWN
, 0, REQUIRED
);
1510 make_generic ("xor", GFC_ISYM_XOR
, GFC_STD_GNU
);
1512 add_sym_0 ("ierrno", 1, 0, BT_INTEGER
, di
, GFC_STD_GNU
,
1513 NULL
, NULL
, gfc_resolve_ierrno
);
1515 make_generic ("ierrno", GFC_ISYM_IERRNO
, GFC_STD_GNU
);
1517 add_sym_3 ("index", 1, 1, BT_INTEGER
, di
, GFC_STD_F77
,
1518 gfc_check_index
, gfc_simplify_index
, NULL
,
1519 stg
, BT_CHARACTER
, dc
, REQUIRED
, ssg
, BT_CHARACTER
, dc
, REQUIRED
,
1520 bck
, BT_LOGICAL
, dl
, OPTIONAL
);
1522 make_generic ("index", GFC_ISYM_INDEX
, GFC_STD_F77
);
1524 add_sym_2 ("int", 1, 1, BT_INTEGER
, di
, GFC_STD_F77
,
1525 gfc_check_int
, gfc_simplify_int
, gfc_resolve_int
,
1526 a
, BT_REAL
, dr
, REQUIRED
, kind
, BT_INTEGER
, di
, OPTIONAL
);
1528 add_sym_1 ("ifix", 1, 0, BT_INTEGER
, di
, GFC_STD_F77
,
1529 NULL
, gfc_simplify_ifix
, NULL
,
1530 a
, BT_REAL
, dr
, REQUIRED
);
1532 add_sym_1 ("idint", 1, 0, BT_INTEGER
, di
, GFC_STD_F77
,
1533 NULL
, gfc_simplify_idint
, NULL
,
1534 a
, BT_REAL
, dd
, REQUIRED
);
1536 make_generic ("int", GFC_ISYM_INT
, GFC_STD_F77
);
1538 add_sym_2 ("ior", 1, 1, BT_INTEGER
, di
, GFC_STD_F95
,
1539 gfc_check_ior
, gfc_simplify_ior
, gfc_resolve_ior
,
1540 i
, BT_INTEGER
, di
, REQUIRED
, j
, BT_INTEGER
, di
, REQUIRED
);
1542 make_generic ("ior", GFC_ISYM_IOR
, GFC_STD_F95
);
1544 add_sym_2 ("or", 1, 0, BT_UNKNOWN
, 0, GFC_STD_GNU
,
1545 gfc_check_and
, gfc_simplify_or
, gfc_resolve_or
,
1546 i
, BT_UNKNOWN
, 0, REQUIRED
, j
, BT_UNKNOWN
, 0, REQUIRED
);
1548 make_generic ("or", GFC_ISYM_OR
, GFC_STD_GNU
);
1550 /* The following function is for G77 compatibility. */
1551 add_sym_1 ("irand", 0, 1, BT_INTEGER
, 4, GFC_STD_GNU
,
1552 gfc_check_irand
, NULL
, NULL
,
1553 i
, BT_INTEGER
, 4, OPTIONAL
);
1555 make_generic ("irand", GFC_ISYM_IRAND
, GFC_STD_GNU
);
1557 add_sym_1 ("isatty", 0, 0, BT_LOGICAL
, dl
, GFC_STD_GNU
,
1558 gfc_check_isatty
, NULL
, gfc_resolve_isatty
,
1559 ut
, BT_INTEGER
, di
, REQUIRED
);
1561 make_generic ("isatty", GFC_ISYM_ISATTY
, GFC_STD_GNU
);
1563 add_sym_2 ("ishft", 1, 1, BT_INTEGER
, di
, GFC_STD_F95
,
1564 gfc_check_ishft
, gfc_simplify_ishft
, gfc_resolve_ishft
,
1565 i
, BT_INTEGER
, di
, REQUIRED
, sh
, BT_INTEGER
, di
, REQUIRED
);
1567 make_generic ("ishft", GFC_ISYM_ISHFT
, GFC_STD_F95
);
1569 add_sym_3 ("ishftc", 1, 1, BT_INTEGER
, di
, GFC_STD_F95
,
1570 gfc_check_ishftc
, gfc_simplify_ishftc
, gfc_resolve_ishftc
,
1571 i
, BT_INTEGER
, di
, REQUIRED
, sh
, BT_INTEGER
, di
, REQUIRED
,
1572 sz
, BT_INTEGER
, di
, OPTIONAL
);
1574 make_generic ("ishftc", GFC_ISYM_ISHFTC
, GFC_STD_F95
);
1576 add_sym_2 ("kill", 1, 1, BT_INTEGER
, di
, GFC_STD_GNU
,
1577 gfc_check_kill
, NULL
, gfc_resolve_kill
,
1578 a
, BT_INTEGER
, di
, REQUIRED
, b
, BT_INTEGER
, di
, REQUIRED
);
1580 make_generic ("kill", GFC_ISYM_KILL
, GFC_STD_GNU
);
1582 add_sym_1 ("kind", 0, 1, BT_INTEGER
, di
, GFC_STD_F95
,
1583 gfc_check_kind
, gfc_simplify_kind
, NULL
,
1584 x
, BT_REAL
, dr
, REQUIRED
);
1586 make_generic ("kind", GFC_ISYM_NONE
, GFC_STD_F95
);
1588 add_sym_2 ("lbound", 0, 1, BT_INTEGER
, di
, GFC_STD_F95
,
1589 gfc_check_lbound
, gfc_simplify_lbound
, gfc_resolve_lbound
,
1590 ar
, BT_REAL
, dr
, REQUIRED
, dm
, BT_INTEGER
, di
, OPTIONAL
);
1592 make_generic ("lbound", GFC_ISYM_LBOUND
, GFC_STD_F95
);
1594 add_sym_1 ("len", 0, 1, BT_INTEGER
, di
, GFC_STD_F77
,
1595 NULL
, gfc_simplify_len
, gfc_resolve_len
,
1596 stg
, BT_CHARACTER
, dc
, REQUIRED
);
1598 make_generic ("len", GFC_ISYM_LEN
, GFC_STD_F77
);
1600 add_sym_1 ("len_trim", 1, 1, BT_INTEGER
, di
, GFC_STD_F95
,
1601 NULL
, gfc_simplify_len_trim
, gfc_resolve_len_trim
,
1602 stg
, BT_CHARACTER
, dc
, REQUIRED
);
1604 make_alias ("lnblnk", GFC_STD_GNU
);
1606 make_generic ("len_trim", GFC_ISYM_LEN_TRIM
, GFC_STD_F95
);
1608 add_sym_2 ("lge", 1, 0, BT_LOGICAL
, dl
, GFC_STD_F77
,
1609 NULL
, gfc_simplify_lge
, NULL
,
1610 sta
, BT_CHARACTER
, dc
, REQUIRED
, stb
, BT_CHARACTER
, dc
, REQUIRED
);
1612 make_generic ("lge", GFC_ISYM_LGE
, GFC_STD_F77
);
1614 add_sym_2 ("lgt", 1, 0, BT_LOGICAL
, dl
, GFC_STD_F77
,
1615 NULL
, gfc_simplify_lgt
, NULL
,
1616 sta
, BT_CHARACTER
, dc
, REQUIRED
, stb
, BT_CHARACTER
, dc
, REQUIRED
);
1618 make_generic ("lgt", GFC_ISYM_LGT
, GFC_STD_F77
);
1620 add_sym_2 ("lle", 1, 0, BT_LOGICAL
, dl
, GFC_STD_F77
,
1621 NULL
, gfc_simplify_lle
, NULL
,
1622 sta
, BT_CHARACTER
, dc
, REQUIRED
, stb
, BT_CHARACTER
, dc
, REQUIRED
);
1624 make_generic ("lle", GFC_ISYM_LLE
, GFC_STD_F77
);
1626 add_sym_2 ("llt", 1, 0, BT_LOGICAL
, dl
, GFC_STD_F77
,
1627 NULL
, gfc_simplify_llt
, NULL
,
1628 sta
, BT_CHARACTER
, dc
, REQUIRED
, stb
, BT_CHARACTER
, dc
, REQUIRED
);
1630 make_generic ("llt", GFC_ISYM_LLT
, GFC_STD_F77
);
1632 add_sym_2 ("link", 0, 1, BT_INTEGER
, di
, GFC_STD_GNU
,
1633 gfc_check_link
, NULL
, gfc_resolve_link
,
1634 a
, BT_CHARACTER
, dc
, REQUIRED
, b
, BT_CHARACTER
, dc
, REQUIRED
);
1636 make_generic ("link", GFC_ISYM_LINK
, GFC_STD_GNU
);
1638 add_sym_1 ("log", 1, 1, BT_REAL
, dr
, GFC_STD_F77
,
1639 gfc_check_fn_rc
, gfc_simplify_log
, gfc_resolve_log
,
1640 x
, BT_REAL
, dr
, REQUIRED
);
1642 add_sym_1 ("alog", 1, 1, BT_REAL
, dr
, GFC_STD_F77
,
1643 NULL
, gfc_simplify_log
, gfc_resolve_log
,
1644 x
, BT_REAL
, dr
, REQUIRED
);
1646 add_sym_1 ("dlog", 1, 1, BT_REAL
, dd
, GFC_STD_F77
,
1647 NULL
, gfc_simplify_log
, gfc_resolve_log
,
1648 x
, BT_REAL
, dd
, REQUIRED
);
1650 add_sym_1 ("clog", 1, 1, BT_COMPLEX
, dz
, GFC_STD_F77
,
1651 NULL
, gfc_simplify_log
, gfc_resolve_log
,
1652 x
, BT_COMPLEX
, dz
, REQUIRED
);
1654 add_sym_1 ("zlog", 1, 1, BT_COMPLEX
, dd
, GFC_STD_GNU
,
1655 NULL
, gfc_simplify_log
, gfc_resolve_log
,
1656 x
, BT_COMPLEX
, dd
, REQUIRED
);
1658 make_alias ("cdlog", GFC_STD_GNU
);
1660 make_generic ("log", GFC_ISYM_LOG
, GFC_STD_F77
);
1662 add_sym_1 ("log10", 1, 1, BT_REAL
, dr
, GFC_STD_F77
,
1663 gfc_check_fn_r
, gfc_simplify_log10
, gfc_resolve_log10
,
1664 x
, BT_REAL
, dr
, REQUIRED
);
1666 add_sym_1 ("alog10", 1, 1, BT_REAL
, dr
, GFC_STD_F77
,
1667 NULL
, gfc_simplify_log10
, gfc_resolve_log10
,
1668 x
, BT_REAL
, dr
, REQUIRED
);
1670 add_sym_1 ("dlog10", 1, 1, BT_REAL
, dd
, GFC_STD_F77
,
1671 NULL
, gfc_simplify_log10
, gfc_resolve_log10
,
1672 x
, BT_REAL
, dd
, REQUIRED
);
1674 make_generic ("log10", GFC_ISYM_LOG10
, GFC_STD_F77
);
1676 add_sym_2 ("logical", 1, 1, BT_LOGICAL
, dl
, GFC_STD_F95
,
1677 gfc_check_logical
, gfc_simplify_logical
, gfc_resolve_logical
,
1678 l
, BT_LOGICAL
, dl
, REQUIRED
, kind
, BT_INTEGER
, di
, OPTIONAL
);
1680 make_generic ("logical", GFC_ISYM_LOGICAL
, GFC_STD_F95
);
1682 add_sym_1 ("malloc", 0, 1, BT_INTEGER
, ii
, GFC_STD_GNU
, gfc_check_malloc
,
1683 NULL
, gfc_resolve_malloc
, a
, BT_INTEGER
, di
, REQUIRED
);
1685 make_generic ("malloc", GFC_ISYM_MALLOC
, GFC_STD_GNU
);
1687 add_sym_2 ("matmul", 0, 1, BT_REAL
, dr
, GFC_STD_F95
,
1688 gfc_check_matmul
, NULL
, gfc_resolve_matmul
,
1689 ma
, BT_REAL
, dr
, REQUIRED
, mb
, BT_REAL
, dr
, REQUIRED
);
1691 make_generic ("matmul", GFC_ISYM_MATMUL
, GFC_STD_F95
);
1693 /* Note: amax0 is equivalent to real(max), max1 is equivalent to
1694 int(max). The max function must take at least two arguments. */
1696 add_sym_1m ("max", 1, 0, BT_UNKNOWN
, 0, GFC_STD_F77
,
1697 gfc_check_min_max
, gfc_simplify_max
, gfc_resolve_max
,
1698 a1
, BT_UNKNOWN
, dr
, REQUIRED
, a2
, BT_UNKNOWN
, dr
, REQUIRED
);
1700 add_sym_1m ("max0", 1, 0, BT_INTEGER
, di
, GFC_STD_F77
,
1701 gfc_check_min_max_integer
, gfc_simplify_max
, NULL
,
1702 a1
, BT_INTEGER
, di
, REQUIRED
, a2
, BT_INTEGER
, di
, REQUIRED
);
1704 add_sym_1m ("amax0", 1, 0, BT_REAL
, dr
, GFC_STD_F77
,
1705 gfc_check_min_max_integer
, gfc_simplify_max
, NULL
,
1706 a1
, BT_INTEGER
, di
, REQUIRED
, a2
, BT_INTEGER
, di
, REQUIRED
);
1708 add_sym_1m ("amax1", 1, 0, BT_REAL
, dr
, GFC_STD_F77
,
1709 gfc_check_min_max_real
, gfc_simplify_max
, NULL
,
1710 a1
, BT_REAL
, dr
, REQUIRED
, a2
, BT_REAL
, dr
, REQUIRED
);
1712 add_sym_1m ("max1", 1, 0, BT_INTEGER
, di
, GFC_STD_F77
,
1713 gfc_check_min_max_real
, gfc_simplify_max
, NULL
,
1714 a1
, BT_REAL
, dr
, REQUIRED
, a2
, BT_REAL
, dr
, REQUIRED
);
1716 add_sym_1m ("dmax1", 1, 0, BT_REAL
, dd
, GFC_STD_F77
,
1717 gfc_check_min_max_double
, gfc_simplify_max
, NULL
,
1718 a1
, BT_REAL
, dd
, REQUIRED
, a2
, BT_REAL
, dd
, REQUIRED
);
1720 make_generic ("max", GFC_ISYM_MAX
, GFC_STD_F77
);
1722 add_sym_1 ("maxexponent", 0, 1, BT_INTEGER
, di
, GFC_STD_F95
,
1723 gfc_check_x
, gfc_simplify_maxexponent
, NULL
,
1724 x
, BT_UNKNOWN
, dr
, REQUIRED
);
1726 make_generic ("maxexponent", GFC_ISYM_NONE
, GFC_STD_F95
);
1728 add_sym_3ml ("maxloc", 0, 1, BT_INTEGER
, di
, GFC_STD_F95
,
1729 gfc_check_minloc_maxloc
, NULL
, gfc_resolve_maxloc
,
1730 ar
, BT_REAL
, dr
, REQUIRED
, dm
, BT_INTEGER
, ii
, OPTIONAL
,
1731 msk
, BT_LOGICAL
, dl
, OPTIONAL
);
1733 make_generic ("maxloc", GFC_ISYM_MAXLOC
, GFC_STD_F95
);
1735 add_sym_3red ("maxval", 0, 1, BT_REAL
, dr
, GFC_STD_F95
,
1736 gfc_check_minval_maxval
, NULL
, gfc_resolve_maxval
,
1737 ar
, BT_REAL
, dr
, REQUIRED
, dm
, BT_INTEGER
, ii
, OPTIONAL
,
1738 msk
, BT_LOGICAL
, dl
, OPTIONAL
);
1740 make_generic ("maxval", GFC_ISYM_MAXVAL
, GFC_STD_F95
);
1742 add_sym_3 ("merge", 1, 1, BT_REAL
, dr
, GFC_STD_F95
,
1743 gfc_check_merge
, NULL
, gfc_resolve_merge
,
1744 ts
, BT_REAL
, dr
, REQUIRED
, fs
, BT_REAL
, dr
, REQUIRED
,
1745 msk
, BT_LOGICAL
, dl
, REQUIRED
);
1747 make_generic ("merge", GFC_ISYM_MERGE
, GFC_STD_F95
);
1749 /* Note: amin0 is equivalent to real(min), min1 is equivalent to
1752 add_sym_1m ("min", 1, 0, BT_UNKNOWN
, 0, GFC_STD_F77
,
1753 gfc_check_min_max
, gfc_simplify_min
, gfc_resolve_min
,
1754 a1
, BT_REAL
, dr
, REQUIRED
, a2
, BT_REAL
, dr
, REQUIRED
);
1756 add_sym_1m ("min0", 1, 0, BT_INTEGER
, di
, GFC_STD_F77
,
1757 gfc_check_min_max_integer
, gfc_simplify_min
, NULL
,
1758 a1
, BT_INTEGER
, di
, REQUIRED
, a2
, BT_INTEGER
, di
, REQUIRED
);
1760 add_sym_1m ("amin0", 1, 0, BT_REAL
, dr
, GFC_STD_F77
,
1761 gfc_check_min_max_integer
, gfc_simplify_min
, NULL
,
1762 a1
, BT_INTEGER
, di
, REQUIRED
, a2
, BT_INTEGER
, di
, REQUIRED
);
1764 add_sym_1m ("amin1", 1, 0, BT_REAL
, dr
, GFC_STD_F77
,
1765 gfc_check_min_max_real
, gfc_simplify_min
, NULL
,
1766 a1
, BT_REAL
, dr
, REQUIRED
, a2
, BT_REAL
, dr
, REQUIRED
);
1768 add_sym_1m ("min1", 1, 0, BT_INTEGER
, di
, GFC_STD_F77
,
1769 gfc_check_min_max_real
, gfc_simplify_min
, NULL
,
1770 a1
, BT_REAL
, dr
, REQUIRED
, a2
, BT_REAL
, dr
, REQUIRED
);
1772 add_sym_1m ("dmin1", 1, 0, BT_REAL
, dd
, GFC_STD_F77
,
1773 gfc_check_min_max_double
, gfc_simplify_min
, NULL
,
1774 a1
, BT_REAL
, dd
, REQUIRED
, a2
, BT_REAL
, dd
, REQUIRED
);
1776 make_generic ("min", GFC_ISYM_MIN
, GFC_STD_F77
);
1778 add_sym_1 ("minexponent", 0, 1, BT_INTEGER
, di
, GFC_STD_F95
,
1779 gfc_check_x
, gfc_simplify_minexponent
, NULL
,
1780 x
, BT_UNKNOWN
, dr
, REQUIRED
);
1782 make_generic ("minexponent", GFC_ISYM_NONE
, GFC_STD_F95
);
1784 add_sym_3ml ("minloc", 0, 1, BT_INTEGER
, di
, GFC_STD_F95
,
1785 gfc_check_minloc_maxloc
, NULL
, gfc_resolve_minloc
,
1786 ar
, BT_REAL
, dr
, REQUIRED
, dm
, BT_INTEGER
, ii
, OPTIONAL
,
1787 msk
, BT_LOGICAL
, dl
, OPTIONAL
);
1789 make_generic ("minloc", GFC_ISYM_MINLOC
, GFC_STD_F95
);
1791 add_sym_3red ("minval", 0, 1, BT_REAL
, dr
, GFC_STD_F95
,
1792 gfc_check_minval_maxval
, NULL
, gfc_resolve_minval
,
1793 ar
, BT_REAL
, dr
, REQUIRED
, dm
, BT_INTEGER
, ii
, OPTIONAL
,
1794 msk
, BT_LOGICAL
, dl
, OPTIONAL
);
1796 make_generic ("minval", GFC_ISYM_MINVAL
, GFC_STD_F95
);
1798 add_sym_2 ("mod", 1, 1, BT_INTEGER
, di
, GFC_STD_F77
,
1799 gfc_check_a_p
, gfc_simplify_mod
, gfc_resolve_mod
,
1800 a
, BT_INTEGER
, di
, REQUIRED
, p
, BT_INTEGER
, di
, REQUIRED
);
1802 add_sym_2 ("amod", 1, 1, BT_REAL
, dr
, GFC_STD_F77
,
1803 NULL
, gfc_simplify_mod
, gfc_resolve_mod
,
1804 a
, BT_REAL
, dr
, REQUIRED
, p
, BT_REAL
, dr
, REQUIRED
);
1806 add_sym_2 ("dmod", 1, 1, BT_REAL
, dd
, GFC_STD_F77
,
1807 NULL
, gfc_simplify_mod
, gfc_resolve_mod
,
1808 a
, BT_REAL
, dd
, REQUIRED
, p
, BT_REAL
, dd
, REQUIRED
);
1810 make_generic ("mod", GFC_ISYM_MOD
, GFC_STD_F77
);
1812 add_sym_2 ("modulo", 1, 0, BT_REAL
, di
, GFC_STD_F95
,
1813 gfc_check_a_p
, gfc_simplify_modulo
, gfc_resolve_modulo
,
1814 a
, BT_REAL
, di
, REQUIRED
, p
, BT_REAL
, di
, REQUIRED
);
1816 make_generic ("modulo", GFC_ISYM_MODULO
, GFC_STD_F95
);
1818 add_sym_2 ("nearest", 1, 1, BT_REAL
, dr
, GFC_STD_F95
,
1819 gfc_check_nearest
, gfc_simplify_nearest
, gfc_resolve_nearest
,
1820 x
, BT_REAL
, dr
, REQUIRED
, s
, BT_REAL
, dr
, REQUIRED
);
1822 make_generic ("nearest", GFC_ISYM_NEAREST
, GFC_STD_F95
);
1824 add_sym_2 ("nint", 1, 1, BT_INTEGER
, di
, GFC_STD_F77
,
1825 gfc_check_a_ikind
, gfc_simplify_nint
, gfc_resolve_nint
,
1826 a
, BT_REAL
, dr
, REQUIRED
, kind
, BT_INTEGER
, di
, OPTIONAL
);
1828 add_sym_1 ("idnint", 1, 1, BT_INTEGER
, di
, GFC_STD_F77
,
1829 gfc_check_idnint
, gfc_simplify_idnint
, gfc_resolve_idnint
,
1830 a
, BT_REAL
, dd
, REQUIRED
);
1832 make_generic ("nint", GFC_ISYM_NINT
, GFC_STD_F77
);
1834 add_sym_1 ("not", 1, 1, BT_INTEGER
, di
, GFC_STD_F95
,
1835 gfc_check_i
, gfc_simplify_not
, gfc_resolve_not
,
1836 i
, BT_INTEGER
, di
, REQUIRED
);
1838 make_generic ("not", GFC_ISYM_NOT
, GFC_STD_F95
);
1840 add_sym_1 ("null", 0, 1, BT_INTEGER
, di
, GFC_STD_F95
,
1841 gfc_check_null
, gfc_simplify_null
, NULL
,
1842 mo
, BT_INTEGER
, di
, OPTIONAL
);
1844 make_generic ("null", GFC_ISYM_NONE
, GFC_STD_F95
);
1846 add_sym_3 ("pack", 0, 1, BT_REAL
, dr
, GFC_STD_F95
,
1847 gfc_check_pack
, NULL
, gfc_resolve_pack
,
1848 ar
, BT_REAL
, dr
, REQUIRED
, msk
, BT_LOGICAL
, dl
, REQUIRED
,
1849 v
, BT_REAL
, dr
, OPTIONAL
);
1851 make_generic ("pack", GFC_ISYM_PACK
, GFC_STD_F95
);
1853 add_sym_1 ("precision", 0, 1, BT_INTEGER
, di
, GFC_STD_F95
,
1854 gfc_check_precision
, gfc_simplify_precision
, NULL
,
1855 x
, BT_UNKNOWN
, 0, REQUIRED
);
1857 make_generic ("precision", GFC_ISYM_NONE
, GFC_STD_F95
);
1859 add_sym_1 ("present", 0, 1, BT_LOGICAL
, dl
, GFC_STD_F95
,
1860 gfc_check_present
, NULL
, NULL
,
1861 a
, BT_REAL
, dr
, REQUIRED
);
1863 make_generic ("present", GFC_ISYM_PRESENT
, GFC_STD_F95
);
1865 add_sym_3red ("product", 0, 1, BT_REAL
, dr
, GFC_STD_F95
,
1866 gfc_check_product_sum
, NULL
, gfc_resolve_product
,
1867 ar
, BT_REAL
, dr
, REQUIRED
, dm
, BT_INTEGER
, ii
, OPTIONAL
,
1868 msk
, BT_LOGICAL
, dl
, OPTIONAL
);
1870 make_generic ("product", GFC_ISYM_PRODUCT
, GFC_STD_F95
);
1872 add_sym_1 ("radix", 0, 1, BT_INTEGER
, di
, GFC_STD_F95
,
1873 gfc_check_radix
, gfc_simplify_radix
, NULL
,
1874 x
, BT_UNKNOWN
, 0, REQUIRED
);
1876 make_generic ("radix", GFC_ISYM_NONE
, GFC_STD_F95
);
1878 /* The following function is for G77 compatibility. */
1879 add_sym_1 ("rand", 0, 1, BT_REAL
, 4, GFC_STD_GNU
,
1880 gfc_check_rand
, NULL
, NULL
,
1881 i
, BT_INTEGER
, 4, OPTIONAL
);
1883 /* Compatibility with HP FORTRAN 77/iX Reference. Note, rand() and ran()
1884 use slightly different shoddy multiplicative congruential PRNG. */
1885 make_alias ("ran", GFC_STD_GNU
);
1887 make_generic ("rand", GFC_ISYM_RAND
, GFC_STD_GNU
);
1889 add_sym_1 ("range", 0, 1, BT_INTEGER
, di
, GFC_STD_F95
,
1890 gfc_check_range
, gfc_simplify_range
, NULL
,
1891 x
, BT_REAL
, dr
, REQUIRED
);
1893 make_generic ("range", GFC_ISYM_NONE
, GFC_STD_F95
);
1895 add_sym_2 ("real", 1, 0, BT_REAL
, dr
, GFC_STD_F77
,
1896 gfc_check_real
, gfc_simplify_real
, gfc_resolve_real
,
1897 a
, BT_UNKNOWN
, dr
, REQUIRED
, kind
, BT_INTEGER
, di
, OPTIONAL
);
1899 /* This provides compatibility with g77. */
1900 add_sym_1 ("realpart", 1, 0, BT_REAL
, dr
, GFC_STD_GNU
,
1901 gfc_check_fn_c
, gfc_simplify_realpart
, gfc_resolve_realpart
,
1902 a
, BT_UNKNOWN
, dr
, REQUIRED
);
1904 add_sym_1 ("float", 1, 0, BT_REAL
, dr
, GFC_STD_F77
,
1905 gfc_check_i
, gfc_simplify_float
, NULL
,
1906 a
, BT_INTEGER
, di
, REQUIRED
);
1908 add_sym_1 ("sngl", 1, 0, BT_REAL
, dr
, GFC_STD_F77
,
1909 NULL
, gfc_simplify_sngl
, NULL
,
1910 a
, BT_REAL
, dd
, REQUIRED
);
1912 make_generic ("real", GFC_ISYM_REAL
, GFC_STD_F77
);
1914 add_sym_2 ("rename", 0, 1, BT_INTEGER
, di
, GFC_STD_GNU
,
1915 gfc_check_rename
, NULL
, gfc_resolve_rename
,
1916 a
, BT_CHARACTER
, dc
, REQUIRED
, b
, BT_CHARACTER
, dc
, REQUIRED
);
1918 make_generic ("rename", GFC_ISYM_RENAME
, GFC_STD_GNU
);
1920 add_sym_2 ("repeat", 0, 1, BT_CHARACTER
, dc
, GFC_STD_F95
,
1921 gfc_check_repeat
, gfc_simplify_repeat
, gfc_resolve_repeat
,
1922 stg
, BT_CHARACTER
, dc
, REQUIRED
, n
, BT_INTEGER
, di
, REQUIRED
);
1924 make_generic ("repeat", GFC_ISYM_REPEAT
, GFC_STD_F95
);
1926 add_sym_4 ("reshape", 0, 1, BT_REAL
, dr
, GFC_STD_F95
,
1927 gfc_check_reshape
, gfc_simplify_reshape
, gfc_resolve_reshape
,
1928 src
, BT_REAL
, dr
, REQUIRED
, shp
, BT_INTEGER
, ii
, REQUIRED
,
1929 pad
, BT_REAL
, dr
, OPTIONAL
, ord
, BT_INTEGER
, ii
, OPTIONAL
);
1931 make_generic ("reshape", GFC_ISYM_RESHAPE
, GFC_STD_F95
);
1933 add_sym_1 ("rrspacing", 1, 1, BT_REAL
, dr
, GFC_STD_F95
,
1934 gfc_check_x
, gfc_simplify_rrspacing
, gfc_resolve_rrspacing
,
1935 x
, BT_REAL
, dr
, REQUIRED
);
1937 make_generic ("rrspacing", GFC_ISYM_RRSPACING
, GFC_STD_F95
);
1939 add_sym_2 ("scale", 1, 1, BT_REAL
, dr
, GFC_STD_F95
,
1940 gfc_check_scale
, gfc_simplify_scale
, gfc_resolve_scale
,
1941 x
, BT_REAL
, dr
, REQUIRED
, i
, BT_INTEGER
, di
, REQUIRED
);
1943 make_generic ("scale", GFC_ISYM_SCALE
, GFC_STD_F95
);
1945 add_sym_3 ("scan", 1, 1, BT_INTEGER
, di
, GFC_STD_F95
,
1946 gfc_check_scan
, gfc_simplify_scan
, gfc_resolve_scan
,
1947 stg
, BT_CHARACTER
, dc
, REQUIRED
, set
, BT_CHARACTER
, dc
, REQUIRED
,
1948 bck
, BT_LOGICAL
, dl
, OPTIONAL
);
1950 make_generic ("scan", GFC_ISYM_SCAN
, GFC_STD_F95
);
1952 /* Added for G77 compatibility garbage. */
1953 add_sym_0 ("second", 0, 1, BT_REAL
, 4, GFC_STD_GNU
,
1956 make_generic ("second", GFC_ISYM_SECOND
, GFC_STD_GNU
);
1958 /* Added for G77 compatibility. */
1959 add_sym_1 ("secnds", 0, 1, BT_REAL
, dr
, GFC_STD_GNU
,
1960 gfc_check_secnds
, NULL
, gfc_resolve_secnds
,
1961 x
, BT_REAL
, dr
, REQUIRED
);
1963 make_generic ("secnds", GFC_ISYM_SECNDS
, GFC_STD_GNU
);
1965 add_sym_1 ("selected_int_kind", 0, 1, BT_INTEGER
, di
, GFC_STD_F95
,
1966 gfc_check_selected_int_kind
, gfc_simplify_selected_int_kind
, NULL
,
1967 r
, BT_INTEGER
, di
, REQUIRED
);
1969 make_generic ("selected_int_kind", GFC_ISYM_SI_KIND
, GFC_STD_F95
);
1971 add_sym_2 ("selected_real_kind", 0, 1, BT_INTEGER
, di
, GFC_STD_F95
,
1972 gfc_check_selected_real_kind
, gfc_simplify_selected_real_kind
,
1974 p
, BT_INTEGER
, di
, OPTIONAL
, r
, BT_INTEGER
, di
, OPTIONAL
);
1976 make_generic ("selected_real_kind", GFC_ISYM_SR_KIND
, GFC_STD_F95
);
1978 add_sym_2 ("set_exponent", 1, 1, BT_REAL
, dr
, GFC_STD_F95
,
1979 gfc_check_set_exponent
, gfc_simplify_set_exponent
,
1980 gfc_resolve_set_exponent
,
1981 x
, BT_REAL
, dr
, REQUIRED
, i
, BT_INTEGER
, di
, REQUIRED
);
1983 make_generic ("set_exponent", GFC_ISYM_SET_EXPONENT
, GFC_STD_F95
);
1985 add_sym_1 ("shape", 0, 1, BT_INTEGER
, di
, GFC_STD_F95
,
1986 gfc_check_shape
, gfc_simplify_shape
, gfc_resolve_shape
,
1987 src
, BT_REAL
, dr
, REQUIRED
);
1989 make_generic ("shape", GFC_ISYM_SHAPE
, GFC_STD_F95
);
1991 add_sym_2 ("sign", 1, 1, BT_REAL
, dr
, GFC_STD_F77
,
1992 gfc_check_sign
, gfc_simplify_sign
, gfc_resolve_sign
,
1993 a
, BT_REAL
, dr
, REQUIRED
, b
, BT_REAL
, dr
, REQUIRED
);
1995 add_sym_2 ("isign", 1, 1, BT_INTEGER
, di
, GFC_STD_F77
,
1996 NULL
, gfc_simplify_sign
, gfc_resolve_sign
,
1997 a
, BT_INTEGER
, di
, REQUIRED
, b
, BT_INTEGER
, di
, REQUIRED
);
1999 add_sym_2 ("dsign", 1, 1, BT_REAL
, dd
, GFC_STD_F77
,
2000 NULL
, gfc_simplify_sign
, gfc_resolve_sign
,
2001 a
, BT_REAL
, dd
, REQUIRED
, b
, BT_REAL
, dd
, REQUIRED
);
2003 make_generic ("sign", GFC_ISYM_SIGN
, GFC_STD_F77
);
2005 add_sym_2 ("signal", 1, 1, BT_INTEGER
, di
, GFC_STD_GNU
,
2006 gfc_check_signal
, NULL
, gfc_resolve_signal
,
2007 num
, BT_INTEGER
, di
, REQUIRED
, han
, BT_UNKNOWN
, 0, REQUIRED
);
2009 make_generic ("signal", GFC_ISYM_SIGNAL
, GFC_STD_GNU
);
2011 add_sym_1 ("sin", 1, 1, BT_REAL
, dr
, GFC_STD_F77
,
2012 gfc_check_fn_rc
, gfc_simplify_sin
, gfc_resolve_sin
,
2013 x
, BT_REAL
, dr
, REQUIRED
);
2015 add_sym_1 ("dsin", 1, 1, BT_REAL
, dd
, GFC_STD_F77
,
2016 NULL
, gfc_simplify_sin
, gfc_resolve_sin
,
2017 x
, BT_REAL
, dd
, REQUIRED
);
2019 add_sym_1 ("csin", 1, 1, BT_COMPLEX
, dz
, GFC_STD_F77
,
2020 NULL
, gfc_simplify_sin
, gfc_resolve_sin
,
2021 x
, BT_COMPLEX
, dz
, REQUIRED
);
2023 add_sym_1 ("zsin", 1, 1, BT_COMPLEX
, dd
, GFC_STD_GNU
,
2024 NULL
, gfc_simplify_sin
, gfc_resolve_sin
,
2025 x
, BT_COMPLEX
, dd
, REQUIRED
);
2027 make_alias ("cdsin", GFC_STD_GNU
);
2029 make_generic ("sin", GFC_ISYM_SIN
, GFC_STD_F77
);
2031 add_sym_1 ("sinh", 1, 1, BT_REAL
, dr
, GFC_STD_F77
,
2032 gfc_check_fn_r
, gfc_simplify_sinh
, gfc_resolve_sinh
,
2033 x
, BT_REAL
, dr
, REQUIRED
);
2035 add_sym_1 ("dsinh", 1, 1, BT_REAL
, dd
, GFC_STD_F77
,
2036 NULL
, gfc_simplify_sinh
, gfc_resolve_sinh
,
2037 x
, BT_REAL
, dd
, REQUIRED
);
2039 make_generic ("sinh", GFC_ISYM_SINH
, GFC_STD_F77
);
2041 add_sym_2 ("size", 0, 1, BT_INTEGER
, di
, GFC_STD_F95
,
2042 gfc_check_size
, gfc_simplify_size
, NULL
,
2043 ar
, BT_REAL
, dr
, REQUIRED
, dm
, BT_INTEGER
, ii
, OPTIONAL
);
2045 make_generic ("size", GFC_ISYM_SIZE
, GFC_STD_F95
);
2047 add_sym_1 ("spacing", 1, 1, BT_REAL
, dr
, GFC_STD_F95
,
2048 gfc_check_x
, gfc_simplify_spacing
, gfc_resolve_spacing
,
2049 x
, BT_REAL
, dr
, REQUIRED
);
2051 make_generic ("spacing", GFC_ISYM_SPACING
, GFC_STD_F95
);
2053 add_sym_3 ("spread", 0, 1, BT_REAL
, dr
, GFC_STD_F95
,
2054 gfc_check_spread
, NULL
, gfc_resolve_spread
,
2055 src
, BT_REAL
, dr
, REQUIRED
, dm
, BT_INTEGER
, ii
, REQUIRED
,
2056 n
, BT_INTEGER
, di
, REQUIRED
);
2058 make_generic ("spread", GFC_ISYM_SPREAD
, GFC_STD_F95
);
2060 add_sym_1 ("sqrt", 1, 1, BT_REAL
, dr
, GFC_STD_F77
,
2061 gfc_check_fn_rc
, gfc_simplify_sqrt
, gfc_resolve_sqrt
,
2062 x
, BT_REAL
, dr
, REQUIRED
);
2064 add_sym_1 ("dsqrt", 1, 1, BT_REAL
, dd
, GFC_STD_F77
,
2065 NULL
, gfc_simplify_sqrt
, gfc_resolve_sqrt
,
2066 x
, BT_REAL
, dd
, REQUIRED
);
2068 add_sym_1 ("csqrt", 1, 1, BT_COMPLEX
, dz
, GFC_STD_F77
,
2069 NULL
, gfc_simplify_sqrt
, gfc_resolve_sqrt
,
2070 x
, BT_COMPLEX
, dz
, REQUIRED
);
2072 add_sym_1 ("zsqrt", 1, 1, BT_COMPLEX
, dd
, GFC_STD_GNU
,
2073 NULL
, gfc_simplify_sqrt
, gfc_resolve_sqrt
,
2074 x
, BT_COMPLEX
, dd
, REQUIRED
);
2076 make_alias ("cdsqrt", GFC_STD_GNU
);
2078 make_generic ("sqrt", GFC_ISYM_SQRT
, GFC_STD_F77
);
2080 add_sym_2 ("stat", 0, 1, BT_INTEGER
, di
, GFC_STD_GNU
,
2081 gfc_check_stat
, NULL
, gfc_resolve_stat
,
2082 a
, BT_CHARACTER
, dc
, REQUIRED
, b
, BT_INTEGER
, di
, REQUIRED
);
2084 make_generic ("stat", GFC_ISYM_STAT
, GFC_STD_GNU
);
2086 add_sym_3red ("sum", 0, 1, BT_UNKNOWN
, 0, GFC_STD_F95
,
2087 gfc_check_product_sum
, NULL
, gfc_resolve_sum
,
2088 ar
, BT_REAL
, dr
, REQUIRED
, dm
, BT_INTEGER
, ii
, OPTIONAL
,
2089 msk
, BT_LOGICAL
, dl
, OPTIONAL
);
2091 make_generic ("sum", GFC_ISYM_SUM
, GFC_STD_F95
);
2093 add_sym_2 ("symlnk", 0, 1, BT_INTEGER
, di
, GFC_STD_GNU
,
2094 gfc_check_symlnk
, NULL
, gfc_resolve_symlnk
,
2095 a
, BT_CHARACTER
, dc
, REQUIRED
, b
, BT_CHARACTER
, dc
, REQUIRED
);
2097 make_generic ("symlnk", GFC_ISYM_SYMLNK
, GFC_STD_GNU
);
2099 add_sym_1 ("system", 1, 1, BT_INTEGER
, di
, GFC_STD_GNU
,
2101 c
, BT_CHARACTER
, dc
, REQUIRED
);
2103 make_generic ("system", GFC_ISYM_SYSTEM
, GFC_STD_GNU
);
2105 add_sym_1 ("tan", 1, 1, BT_REAL
, dr
, GFC_STD_F77
,
2106 gfc_check_fn_r
, gfc_simplify_tan
, gfc_resolve_tan
,
2107 x
, BT_REAL
, dr
, REQUIRED
);
2109 add_sym_1 ("dtan", 1, 1, BT_REAL
, dd
, GFC_STD_F77
,
2110 NULL
, gfc_simplify_tan
, gfc_resolve_tan
,
2111 x
, BT_REAL
, dd
, REQUIRED
);
2113 make_generic ("tan", GFC_ISYM_TAN
, GFC_STD_F77
);
2115 add_sym_1 ("tanh", 1, 1, BT_REAL
, dr
, GFC_STD_F77
,
2116 gfc_check_fn_r
, gfc_simplify_tanh
, gfc_resolve_tanh
,
2117 x
, BT_REAL
, dr
, REQUIRED
);
2119 add_sym_1 ("dtanh", 1, 1, BT_REAL
, dd
, GFC_STD_F77
,
2120 NULL
, gfc_simplify_tanh
, gfc_resolve_tanh
,
2121 x
, BT_REAL
, dd
, REQUIRED
);
2123 make_generic ("tanh", GFC_ISYM_TANH
, GFC_STD_F77
);
2125 add_sym_0 ("time", 1, 0, BT_INTEGER
, di
, GFC_STD_GNU
,
2126 NULL
, NULL
, gfc_resolve_time
);
2128 make_generic ("time", GFC_ISYM_TIME
, GFC_STD_GNU
);
2130 add_sym_0 ("time8", 1, 0, BT_INTEGER
, di
, GFC_STD_GNU
,
2131 NULL
, NULL
, gfc_resolve_time8
);
2133 make_generic ("time8", GFC_ISYM_TIME8
, GFC_STD_GNU
);
2135 add_sym_1 ("tiny", 0, 1, BT_REAL
, dr
, GFC_STD_F95
,
2136 gfc_check_x
, gfc_simplify_tiny
, NULL
,
2137 x
, BT_REAL
, dr
, REQUIRED
);
2139 make_generic ("tiny", GFC_ISYM_NONE
, GFC_STD_F95
);
2141 add_sym_3 ("transfer", 0, 1, BT_REAL
, dr
, GFC_STD_F95
,
2142 gfc_check_transfer
, gfc_simplify_transfer
, gfc_resolve_transfer
,
2143 src
, BT_REAL
, dr
, REQUIRED
, mo
, BT_REAL
, dr
, REQUIRED
,
2144 sz
, BT_INTEGER
, di
, OPTIONAL
);
2146 make_generic ("transfer", GFC_ISYM_TRANSFER
, GFC_STD_F95
);
2148 add_sym_1 ("transpose", 0, 1, BT_REAL
, dr
, GFC_STD_F95
,
2149 gfc_check_transpose
, NULL
, gfc_resolve_transpose
,
2150 m
, BT_REAL
, dr
, REQUIRED
);
2152 make_generic ("transpose", GFC_ISYM_TRANSPOSE
, GFC_STD_F95
);
2154 add_sym_1 ("trim", 0, 1, BT_CHARACTER
, dc
, GFC_STD_F95
,
2155 gfc_check_trim
, gfc_simplify_trim
, gfc_resolve_trim
,
2156 stg
, BT_CHARACTER
, dc
, REQUIRED
);
2158 make_generic ("trim", GFC_ISYM_TRIM
, GFC_STD_F95
);
2160 add_sym_1 ("ttynam", 0, 1, BT_CHARACTER
, 0, GFC_STD_GNU
,
2161 gfc_check_ttynam
, NULL
, gfc_resolve_ttynam
,
2162 ut
, BT_INTEGER
, di
, REQUIRED
);
2164 make_generic ("ttynam", GFC_ISYM_TTYNAM
, GFC_STD_GNU
);
2166 add_sym_2 ("ubound", 0, 1, BT_INTEGER
, di
, GFC_STD_F95
,
2167 gfc_check_ubound
, gfc_simplify_ubound
, gfc_resolve_ubound
,
2168 ar
, BT_REAL
, dr
, REQUIRED
, dm
, BT_INTEGER
, ii
, OPTIONAL
);
2170 make_generic ("ubound", GFC_ISYM_UBOUND
, GFC_STD_F95
);
2172 /* g77 compatibility for UMASK. */
2173 add_sym_1 ("umask", 0, 1, BT_INTEGER
, di
, GFC_STD_GNU
,
2174 gfc_check_umask
, NULL
, gfc_resolve_umask
,
2175 a
, BT_INTEGER
, di
, REQUIRED
);
2177 make_generic ("umask", GFC_ISYM_UMASK
, GFC_STD_GNU
);
2179 /* g77 compatibility for UNLINK. */
2180 add_sym_1 ("unlink", 0, 1, BT_INTEGER
, di
, GFC_STD_GNU
,
2181 gfc_check_unlink
, NULL
, gfc_resolve_unlink
,
2182 a
, BT_CHARACTER
, dc
, REQUIRED
);
2184 make_generic ("unlink", GFC_ISYM_UNLINK
, GFC_STD_GNU
);
2186 add_sym_3 ("unpack", 0, 1, BT_REAL
, dr
, GFC_STD_F95
,
2187 gfc_check_unpack
, NULL
, gfc_resolve_unpack
,
2188 v
, BT_REAL
, dr
, REQUIRED
, msk
, BT_LOGICAL
, dl
, REQUIRED
,
2189 f
, BT_REAL
, dr
, REQUIRED
);
2191 make_generic ("unpack", GFC_ISYM_UNPACK
, GFC_STD_F95
);
2193 add_sym_3 ("verify", 1, 1, BT_INTEGER
, di
, GFC_STD_F95
,
2194 gfc_check_verify
, gfc_simplify_verify
, gfc_resolve_verify
,
2195 stg
, BT_CHARACTER
, dc
, REQUIRED
, set
, BT_CHARACTER
, dc
, REQUIRED
,
2196 bck
, BT_LOGICAL
, dl
, OPTIONAL
);
2198 make_generic ("verify", GFC_ISYM_VERIFY
, GFC_STD_F95
);
2200 add_sym_1 ("loc", 0, 1, BT_INTEGER
, ii
, GFC_STD_GNU
,
2201 gfc_check_loc
, NULL
, gfc_resolve_loc
,
2202 ar
, BT_UNKNOWN
, 0, REQUIRED
);
2204 make_generic ("loc", GFC_ISYM_LOC
, GFC_STD_GNU
);
2209 /* Add intrinsic subroutines. */
2212 add_subroutines (void)
2214 /* Argument names as in the standard (to be used as argument keywords). */
2216 *h
= "harvest", *dt
= "date", *vl
= "values", *pt
= "put",
2217 *c
= "count", *tm
= "time", *tp
= "topos", *gt
= "get",
2218 *t
= "to", *zn
= "zone", *fp
= "frompos", *cm
= "count_max",
2219 *f
= "from", *sz
= "size", *ln
= "len", *cr
= "count_rate",
2220 *com
= "command", *length
= "length", *st
= "status",
2221 *val
= "value", *num
= "number", *name
= "name",
2222 *trim_name
= "trim_name", *ut
= "unit", *han
= "handler",
2223 *sec
= "seconds", *res
= "result", *of
= "offset";
2225 int di
, dr
, dc
, dl
, ii
;
2227 di
= gfc_default_integer_kind
;
2228 dr
= gfc_default_real_kind
;
2229 dc
= gfc_default_character_kind
;
2230 dl
= gfc_default_logical_kind
;
2231 ii
= gfc_index_integer_kind
;
2233 add_sym_0s ("abort", 1, GFC_STD_GNU
, NULL
);
2235 if ((gfc_option
.allow_std
& GFC_STD_GNU
) || gfc_option
.flag_all_intrinsics
)
2238 add_sym_1s ("cpu_time", 0, 1, BT_UNKNOWN
, 0, GFC_STD_F95
,
2239 gfc_check_cpu_time
, NULL
, gfc_resolve_cpu_time
,
2240 tm
, BT_REAL
, dr
, REQUIRED
);
2242 /* More G77 compatibility garbage. */
2243 add_sym_2s ("ctime", 0, 1, BT_UNKNOWN
, 0, GFC_STD_GNU
,
2244 gfc_check_ctime_sub
, NULL
, gfc_resolve_ctime_sub
,
2245 tm
, BT_INTEGER
, di
, REQUIRED
, res
, BT_CHARACTER
, dc
, REQUIRED
);
2247 add_sym_1s ("second", 0, 1, BT_UNKNOWN
, 0, GFC_STD_GNU
,
2248 gfc_check_second_sub
, NULL
, gfc_resolve_second_sub
,
2249 tm
, BT_REAL
, dr
, REQUIRED
);
2251 add_sym_2s ("chdir", 0, 1, BT_UNKNOWN
, 0, GFC_STD_GNU
,
2252 gfc_check_chdir_sub
, NULL
, gfc_resolve_chdir_sub
,
2253 name
, BT_CHARACTER
, dc
, REQUIRED
, st
, BT_INTEGER
, di
, OPTIONAL
);
2255 add_sym_4s ("date_and_time", 0, 1, BT_UNKNOWN
, 0, GFC_STD_F95
,
2256 gfc_check_date_and_time
, NULL
, NULL
,
2257 dt
, BT_CHARACTER
, dc
, OPTIONAL
, tm
, BT_CHARACTER
, dc
, OPTIONAL
,
2258 zn
, BT_CHARACTER
, dc
, OPTIONAL
, vl
, BT_INTEGER
, di
, OPTIONAL
);
2260 /* More G77 compatibility garbage. */
2261 add_sym_2s ("etime", 0, 1, BT_UNKNOWN
, 0, GFC_STD_GNU
,
2262 gfc_check_etime_sub
, NULL
, gfc_resolve_etime_sub
,
2263 vl
, BT_REAL
, 4, REQUIRED
, tm
, BT_REAL
, 4, REQUIRED
);
2265 add_sym_2s ("dtime", 0, 1, BT_UNKNOWN
, 0, GFC_STD_GNU
,
2266 gfc_check_etime_sub
, NULL
, gfc_resolve_etime_sub
,
2267 vl
, BT_REAL
, 4, REQUIRED
, tm
, BT_REAL
, 4, REQUIRED
);
2269 add_sym_1s ("fdate", 0, 1, BT_UNKNOWN
, 0, GFC_STD_GNU
,
2270 gfc_check_fdate_sub
, NULL
, gfc_resolve_fdate_sub
,
2271 dt
, BT_CHARACTER
, dc
, REQUIRED
);
2273 add_sym_1s ("gerror", 0, 1, BT_UNKNOWN
, 0, GFC_STD_GNU
,
2274 gfc_check_gerror
, NULL
, gfc_resolve_gerror
, c
, BT_CHARACTER
,
2277 add_sym_2s ("getcwd", 0, 1, BT_UNKNOWN
, 0, GFC_STD_GNU
,
2278 gfc_check_getcwd_sub
, NULL
, gfc_resolve_getcwd_sub
,
2279 c
, BT_CHARACTER
, dc
, REQUIRED
, st
, BT_INTEGER
, di
, OPTIONAL
);
2281 add_sym_2s ("getenv", 0, 1, BT_UNKNOWN
, 0, GFC_STD_GNU
,
2283 name
, BT_CHARACTER
, dc
, REQUIRED
, val
, BT_CHARACTER
, dc
, REQUIRED
);
2285 add_sym_2s ("getarg", 0, 1, BT_UNKNOWN
, 0, GFC_STD_GNU
,
2286 NULL
, NULL
, gfc_resolve_getarg
,
2287 c
, BT_INTEGER
, di
, REQUIRED
, vl
, BT_CHARACTER
, dc
, REQUIRED
);
2289 add_sym_1s ("getlog", 0, 1, BT_UNKNOWN
, 0, GFC_STD_GNU
,
2290 gfc_check_getlog
, NULL
, gfc_resolve_getlog
, c
, BT_CHARACTER
,
2293 /* F2003 commandline routines. */
2295 add_sym_3s ("get_command", 0, 1, BT_UNKNOWN
, 0, GFC_STD_F2003
,
2296 NULL
, NULL
, gfc_resolve_get_command
,
2297 com
, BT_CHARACTER
, dc
, OPTIONAL
, length
, BT_INTEGER
, di
, OPTIONAL
,
2298 st
, BT_INTEGER
, di
, OPTIONAL
);
2300 add_sym_4s ("get_command_argument", 0, 1, BT_UNKNOWN
, 0, GFC_STD_F2003
,
2301 NULL
, NULL
, gfc_resolve_get_command_argument
,
2302 num
, BT_INTEGER
, di
, REQUIRED
, val
, BT_CHARACTER
, dc
, OPTIONAL
,
2303 length
, BT_INTEGER
, di
, OPTIONAL
, st
, BT_INTEGER
, di
, OPTIONAL
);
2305 /* F2003 subroutine to get environment variables. */
2307 add_sym_5s ("get_environment_variable", 0, 1, BT_UNKNOWN
, 0, GFC_STD_F2003
,
2308 NULL
, NULL
, gfc_resolve_get_environment_variable
,
2309 name
, BT_CHARACTER
, dc
, REQUIRED
, val
, BT_CHARACTER
, dc
, OPTIONAL
,
2310 length
, BT_INTEGER
, di
, OPTIONAL
, st
, BT_INTEGER
, di
, OPTIONAL
,
2311 trim_name
, BT_LOGICAL
, dl
, OPTIONAL
);
2313 add_sym_5s ("mvbits", 1, 1, BT_UNKNOWN
, 0, GFC_STD_F95
,
2314 gfc_check_mvbits
, gfc_simplify_mvbits
, gfc_resolve_mvbits
,
2315 f
, BT_INTEGER
, di
, REQUIRED
, fp
, BT_INTEGER
, di
, REQUIRED
,
2316 ln
, BT_INTEGER
, di
, REQUIRED
, t
, BT_INTEGER
, di
, REQUIRED
,
2317 tp
, BT_INTEGER
, di
, REQUIRED
);
2319 add_sym_1s ("random_number", 0, 1, BT_UNKNOWN
, 0, GFC_STD_F95
,
2320 gfc_check_random_number
, NULL
, gfc_resolve_random_number
,
2321 h
, BT_REAL
, dr
, REQUIRED
);
2323 add_sym_3s ("random_seed", 0, 1, BT_UNKNOWN
, 0, GFC_STD_F95
,
2324 gfc_check_random_seed
, NULL
, NULL
,
2325 sz
, BT_INTEGER
, di
, OPTIONAL
, pt
, BT_INTEGER
, di
, OPTIONAL
,
2326 gt
, BT_INTEGER
, di
, OPTIONAL
);
2328 /* More G77 compatibility garbage. */
2329 add_sym_3s ("alarm", 0, 1, BT_UNKNOWN
, 0, GFC_STD_GNU
,
2330 gfc_check_alarm_sub
, NULL
, gfc_resolve_alarm_sub
,
2331 sec
, BT_INTEGER
, di
, REQUIRED
, han
, BT_UNKNOWN
, 0, REQUIRED
,
2332 st
, BT_INTEGER
, di
, OPTIONAL
);
2334 add_sym_1s ("srand", 0, 1, BT_UNKNOWN
, di
, GFC_STD_GNU
,
2335 gfc_check_srand
, NULL
, gfc_resolve_srand
,
2336 c
, BT_INTEGER
, 4, REQUIRED
);
2338 add_sym_1s ("exit", 0, 1, BT_UNKNOWN
, 0, GFC_STD_GNU
,
2339 gfc_check_exit
, NULL
, gfc_resolve_exit
,
2340 c
, BT_INTEGER
, di
, OPTIONAL
);
2342 if ((gfc_option
.allow_std
& GFC_STD_GNU
) || gfc_option
.flag_all_intrinsics
)
2345 add_sym_3s ("fgetc", 0, 1, BT_UNKNOWN
, 0, GFC_STD_GNU
,
2346 gfc_check_fgetputc_sub
, NULL
, gfc_resolve_fgetc_sub
,
2347 ut
, BT_INTEGER
, di
, REQUIRED
, c
, BT_CHARACTER
, dc
, REQUIRED
,
2348 st
, BT_INTEGER
, di
, OPTIONAL
);
2350 add_sym_2s ("fget", 0, 1, BT_UNKNOWN
, 0, GFC_STD_GNU
,
2351 gfc_check_fgetput_sub
, NULL
, gfc_resolve_fget_sub
,
2352 c
, BT_CHARACTER
, dc
, REQUIRED
, st
, BT_INTEGER
, di
, OPTIONAL
);
2354 add_sym_1s ("flush", 0, 1, BT_UNKNOWN
, 0, GFC_STD_GNU
,
2355 gfc_check_flush
, NULL
, gfc_resolve_flush
,
2356 c
, BT_INTEGER
, di
, OPTIONAL
);
2358 add_sym_3s ("fputc", 0, 1, BT_UNKNOWN
, 0, GFC_STD_GNU
,
2359 gfc_check_fgetputc_sub
, NULL
, gfc_resolve_fputc_sub
,
2360 ut
, BT_INTEGER
, di
, REQUIRED
, c
, BT_CHARACTER
, dc
, REQUIRED
,
2361 st
, BT_INTEGER
, di
, OPTIONAL
);
2363 add_sym_2s ("fput", 0, 1, BT_UNKNOWN
, 0, GFC_STD_GNU
,
2364 gfc_check_fgetput_sub
, NULL
, gfc_resolve_fput_sub
,
2365 c
, BT_CHARACTER
, dc
, REQUIRED
, st
, BT_INTEGER
, di
, OPTIONAL
);
2367 add_sym_1s ("free", 0, 1, BT_UNKNOWN
, 0, GFC_STD_GNU
, gfc_check_free
,
2368 NULL
, gfc_resolve_free
, c
, BT_INTEGER
, ii
, REQUIRED
);
2370 add_sym_2s ("ftell", 0, 1, BT_UNKNOWN
, 0, GFC_STD_GNU
,
2371 gfc_check_ftell_sub
, NULL
, gfc_resolve_ftell_sub
,
2372 ut
, BT_INTEGER
, di
, REQUIRED
, of
, BT_INTEGER
, ii
, REQUIRED
);
2374 add_sym_2s ("hostnm", 0, 1, BT_UNKNOWN
, 0, GFC_STD_GNU
,
2375 gfc_check_hostnm_sub
, NULL
, gfc_resolve_hostnm_sub
,
2376 c
, BT_CHARACTER
, dc
, REQUIRED
, st
, BT_INTEGER
, di
, OPTIONAL
);
2378 add_sym_3s ("kill", 0, 1, BT_UNKNOWN
, 0, GFC_STD_GNU
, gfc_check_kill_sub
,
2379 NULL
, gfc_resolve_kill_sub
, c
, BT_INTEGER
, di
, REQUIRED
,
2380 val
, BT_INTEGER
, di
, REQUIRED
, st
, BT_INTEGER
, di
, OPTIONAL
);
2382 add_sym_3s ("link", 0, 1, BT_UNKNOWN
, 0, GFC_STD_GNU
,
2383 gfc_check_link_sub
, NULL
, gfc_resolve_link_sub
,
2384 name
, BT_CHARACTER
, dc
, REQUIRED
, val
, BT_CHARACTER
,
2385 dc
, REQUIRED
, st
, BT_INTEGER
, di
, OPTIONAL
);
2387 add_sym_1s ("perror", 0, 1, BT_UNKNOWN
, 0, GFC_STD_GNU
,
2388 gfc_check_perror
, NULL
, gfc_resolve_perror
,
2389 c
, BT_CHARACTER
, dc
, REQUIRED
);
2391 add_sym_3s ("rename", 0, 1, BT_UNKNOWN
, 0, GFC_STD_GNU
,
2392 gfc_check_rename_sub
, NULL
, gfc_resolve_rename_sub
,
2393 name
, BT_CHARACTER
, dc
, REQUIRED
, val
, BT_CHARACTER
,
2394 dc
, REQUIRED
, st
, BT_INTEGER
, di
, OPTIONAL
);
2396 add_sym_1s ("sleep", 0, 1, BT_UNKNOWN
, 0, GFC_STD_GNU
,
2397 gfc_check_sleep_sub
, NULL
, gfc_resolve_sleep_sub
,
2398 val
, BT_CHARACTER
, dc
, REQUIRED
);
2400 add_sym_3s ("fstat", 0, 1, BT_UNKNOWN
, 0, GFC_STD_GNU
,
2401 gfc_check_fstat_sub
, NULL
, gfc_resolve_fstat_sub
,
2402 ut
, BT_INTEGER
, di
, REQUIRED
, vl
, BT_INTEGER
, di
, REQUIRED
,
2403 st
, BT_INTEGER
, di
, OPTIONAL
);
2405 add_sym_3s ("stat", 0, 1, BT_UNKNOWN
, 0, GFC_STD_GNU
,
2406 gfc_check_stat_sub
, NULL
, gfc_resolve_stat_sub
,
2407 name
, BT_CHARACTER
, dc
, REQUIRED
, vl
, BT_INTEGER
, di
, REQUIRED
,
2408 st
, BT_INTEGER
, di
, OPTIONAL
);
2410 add_sym_3s ("signal", 0, 1, BT_UNKNOWN
, 0, GFC_STD_GNU
,
2411 gfc_check_signal_sub
, NULL
, gfc_resolve_signal_sub
,
2412 num
, BT_INTEGER
, di
, REQUIRED
, han
, BT_UNKNOWN
, 0, REQUIRED
,
2413 st
, BT_INTEGER
, di
, OPTIONAL
);
2415 add_sym_3s ("symlnk", 0, 1, BT_UNKNOWN
, 0, GFC_STD_GNU
,
2416 gfc_check_symlnk_sub
, NULL
, gfc_resolve_symlnk_sub
,
2417 name
, BT_CHARACTER
, dc
, REQUIRED
, val
, BT_CHARACTER
,
2418 dc
, REQUIRED
, st
, BT_INTEGER
, di
, OPTIONAL
);
2420 add_sym_2s ("system", 0, 1, BT_UNKNOWN
, 0, GFC_STD_GNU
,
2421 NULL
, NULL
, gfc_resolve_system_sub
,
2422 c
, BT_CHARACTER
, dc
, REQUIRED
, st
, BT_INTEGER
, di
, OPTIONAL
);
2424 add_sym_3s ("system_clock", 0, 1, BT_UNKNOWN
, 0, GFC_STD_F95
,
2425 gfc_check_system_clock
, NULL
, gfc_resolve_system_clock
,
2426 c
, BT_INTEGER
, di
, OPTIONAL
, cr
, BT_INTEGER
, di
, OPTIONAL
,
2427 cm
, BT_INTEGER
, di
, OPTIONAL
);
2429 add_sym_2s ("ttynam", 0, 1, BT_UNKNOWN
, 0, GFC_STD_GNU
,
2430 gfc_check_ttynam_sub
, NULL
, gfc_resolve_ttynam_sub
,
2431 ut
, BT_INTEGER
, di
, REQUIRED
, c
, BT_CHARACTER
, dc
, REQUIRED
);
2433 add_sym_2s ("umask", 0, 1, BT_UNKNOWN
, 0, GFC_STD_GNU
,
2434 gfc_check_umask_sub
, NULL
, gfc_resolve_umask_sub
,
2435 val
, BT_INTEGER
, di
, REQUIRED
, num
, BT_INTEGER
, di
, OPTIONAL
);
2437 add_sym_2s ("unlink", 0, 1, BT_UNKNOWN
, 0, GFC_STD_GNU
,
2438 gfc_check_unlink_sub
, NULL
, gfc_resolve_unlink_sub
,
2439 c
, BT_CHARACTER
, dc
, REQUIRED
, st
, BT_INTEGER
, di
, OPTIONAL
);
2444 /* Add a function to the list of conversion symbols. */
2447 add_conv (bt from_type
, int from_kind
, bt to_type
, int to_kind
, int standard
)
2450 gfc_typespec from
, to
;
2451 gfc_intrinsic_sym
*sym
;
2453 if (sizing
== SZ_CONVS
)
2459 gfc_clear_ts (&from
);
2460 from
.type
= from_type
;
2461 from
.kind
= from_kind
;
2467 sym
= conversion
+ nconv
;
2469 sym
->name
= conv_name (&from
, &to
);
2470 sym
->lib_name
= sym
->name
;
2471 sym
->simplify
.cc
= gfc_convert_constant
;
2472 sym
->standard
= standard
;
2475 sym
->generic_id
= GFC_ISYM_CONVERSION
;
2481 /* Create gfc_intrinsic_sym nodes for all intrinsic conversion
2482 functions by looping over the kind tables. */
2485 add_conversions (void)
2489 /* Integer-Integer conversions. */
2490 for (i
= 0; gfc_integer_kinds
[i
].kind
!= 0; i
++)
2491 for (j
= 0; gfc_integer_kinds
[j
].kind
!= 0; j
++)
2496 add_conv (BT_INTEGER
, gfc_integer_kinds
[i
].kind
,
2497 BT_INTEGER
, gfc_integer_kinds
[j
].kind
, GFC_STD_F77
);
2500 /* Integer-Real/Complex conversions. */
2501 for (i
= 0; gfc_integer_kinds
[i
].kind
!= 0; i
++)
2502 for (j
= 0; gfc_real_kinds
[j
].kind
!= 0; j
++)
2504 add_conv (BT_INTEGER
, gfc_integer_kinds
[i
].kind
,
2505 BT_REAL
, gfc_real_kinds
[j
].kind
, GFC_STD_F77
);
2507 add_conv (BT_REAL
, gfc_real_kinds
[j
].kind
,
2508 BT_INTEGER
, gfc_integer_kinds
[i
].kind
, GFC_STD_F77
);
2510 add_conv (BT_INTEGER
, gfc_integer_kinds
[i
].kind
,
2511 BT_COMPLEX
, gfc_real_kinds
[j
].kind
, GFC_STD_F77
);
2513 add_conv (BT_COMPLEX
, gfc_real_kinds
[j
].kind
,
2514 BT_INTEGER
, gfc_integer_kinds
[i
].kind
, GFC_STD_F77
);
2517 if ((gfc_option
.allow_std
& GFC_STD_LEGACY
) != 0)
2519 /* Hollerith-Integer conversions. */
2520 for (i
= 0; gfc_integer_kinds
[i
].kind
!= 0; i
++)
2521 add_conv (BT_HOLLERITH
, gfc_default_character_kind
,
2522 BT_INTEGER
, gfc_integer_kinds
[i
].kind
, GFC_STD_LEGACY
);
2523 /* Hollerith-Real conversions. */
2524 for (i
= 0; gfc_real_kinds
[i
].kind
!= 0; i
++)
2525 add_conv (BT_HOLLERITH
, gfc_default_character_kind
,
2526 BT_REAL
, gfc_real_kinds
[i
].kind
, GFC_STD_LEGACY
);
2527 /* Hollerith-Complex conversions. */
2528 for (i
= 0; gfc_real_kinds
[i
].kind
!= 0; i
++)
2529 add_conv (BT_HOLLERITH
, gfc_default_character_kind
,
2530 BT_COMPLEX
, gfc_real_kinds
[i
].kind
, GFC_STD_LEGACY
);
2532 /* Hollerith-Character conversions. */
2533 add_conv (BT_HOLLERITH
, gfc_default_character_kind
, BT_CHARACTER
,
2534 gfc_default_character_kind
, GFC_STD_LEGACY
);
2536 /* Hollerith-Logical conversions. */
2537 for (i
= 0; gfc_logical_kinds
[i
].kind
!= 0; i
++)
2538 add_conv (BT_HOLLERITH
, gfc_default_character_kind
,
2539 BT_LOGICAL
, gfc_logical_kinds
[i
].kind
, GFC_STD_LEGACY
);
2542 /* Real/Complex - Real/Complex conversions. */
2543 for (i
= 0; gfc_real_kinds
[i
].kind
!= 0; i
++)
2544 for (j
= 0; gfc_real_kinds
[j
].kind
!= 0; j
++)
2548 add_conv (BT_REAL
, gfc_real_kinds
[i
].kind
,
2549 BT_REAL
, gfc_real_kinds
[j
].kind
, GFC_STD_F77
);
2551 add_conv (BT_COMPLEX
, gfc_real_kinds
[i
].kind
,
2552 BT_COMPLEX
, gfc_real_kinds
[j
].kind
, GFC_STD_F77
);
2555 add_conv (BT_REAL
, gfc_real_kinds
[i
].kind
,
2556 BT_COMPLEX
, gfc_real_kinds
[j
].kind
, GFC_STD_F77
);
2558 add_conv (BT_COMPLEX
, gfc_real_kinds
[i
].kind
,
2559 BT_REAL
, gfc_real_kinds
[j
].kind
, GFC_STD_F77
);
2562 /* Logical/Logical kind conversion. */
2563 for (i
= 0; gfc_logical_kinds
[i
].kind
; i
++)
2564 for (j
= 0; gfc_logical_kinds
[j
].kind
; j
++)
2569 add_conv (BT_LOGICAL
, gfc_logical_kinds
[i
].kind
,
2570 BT_LOGICAL
, gfc_logical_kinds
[j
].kind
, GFC_STD_F77
);
2573 /* Integer-Logical and Logical-Integer conversions. */
2574 if ((gfc_option
.allow_std
& GFC_STD_LEGACY
) != 0)
2575 for (i
=0; gfc_integer_kinds
[i
].kind
; i
++)
2576 for (j
=0; gfc_logical_kinds
[j
].kind
; j
++)
2578 add_conv (BT_INTEGER
, gfc_integer_kinds
[i
].kind
,
2579 BT_LOGICAL
, gfc_logical_kinds
[j
].kind
, GFC_STD_LEGACY
);
2580 add_conv (BT_LOGICAL
, gfc_logical_kinds
[j
].kind
,
2581 BT_INTEGER
, gfc_integer_kinds
[i
].kind
, GFC_STD_LEGACY
);
2586 /* Initialize the table of intrinsics. */
2588 gfc_intrinsic_init_1 (void)
2592 nargs
= nfunc
= nsub
= nconv
= 0;
2594 /* Create a namespace to hold the resolved intrinsic symbols. */
2595 gfc_intrinsic_namespace
= gfc_get_namespace (NULL
, 0);
2604 functions
= gfc_getmem (sizeof (gfc_intrinsic_sym
) * (nfunc
+ nsub
)
2605 + sizeof (gfc_intrinsic_arg
) * nargs
);
2607 next_sym
= functions
;
2608 subroutines
= functions
+ nfunc
;
2610 conversion
= gfc_getmem (sizeof (gfc_intrinsic_sym
) * nconv
);
2612 next_arg
= ((gfc_intrinsic_arg
*) (subroutines
+ nsub
)) - 1;
2614 sizing
= SZ_NOTHING
;
2621 /* Set the pure flag. All intrinsic functions are pure, and
2622 intrinsic subroutines are pure if they are elemental. */
2624 for (i
= 0; i
< nfunc
; i
++)
2625 functions
[i
].pure
= 1;
2627 for (i
= 0; i
< nsub
; i
++)
2628 subroutines
[i
].pure
= subroutines
[i
].elemental
;
2633 gfc_intrinsic_done_1 (void)
2635 gfc_free (functions
);
2636 gfc_free (conversion
);
2637 gfc_free_namespace (gfc_intrinsic_namespace
);
2641 /******** Subroutines to check intrinsic interfaces ***********/
2643 /* Given a formal argument list, remove any NULL arguments that may
2644 have been left behind by a sort against some formal argument list. */
2647 remove_nullargs (gfc_actual_arglist
** ap
)
2649 gfc_actual_arglist
*head
, *tail
, *next
;
2653 for (head
= *ap
; head
; head
= next
)
2657 if (head
->expr
== NULL
)
2660 gfc_free_actual_arglist (head
);
2679 /* Given an actual arglist and a formal arglist, sort the actual
2680 arglist so that its arguments are in a one-to-one correspondence
2681 with the format arglist. Arguments that are not present are given
2682 a blank gfc_actual_arglist structure. If something is obviously
2683 wrong (say, a missing required argument) we abort sorting and
2687 sort_actual (const char *name
, gfc_actual_arglist
** ap
,
2688 gfc_intrinsic_arg
* formal
, locus
* where
)
2691 gfc_actual_arglist
*actual
, *a
;
2692 gfc_intrinsic_arg
*f
;
2694 remove_nullargs (ap
);
2697 for (f
= formal
; f
; f
= f
->next
)
2703 if (f
== NULL
&& a
== NULL
) /* No arguments */
2707 { /* Put the nonkeyword arguments in a 1:1 correspondence */
2713 if (a
->name
!= NULL
)
2725 gfc_error ("Too many arguments in call to '%s' at %L", name
, where
);
2729 /* Associate the remaining actual arguments, all of which have
2730 to be keyword arguments. */
2731 for (; a
; a
= a
->next
)
2733 for (f
= formal
; f
; f
= f
->next
)
2734 if (strcmp (a
->name
, f
->name
) == 0)
2739 gfc_error ("Can't find keyword named '%s' in call to '%s' at %L",
2740 a
->name
, name
, where
);
2744 if (f
->actual
!= NULL
)
2746 gfc_error ("Argument '%s' is appears twice in call to '%s' at %L",
2747 f
->name
, name
, where
);
2755 /* At this point, all unmatched formal args must be optional. */
2756 for (f
= formal
; f
; f
= f
->next
)
2758 if (f
->actual
== NULL
&& f
->optional
== 0)
2760 gfc_error ("Missing actual argument '%s' in call to '%s' at %L",
2761 f
->name
, name
, where
);
2767 /* Using the formal argument list, string the actual argument list
2768 together in a way that corresponds with the formal list. */
2771 for (f
= formal
; f
; f
= f
->next
)
2773 if (f
->actual
== NULL
)
2775 a
= gfc_get_actual_arglist ();
2776 a
->missing_arg_type
= f
->ts
.type
;
2788 actual
->next
= NULL
; /* End the sorted argument list. */
2794 /* Compare an actual argument list with an intrinsic's formal argument
2795 list. The lists are checked for agreement of type. We don't check
2796 for arrayness here. */
2799 check_arglist (gfc_actual_arglist
** ap
, gfc_intrinsic_sym
* sym
,
2802 gfc_actual_arglist
*actual
;
2803 gfc_intrinsic_arg
*formal
;
2806 formal
= sym
->formal
;
2810 for (; formal
; formal
= formal
->next
, actual
= actual
->next
, i
++)
2812 if (actual
->expr
== NULL
)
2815 if (!gfc_compare_types (&formal
->ts
, &actual
->expr
->ts
))
2819 ("Type of argument '%s' in call to '%s' at %L should be "
2820 "%s, not %s", gfc_current_intrinsic_arg
[i
],
2821 gfc_current_intrinsic
, &actual
->expr
->where
,
2822 gfc_typename (&formal
->ts
), gfc_typename (&actual
->expr
->ts
));
2831 /* Given a pointer to an intrinsic symbol and an expression node that
2832 represent the function call to that subroutine, figure out the type
2833 of the result. This may involve calling a resolution subroutine. */
2836 resolve_intrinsic (gfc_intrinsic_sym
* specific
, gfc_expr
* e
)
2838 gfc_expr
*a1
, *a2
, *a3
, *a4
, *a5
;
2839 gfc_actual_arglist
*arg
;
2841 if (specific
->resolve
.f1
== NULL
)
2843 if (e
->value
.function
.name
== NULL
)
2844 e
->value
.function
.name
= specific
->lib_name
;
2846 if (e
->ts
.type
== BT_UNKNOWN
)
2847 e
->ts
= specific
->ts
;
2851 arg
= e
->value
.function
.actual
;
2853 /* Special case hacks for MIN and MAX. */
2854 if (specific
->resolve
.f1m
== gfc_resolve_max
2855 || specific
->resolve
.f1m
== gfc_resolve_min
)
2857 (*specific
->resolve
.f1m
) (e
, arg
);
2863 (*specific
->resolve
.f0
) (e
);
2872 (*specific
->resolve
.f1
) (e
, a1
);
2881 (*specific
->resolve
.f2
) (e
, a1
, a2
);
2890 (*specific
->resolve
.f3
) (e
, a1
, a2
, a3
);
2899 (*specific
->resolve
.f4
) (e
, a1
, a2
, a3
, a4
);
2908 (*specific
->resolve
.f5
) (e
, a1
, a2
, a3
, a4
, a5
);
2912 gfc_internal_error ("resolve_intrinsic(): Too many args for intrinsic");
2916 /* Given an intrinsic symbol node and an expression node, call the
2917 simplification function (if there is one), perhaps replacing the
2918 expression with something simpler. We return FAILURE on an error
2919 of the simplification, SUCCESS if the simplification worked, even
2920 if nothing has changed in the expression itself. */
2923 do_simplify (gfc_intrinsic_sym
* specific
, gfc_expr
* e
)
2925 gfc_expr
*result
, *a1
, *a2
, *a3
, *a4
, *a5
;
2926 gfc_actual_arglist
*arg
;
2928 /* Check the arguments if there are Hollerith constants. We deal with
2929 them at run-time. */
2930 for (arg
= e
->value
.function
.actual
; arg
!= NULL
; arg
= arg
->next
)
2932 if (arg
->expr
&& arg
->expr
->from_H
)
2938 /* Max and min require special handling due to the variable number
2940 if (specific
->simplify
.f1
== gfc_simplify_min
)
2942 result
= gfc_simplify_min (e
);
2946 if (specific
->simplify
.f1
== gfc_simplify_max
)
2948 result
= gfc_simplify_max (e
);
2952 if (specific
->simplify
.f1
== NULL
)
2958 arg
= e
->value
.function
.actual
;
2962 result
= (*specific
->simplify
.f0
) ();
2969 if (specific
->simplify
.cc
== gfc_convert_constant
)
2971 result
= gfc_convert_constant (a1
, specific
->ts
.type
, specific
->ts
.kind
);
2975 /* TODO: Warn if -pedantic and initialization expression and arg
2976 types not integer or character */
2979 result
= (*specific
->simplify
.f1
) (a1
);
2986 result
= (*specific
->simplify
.f2
) (a1
, a2
);
2993 result
= (*specific
->simplify
.f3
) (a1
, a2
, a3
);
3000 result
= (*specific
->simplify
.f4
) (a1
, a2
, a3
, a4
);
3007 result
= (*specific
->simplify
.f5
) (a1
, a2
, a3
, a4
, a5
);
3010 ("do_simplify(): Too many args for intrinsic");
3017 if (result
== &gfc_bad_expr
)
3021 resolve_intrinsic (specific
, e
); /* Must call at run-time */
3024 result
->where
= e
->where
;
3025 gfc_replace_expr (e
, result
);
3032 /* Initialize the gfc_current_intrinsic_arg[] array for the benefit of
3033 error messages. This subroutine returns FAILURE if a subroutine
3034 has more than MAX_INTRINSIC_ARGS, in which case the actual argument
3035 list cannot match any intrinsic. */
3038 init_arglist (gfc_intrinsic_sym
* isym
)
3040 gfc_intrinsic_arg
*formal
;
3043 gfc_current_intrinsic
= isym
->name
;
3046 for (formal
= isym
->formal
; formal
; formal
= formal
->next
)
3048 if (i
>= MAX_INTRINSIC_ARGS
)
3049 gfc_internal_error ("init_arglist(): too many arguments");
3050 gfc_current_intrinsic_arg
[i
++] = formal
->name
;
3055 /* Given a pointer to an intrinsic symbol and an expression consisting
3056 of a function call, see if the function call is consistent with the
3057 intrinsic's formal argument list. Return SUCCESS if the expression
3058 and intrinsic match, FAILURE otherwise. */
3061 check_specific (gfc_intrinsic_sym
* specific
, gfc_expr
* expr
, int error_flag
)
3063 gfc_actual_arglist
*arg
, **ap
;
3067 ap
= &expr
->value
.function
.actual
;
3069 init_arglist (specific
);
3071 /* Don't attempt to sort the argument list for min or max. */
3072 if (specific
->check
.f1m
== gfc_check_min_max
3073 || specific
->check
.f1m
== gfc_check_min_max_integer
3074 || specific
->check
.f1m
== gfc_check_min_max_real
3075 || specific
->check
.f1m
== gfc_check_min_max_double
)
3076 return (*specific
->check
.f1m
) (*ap
);
3078 if (sort_actual (specific
->name
, ap
, specific
->formal
,
3079 &expr
->where
) == FAILURE
)
3082 if (specific
->check
.f3ml
== gfc_check_minloc_maxloc
)
3083 /* This is special because we might have to reorder the argument
3085 t
= gfc_check_minloc_maxloc (*ap
);
3086 else if (specific
->check
.f3red
== gfc_check_minval_maxval
)
3087 /* This is also special because we also might have to reorder the
3089 t
= gfc_check_minval_maxval (*ap
);
3090 else if (specific
->check
.f3red
== gfc_check_product_sum
)
3091 /* Same here. The difference to the previous case is that we allow a
3092 general numeric type. */
3093 t
= gfc_check_product_sum (*ap
);
3096 if (specific
->check
.f1
== NULL
)
3098 t
= check_arglist (ap
, specific
, error_flag
);
3100 expr
->ts
= specific
->ts
;
3103 t
= do_check (specific
, *ap
);
3106 /* Check ranks for elemental intrinsics. */
3107 if (t
== SUCCESS
&& specific
->elemental
)
3110 for (arg
= expr
->value
.function
.actual
; arg
; arg
= arg
->next
)
3112 if (arg
->expr
== NULL
|| arg
->expr
->rank
== 0)
3116 r
= arg
->expr
->rank
;
3120 if (arg
->expr
->rank
!= r
)
3123 ("Ranks of arguments to elemental intrinsic '%s' differ "
3124 "at %L", specific
->name
, &arg
->expr
->where
);
3131 remove_nullargs (ap
);
3137 /* See if an intrinsic is one of the intrinsics we evaluate
3141 gfc_init_expr_extensions (gfc_intrinsic_sym
*isym
)
3143 /* FIXME: This should be moved into the intrinsic definitions. */
3144 static const char * const init_expr_extensions
[] = {
3145 "digits", "epsilon", "huge", "kind", "maxexponent", "minexponent",
3146 "precision", "present", "radix", "range", "selected_real_kind",
3152 for (i
= 0; init_expr_extensions
[i
]; i
++)
3153 if (strcmp (init_expr_extensions
[i
], isym
->name
) == 0)
3160 /* Check whether an intrinsic belongs to whatever standard the user
3164 check_intrinsic_standard (const char *name
, int standard
, locus
* where
)
3166 if (!gfc_option
.warn_nonstd_intrinsics
)
3169 gfc_notify_std (standard
, "Intrinsic '%s' at %L is not included "
3170 "in the selected standard", name
, where
);
3174 /* See if a function call corresponds to an intrinsic function call.
3177 MATCH_YES if the call corresponds to an intrinsic, simplification
3178 is done if possible.
3180 MATCH_NO if the call does not correspond to an intrinsic
3182 MATCH_ERROR if the call corresponds to an intrinsic but there was an
3183 error during the simplification process.
3185 The error_flag parameter enables an error reporting. */
3188 gfc_intrinsic_func_interface (gfc_expr
* expr
, int error_flag
)
3190 gfc_intrinsic_sym
*isym
, *specific
;
3191 gfc_actual_arglist
*actual
;
3195 if (expr
->value
.function
.isym
!= NULL
)
3196 return (do_simplify (expr
->value
.function
.isym
, expr
) == FAILURE
)
3197 ? MATCH_ERROR
: MATCH_YES
;
3199 gfc_suppress_error
= !error_flag
;
3202 for (actual
= expr
->value
.function
.actual
; actual
; actual
= actual
->next
)
3203 if (actual
->expr
!= NULL
)
3204 flag
|= (actual
->expr
->ts
.type
!= BT_INTEGER
3205 && actual
->expr
->ts
.type
!= BT_CHARACTER
);
3207 name
= expr
->symtree
->n
.sym
->name
;
3209 isym
= specific
= gfc_find_function (name
);
3212 gfc_suppress_error
= 0;
3216 gfc_current_intrinsic_where
= &expr
->where
;
3218 /* Bypass the generic list for min and max. */
3219 if (isym
->check
.f1m
== gfc_check_min_max
)
3221 init_arglist (isym
);
3223 if (gfc_check_min_max (expr
->value
.function
.actual
) == SUCCESS
)
3226 gfc_suppress_error
= 0;
3230 /* If the function is generic, check all of its specific
3231 incarnations. If the generic name is also a specific, we check
3232 that name last, so that any error message will correspond to the
3234 gfc_suppress_error
= 1;
3238 for (specific
= isym
->specific_head
; specific
;
3239 specific
= specific
->next
)
3241 if (specific
== isym
)
3243 if (check_specific (specific
, expr
, 0) == SUCCESS
)
3248 gfc_suppress_error
= !error_flag
;
3250 if (check_specific (isym
, expr
, error_flag
) == FAILURE
)
3252 gfc_suppress_error
= 0;
3259 expr
->value
.function
.isym
= specific
;
3260 gfc_intrinsic_symbol (expr
->symtree
->n
.sym
);
3262 gfc_suppress_error
= 0;
3263 if (do_simplify (specific
, expr
) == FAILURE
)
3266 /* TODO: We should probably only allow elemental functions here. */
3267 flag
|= (expr
->ts
.type
!= BT_INTEGER
&& expr
->ts
.type
!= BT_CHARACTER
);
3269 if (pedantic
&& gfc_init_expr
3270 && flag
&& gfc_init_expr_extensions (specific
))
3272 if (gfc_notify_std (GFC_STD_GNU
, "Extension: Evaluation of "
3273 "nonstandard initialization expression at %L", &expr
->where
)
3280 check_intrinsic_standard (name
, isym
->standard
, &expr
->where
);
3286 /* See if a CALL statement corresponds to an intrinsic subroutine.
3287 Returns MATCH_YES if the subroutine corresponds to an intrinsic,
3288 MATCH_NO if not, and MATCH_ERROR if there was an error (but did
3292 gfc_intrinsic_sub_interface (gfc_code
* c
, int error_flag
)
3294 gfc_intrinsic_sym
*isym
;
3297 name
= c
->symtree
->n
.sym
->name
;
3299 isym
= find_subroutine (name
);
3303 gfc_suppress_error
= !error_flag
;
3305 init_arglist (isym
);
3307 if (sort_actual (name
, &c
->ext
.actual
, isym
->formal
, &c
->loc
) == FAILURE
)
3310 if (isym
->check
.f1
!= NULL
)
3312 if (do_check (isym
, c
->ext
.actual
) == FAILURE
)
3317 if (check_arglist (&c
->ext
.actual
, isym
, 1) == FAILURE
)
3321 /* The subroutine corresponds to an intrinsic. Allow errors to be
3322 seen at this point. */
3323 gfc_suppress_error
= 0;
3325 if (isym
->resolve
.s1
!= NULL
)
3326 isym
->resolve
.s1 (c
);
3328 c
->resolved_sym
= gfc_get_intrinsic_sub_symbol (isym
->lib_name
);
3330 if (gfc_pure (NULL
) && !isym
->elemental
)
3332 gfc_error ("Subroutine call to intrinsic '%s' at %L is not PURE", name
,
3337 c
->resolved_sym
->attr
.noreturn
= isym
->noreturn
;
3338 check_intrinsic_standard (name
, isym
->standard
, &c
->loc
);
3343 gfc_suppress_error
= 0;
3348 /* Call gfc_convert_type() with warning enabled. */
3351 gfc_convert_type (gfc_expr
* expr
, gfc_typespec
* ts
, int eflag
)
3353 return gfc_convert_type_warn (expr
, ts
, eflag
, 1);
3357 /* Try to convert an expression (in place) from one type to another.
3358 'eflag' controls the behavior on error.
3360 The possible values are:
3362 1 Generate a gfc_error()
3363 2 Generate a gfc_internal_error().
3365 'wflag' controls the warning related to conversion. */
3368 gfc_convert_type_warn (gfc_expr
* expr
, gfc_typespec
* ts
, int eflag
,
3371 gfc_intrinsic_sym
*sym
;
3372 gfc_typespec from_ts
;
3378 from_ts
= expr
->ts
; /* expr->ts gets clobbered */
3380 if (ts
->type
== BT_UNKNOWN
)
3383 /* NULL and zero size arrays get their type here. */
3384 if (expr
->expr_type
== EXPR_NULL
3385 || (expr
->expr_type
== EXPR_ARRAY
3386 && expr
->value
.constructor
== NULL
))
3388 /* Sometimes the RHS acquire the type. */
3393 if (expr
->ts
.type
== BT_UNKNOWN
)
3396 if (expr
->ts
.type
== BT_DERIVED
3397 && ts
->type
== BT_DERIVED
3398 && gfc_compare_types (&expr
->ts
, ts
))
3401 sym
= find_conv (&expr
->ts
, ts
);
3405 /* At this point, a conversion is necessary. A warning may be needed. */
3406 if ((gfc_option
.warn_std
& sym
->standard
) != 0)
3407 gfc_warning_now ("Extension: Conversion from %s to %s at %L",
3408 gfc_typename (&from_ts
), gfc_typename (ts
), &expr
->where
);
3409 else if (wflag
&& gfc_option
.warn_conversion
)
3410 gfc_warning_now ("Conversion from %s to %s at %L",
3411 gfc_typename (&from_ts
), gfc_typename (ts
), &expr
->where
);
3413 /* Insert a pre-resolved function call to the right function. */
3414 old_where
= expr
->where
;
3416 shape
= expr
->shape
;
3418 new = gfc_get_expr ();
3421 new = gfc_build_conversion (new);
3422 new->value
.function
.name
= sym
->lib_name
;
3423 new->value
.function
.isym
= sym
;
3424 new->where
= old_where
;
3426 new->shape
= gfc_copy_shape (shape
, rank
);
3428 gfc_get_ha_sym_tree (sym
->name
, &new->symtree
);
3429 new->symtree
->n
.sym
->ts
= *ts
;
3430 new->symtree
->n
.sym
->attr
.flavor
= FL_PROCEDURE
;
3431 new->symtree
->n
.sym
->attr
.function
= 1;
3432 new->symtree
->n
.sym
->attr
.intrinsic
= 1;
3433 new->symtree
->n
.sym
->attr
.elemental
= 1;
3434 new->symtree
->n
.sym
->attr
.pure
= 1;
3435 new->symtree
->n
.sym
->attr
.referenced
= 1;
3436 gfc_intrinsic_symbol(new->symtree
->n
.sym
);
3437 gfc_commit_symbol (new->symtree
->n
.sym
);
3444 if (gfc_is_constant_expr (expr
->value
.function
.actual
->expr
)
3445 && do_simplify (sym
, expr
) == FAILURE
)
3450 return FAILURE
; /* Error already generated in do_simplify() */
3458 gfc_error ("Can't convert %s to %s at %L",
3459 gfc_typename (&from_ts
), gfc_typename (ts
), &expr
->where
);
3463 gfc_internal_error ("Can't convert %s to %s at %L",
3464 gfc_typename (&from_ts
), gfc_typename (ts
),