1 /* Build up a list of intrinsic subroutines and functions for the
3 Copyright (C) 2000-2013 Free Software Foundation, Inc.
4 Contributed by Andy Vaught & Katherine Holcomb
6 This file is part of GCC.
8 GCC is free software; you can redistribute it and/or modify it under
9 the terms of the GNU General Public License as published by the Free
10 Software Foundation; either version 3, or (at your option) any later
13 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
14 WARRANTY; without even the implied warranty of MERCHANTABILITY or
15 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
18 You should have received a copy of the GNU General Public License
19 along with GCC; see the file COPYING3. If not see
20 <http://www.gnu.org/licenses/>. */
24 #include "coretypes.h"
27 #include "intrinsic.h"
29 /* Namespace to hold the resolved symbols for intrinsic subroutines. */
30 static gfc_namespace
*gfc_intrinsic_namespace
;
32 bool gfc_init_expr_flag
= false;
34 /* Pointers to an intrinsic function and its argument names that are being
37 const char *gfc_current_intrinsic
;
38 gfc_intrinsic_arg
*gfc_current_intrinsic_arg
[MAX_INTRINSIC_ARGS
];
39 locus
*gfc_current_intrinsic_where
;
41 static gfc_intrinsic_sym
*functions
, *subroutines
, *conversion
, *next_sym
;
42 static gfc_intrinsic_sym
*char_conversions
;
43 static gfc_intrinsic_arg
*next_arg
;
45 static int nfunc
, nsub
, nargs
, nconv
, ncharconv
;
48 { SZ_NOTHING
= 0, SZ_SUBS
, SZ_FUNCS
, SZ_CONVS
}
52 { CLASS_IMPURE
= 0, CLASS_PURE
, CLASS_ELEMENTAL
,
53 CLASS_INQUIRY
, CLASS_TRANSFORMATIONAL
, CLASS_ATOMIC
};
62 /* Return a letter based on the passed type. Used to construct the
63 name of a type-dependent subroutine. */
66 gfc_type_letter (bt type
)
101 /* Get a symbol for a resolved name. Note, if needed be, the elemental
102 attribute has be added afterwards. */
105 gfc_get_intrinsic_sub_symbol (const char *name
)
109 gfc_get_symbol (name
, gfc_intrinsic_namespace
, &sym
);
110 sym
->attr
.always_explicit
= 1;
111 sym
->attr
.subroutine
= 1;
112 sym
->attr
.flavor
= FL_PROCEDURE
;
113 sym
->attr
.proc
= PROC_INTRINSIC
;
115 gfc_commit_symbol (sym
);
121 /* Return a pointer to the name of a conversion function given two
125 conv_name (gfc_typespec
*from
, gfc_typespec
*to
)
127 return gfc_get_string ("__convert_%c%d_%c%d",
128 gfc_type_letter (from
->type
), from
->kind
,
129 gfc_type_letter (to
->type
), to
->kind
);
133 /* Given a pair of typespecs, find the gfc_intrinsic_sym node that
134 corresponds to the conversion. Returns NULL if the conversion
137 static gfc_intrinsic_sym
*
138 find_conv (gfc_typespec
*from
, gfc_typespec
*to
)
140 gfc_intrinsic_sym
*sym
;
144 target
= conv_name (from
, to
);
147 for (i
= 0; i
< nconv
; i
++, sym
++)
148 if (target
== sym
->name
)
155 /* Given a pair of CHARACTER typespecs, find the gfc_intrinsic_sym node
156 that corresponds to the conversion. Returns NULL if the conversion
159 static gfc_intrinsic_sym
*
160 find_char_conv (gfc_typespec
*from
, gfc_typespec
*to
)
162 gfc_intrinsic_sym
*sym
;
166 target
= conv_name (from
, to
);
167 sym
= char_conversions
;
169 for (i
= 0; i
< ncharconv
; i
++, sym
++)
170 if (target
== sym
->name
)
177 /* Interface to the check functions. We break apart an argument list
178 and call the proper check function rather than forcing each
179 function to manipulate the argument list. */
182 do_check (gfc_intrinsic_sym
*specific
, gfc_actual_arglist
*arg
)
184 gfc_expr
*a1
, *a2
, *a3
, *a4
, *a5
;
187 return (*specific
->check
.f0
) ();
192 return (*specific
->check
.f1
) (a1
);
197 return (*specific
->check
.f2
) (a1
, a2
);
202 return (*specific
->check
.f3
) (a1
, a2
, a3
);
207 return (*specific
->check
.f4
) (a1
, a2
, a3
, a4
);
212 return (*specific
->check
.f5
) (a1
, a2
, a3
, a4
, a5
);
214 gfc_internal_error ("do_check(): too many args");
218 /*********** Subroutines to build the intrinsic list ****************/
220 /* Add a single intrinsic symbol to the current list.
223 char * name of function
224 int whether function is elemental
225 int If the function can be used as an actual argument [1]
226 bt return type of function
227 int kind of return type of function
228 int Fortran standard version
229 check pointer to check function
230 simplify pointer to simplification function
231 resolve pointer to resolution function
233 Optional arguments come in multiples of five:
234 char * name of argument
237 int arg optional flag (1=optional, 0=required)
238 sym_intent intent of argument
240 The sequence is terminated by a NULL name.
243 [1] Whether a function can or cannot be used as an actual argument is
244 determined by its presence on the 13.6 list in Fortran 2003. The
245 following intrinsics, which are GNU extensions, are considered allowed
246 as actual arguments: ACOSH ATANH DACOSH DASINH DATANH DCONJG DIMAG
247 ZABS ZCOS ZEXP ZLOG ZSIN ZSQRT. */
250 add_sym (const char *name
, gfc_isym_id id
, enum klass cl
, int actual_ok
, bt type
, int kind
,
251 int standard
, gfc_check_f check
, gfc_simplify_f simplify
,
252 gfc_resolve_f resolve
, ...)
254 char buf
[GFC_MAX_SYMBOL_LEN
+ 11]; /* 10 for '_gfortran_', 1 for '\0' */
255 int optional
, first_flag
;
270 next_sym
->name
= gfc_get_string (name
);
272 strcpy (buf
, "_gfortran_");
274 next_sym
->lib_name
= gfc_get_string (buf
);
276 next_sym
->pure
= (cl
!= CLASS_IMPURE
);
277 next_sym
->elemental
= (cl
== CLASS_ELEMENTAL
);
278 next_sym
->inquiry
= (cl
== CLASS_INQUIRY
);
279 next_sym
->transformational
= (cl
== CLASS_TRANSFORMATIONAL
);
280 next_sym
->actual_ok
= actual_ok
;
281 next_sym
->ts
.type
= type
;
282 next_sym
->ts
.kind
= kind
;
283 next_sym
->standard
= standard
;
284 next_sym
->simplify
= simplify
;
285 next_sym
->check
= check
;
286 next_sym
->resolve
= resolve
;
287 next_sym
->specific
= 0;
288 next_sym
->generic
= 0;
289 next_sym
->conversion
= 0;
294 gfc_internal_error ("add_sym(): Bad sizing mode");
297 va_start (argp
, resolve
);
303 name
= va_arg (argp
, char *);
307 type
= (bt
) va_arg (argp
, int);
308 kind
= va_arg (argp
, int);
309 optional
= va_arg (argp
, int);
310 intent
= (sym_intent
) va_arg (argp
, int);
312 if (sizing
!= SZ_NOTHING
)
319 next_sym
->formal
= next_arg
;
321 (next_arg
- 1)->next
= next_arg
;
325 strcpy (next_arg
->name
, name
);
326 next_arg
->ts
.type
= type
;
327 next_arg
->ts
.kind
= kind
;
328 next_arg
->optional
= optional
;
330 next_arg
->intent
= intent
;
340 /* Add a symbol to the function list where the function takes
344 add_sym_0 (const char *name
, gfc_isym_id id
, enum klass cl
, int actual_ok
, bt type
,
345 int kind
, int standard
,
346 bool (*check
) (void),
347 gfc_expr
*(*simplify
) (void),
348 void (*resolve
) (gfc_expr
*))
358 add_sym (name
, id
, cl
, actual_ok
, type
, kind
, standard
, cf
, sf
, rf
,
363 /* Add a symbol to the subroutine list where the subroutine takes
367 add_sym_0s (const char *name
, gfc_isym_id id
, int standard
,
368 void (*resolve
) (gfc_code
*))
378 add_sym (name
, id
, CLASS_IMPURE
, ACTUAL_NO
, BT_UNKNOWN
, 0, standard
, cf
, sf
,
383 /* Add a symbol to the function list where the function takes
387 add_sym_1 (const char *name
, gfc_isym_id id
, enum klass cl
, int actual_ok
, bt type
,
388 int kind
, int standard
,
389 bool (*check
) (gfc_expr
*),
390 gfc_expr
*(*simplify
) (gfc_expr
*),
391 void (*resolve
) (gfc_expr
*, gfc_expr
*),
392 const char *a1
, bt type1
, int kind1
, int optional1
)
402 add_sym (name
, id
, cl
, actual_ok
, type
, kind
, standard
, cf
, sf
, rf
,
403 a1
, type1
, kind1
, optional1
, INTENT_IN
,
408 /* Add a symbol to the function list where the function takes
409 1 arguments, specifying the intent of the argument. */
412 add_sym_1_intent (const char *name
, gfc_isym_id id
, enum klass cl
,
413 int actual_ok
, bt type
, int kind
, int standard
,
414 bool (*check
) (gfc_expr
*),
415 gfc_expr
*(*simplify
) (gfc_expr
*),
416 void (*resolve
) (gfc_expr
*, gfc_expr
*),
417 const char *a1
, bt type1
, int kind1
, int optional1
,
428 add_sym (name
, id
, cl
, actual_ok
, type
, kind
, standard
, cf
, sf
, rf
,
429 a1
, type1
, kind1
, optional1
, intent1
,
434 /* Add a symbol to the subroutine list where the subroutine takes
435 1 arguments, specifying the intent of the argument. */
438 add_sym_1s (const char *name
, gfc_isym_id id
, enum klass cl
, bt type
, int kind
,
439 int standard
, bool (*check
) (gfc_expr
*),
440 gfc_expr
*(*simplify
) (gfc_expr
*), void (*resolve
) (gfc_code
*),
441 const char *a1
, bt type1
, int kind1
, int optional1
,
452 add_sym (name
, id
, cl
, ACTUAL_NO
, type
, kind
, standard
, cf
, sf
, rf
,
453 a1
, type1
, kind1
, optional1
, intent1
,
458 /* Add a symbol from the MAX/MIN family of intrinsic functions to the
459 function. MAX et al take 2 or more arguments. */
462 add_sym_1m (const char *name
, gfc_isym_id id
, enum klass cl
, int actual_ok
, bt type
,
463 int kind
, int standard
,
464 bool (*check
) (gfc_actual_arglist
*),
465 gfc_expr
*(*simplify
) (gfc_expr
*),
466 void (*resolve
) (gfc_expr
*, gfc_actual_arglist
*),
467 const char *a1
, bt type1
, int kind1
, int optional1
,
468 const char *a2
, bt type2
, int kind2
, int optional2
)
478 add_sym (name
, id
, cl
, actual_ok
, type
, kind
, standard
, cf
, sf
, rf
,
479 a1
, type1
, kind1
, optional1
, INTENT_IN
,
480 a2
, type2
, kind2
, optional2
, INTENT_IN
,
485 /* Add a symbol to the function list where the function takes
489 add_sym_2 (const char *name
, gfc_isym_id id
, enum klass cl
, int actual_ok
, bt type
,
490 int kind
, int standard
,
491 bool (*check
) (gfc_expr
*, gfc_expr
*),
492 gfc_expr
*(*simplify
) (gfc_expr
*, gfc_expr
*),
493 void (*resolve
) (gfc_expr
*, gfc_expr
*, gfc_expr
*),
494 const char *a1
, bt type1
, int kind1
, int optional1
,
495 const char *a2
, bt type2
, int kind2
, int optional2
)
505 add_sym (name
, id
, cl
, actual_ok
, type
, kind
, standard
, cf
, sf
, rf
,
506 a1
, type1
, kind1
, optional1
, INTENT_IN
,
507 a2
, type2
, kind2
, optional2
, INTENT_IN
,
512 /* Add a symbol to the function list where the function takes
513 2 arguments; same as add_sym_2 - but allows to specify the intent. */
516 add_sym_2_intent (const char *name
, gfc_isym_id id
, enum klass cl
,
517 int actual_ok
, bt type
, int kind
, int standard
,
518 bool (*check
) (gfc_expr
*, gfc_expr
*),
519 gfc_expr
*(*simplify
) (gfc_expr
*, gfc_expr
*),
520 void (*resolve
) (gfc_expr
*, gfc_expr
*, gfc_expr
*),
521 const char *a1
, bt type1
, int kind1
, int optional1
,
522 sym_intent intent1
, const char *a2
, bt type2
, int kind2
,
523 int optional2
, sym_intent intent2
)
533 add_sym (name
, id
, cl
, actual_ok
, type
, kind
, standard
, cf
, sf
, rf
,
534 a1
, type1
, kind1
, optional1
, intent1
,
535 a2
, type2
, kind2
, optional2
, intent2
,
540 /* Add a symbol to the subroutine list where the subroutine takes
541 2 arguments, specifying the intent of the arguments. */
544 add_sym_2s (const char *name
, gfc_isym_id id
, enum klass cl
, bt type
,
545 int kind
, int standard
,
546 bool (*check
) (gfc_expr
*, gfc_expr
*),
547 gfc_expr
*(*simplify
) (gfc_expr
*, gfc_expr
*),
548 void (*resolve
) (gfc_code
*),
549 const char *a1
, bt type1
, int kind1
, int optional1
,
550 sym_intent intent1
, const char *a2
, bt type2
, int kind2
,
551 int optional2
, sym_intent intent2
)
561 add_sym (name
, id
, cl
, ACTUAL_NO
, type
, kind
, standard
, cf
, sf
, rf
,
562 a1
, type1
, kind1
, optional1
, intent1
,
563 a2
, type2
, kind2
, optional2
, intent2
,
568 /* Add a symbol to the function list where the function takes
572 add_sym_3 (const char *name
, gfc_isym_id id
, enum klass cl
, int actual_ok
, bt type
,
573 int kind
, int standard
,
574 bool (*check
) (gfc_expr
*, gfc_expr
*, gfc_expr
*),
575 gfc_expr
*(*simplify
) (gfc_expr
*, gfc_expr
*, gfc_expr
*),
576 void (*resolve
) (gfc_expr
*, gfc_expr
*, gfc_expr
*, gfc_expr
*),
577 const char *a1
, bt type1
, int kind1
, int optional1
,
578 const char *a2
, bt type2
, int kind2
, int optional2
,
579 const char *a3
, bt type3
, int kind3
, int optional3
)
589 add_sym (name
, id
, cl
, actual_ok
, type
, kind
, standard
, cf
, sf
, rf
,
590 a1
, type1
, kind1
, optional1
, INTENT_IN
,
591 a2
, type2
, kind2
, optional2
, INTENT_IN
,
592 a3
, type3
, kind3
, optional3
, INTENT_IN
,
597 /* MINLOC and MAXLOC get special treatment because their argument
598 might have to be reordered. */
601 add_sym_3ml (const char *name
, gfc_isym_id id
, enum klass cl
, int actual_ok
, bt type
,
602 int kind
, int standard
,
603 bool (*check
) (gfc_actual_arglist
*),
604 gfc_expr
*(*simplify
) (gfc_expr
*, gfc_expr
*, gfc_expr
*),
605 void (*resolve
) (gfc_expr
*, gfc_expr
*, gfc_expr
*, gfc_expr
*),
606 const char *a1
, bt type1
, int kind1
, int optional1
,
607 const char *a2
, bt type2
, int kind2
, int optional2
,
608 const char *a3
, bt type3
, int kind3
, int optional3
)
618 add_sym (name
, id
, cl
, actual_ok
, type
, kind
, standard
, cf
, sf
, rf
,
619 a1
, type1
, kind1
, optional1
, INTENT_IN
,
620 a2
, type2
, kind2
, optional2
, INTENT_IN
,
621 a3
, type3
, kind3
, optional3
, INTENT_IN
,
626 /* MINVAL, MAXVAL, PRODUCT, and SUM also get special treatment because
627 their argument also might have to be reordered. */
630 add_sym_3red (const char *name
, gfc_isym_id id
, enum klass cl
, int actual_ok
, bt type
,
631 int kind
, int standard
,
632 bool (*check
) (gfc_actual_arglist
*),
633 gfc_expr
*(*simplify
) (gfc_expr
*, gfc_expr
*, gfc_expr
*),
634 void (*resolve
) (gfc_expr
*, gfc_expr
*, gfc_expr
*, gfc_expr
*),
635 const char *a1
, bt type1
, int kind1
, int optional1
,
636 const char *a2
, bt type2
, int kind2
, int optional2
,
637 const char *a3
, bt type3
, int kind3
, int optional3
)
647 add_sym (name
, id
, cl
, actual_ok
, type
, kind
, standard
, cf
, sf
, rf
,
648 a1
, type1
, kind1
, optional1
, INTENT_IN
,
649 a2
, type2
, kind2
, optional2
, INTENT_IN
,
650 a3
, type3
, kind3
, optional3
, INTENT_IN
,
655 /* Add a symbol to the subroutine list where the subroutine takes
656 3 arguments, specifying the intent of the arguments. */
659 add_sym_3s (const char *name
, gfc_isym_id id
, enum klass cl
, bt type
,
660 int kind
, int standard
,
661 bool (*check
) (gfc_expr
*, gfc_expr
*, gfc_expr
*),
662 gfc_expr
*(*simplify
) (gfc_expr
*, gfc_expr
*, gfc_expr
*),
663 void (*resolve
) (gfc_code
*),
664 const char *a1
, bt type1
, int kind1
, int optional1
,
665 sym_intent intent1
, const char *a2
, bt type2
, int kind2
,
666 int optional2
, sym_intent intent2
, const char *a3
, bt type3
,
667 int kind3
, int optional3
, sym_intent intent3
)
677 add_sym (name
, id
, cl
, ACTUAL_NO
, type
, kind
, standard
, cf
, sf
, rf
,
678 a1
, type1
, kind1
, optional1
, intent1
,
679 a2
, type2
, kind2
, optional2
, intent2
,
680 a3
, type3
, kind3
, optional3
, intent3
,
685 /* Add a symbol to the function list where the function takes
689 add_sym_4 (const char *name
, gfc_isym_id id
, enum klass cl
, int actual_ok
, bt type
,
690 int kind
, int standard
,
691 bool (*check
) (gfc_expr
*, gfc_expr
*, gfc_expr
*, gfc_expr
*),
692 gfc_expr
*(*simplify
) (gfc_expr
*, gfc_expr
*, gfc_expr
*,
694 void (*resolve
) (gfc_expr
*, gfc_expr
*, gfc_expr
*, gfc_expr
*,
696 const char *a1
, bt type1
, int kind1
, int optional1
,
697 const char *a2
, bt type2
, int kind2
, int optional2
,
698 const char *a3
, bt type3
, int kind3
, int optional3
,
699 const char *a4
, bt type4
, int kind4
, int optional4
)
709 add_sym (name
, id
, cl
, actual_ok
, type
, kind
, standard
, cf
, sf
, rf
,
710 a1
, type1
, kind1
, optional1
, INTENT_IN
,
711 a2
, type2
, kind2
, optional2
, INTENT_IN
,
712 a3
, type3
, kind3
, optional3
, INTENT_IN
,
713 a4
, type4
, kind4
, optional4
, INTENT_IN
,
718 /* Add a symbol to the subroutine list where the subroutine takes
722 add_sym_4s (const char *name
, gfc_isym_id id
, enum klass cl
, bt type
, int kind
,
724 bool (*check
) (gfc_expr
*, gfc_expr
*, gfc_expr
*, gfc_expr
*),
725 gfc_expr
*(*simplify
) (gfc_expr
*, gfc_expr
*, gfc_expr
*,
727 void (*resolve
) (gfc_code
*),
728 const char *a1
, bt type1
, int kind1
, int optional1
,
729 sym_intent intent1
, const char *a2
, bt type2
, int kind2
,
730 int optional2
, sym_intent intent2
, const char *a3
, bt type3
,
731 int kind3
, int optional3
, sym_intent intent3
, const char *a4
,
732 bt type4
, int kind4
, int optional4
, sym_intent intent4
)
742 add_sym (name
, id
, cl
, ACTUAL_NO
, type
, kind
, standard
, cf
, sf
, rf
,
743 a1
, type1
, kind1
, optional1
, intent1
,
744 a2
, type2
, kind2
, optional2
, intent2
,
745 a3
, type3
, kind3
, optional3
, intent3
,
746 a4
, type4
, kind4
, optional4
, intent4
,
751 /* Add a symbol to the subroutine list where the subroutine takes
755 add_sym_5s (const char *name
, gfc_isym_id id
, enum klass cl
, bt type
, int kind
,
757 bool (*check
) (gfc_expr
*, gfc_expr
*, gfc_expr
*, gfc_expr
*,
759 gfc_expr
*(*simplify
) (gfc_expr
*, gfc_expr
*, gfc_expr
*,
760 gfc_expr
*, gfc_expr
*),
761 void (*resolve
) (gfc_code
*),
762 const char *a1
, bt type1
, int kind1
, int optional1
,
763 sym_intent intent1
, const char *a2
, bt type2
, int kind2
,
764 int optional2
, sym_intent intent2
, const char *a3
, bt type3
,
765 int kind3
, int optional3
, sym_intent intent3
, const char *a4
,
766 bt type4
, int kind4
, int optional4
, sym_intent intent4
,
767 const char *a5
, bt type5
, int kind5
, int optional5
,
778 add_sym (name
, id
, cl
, ACTUAL_NO
, type
, kind
, standard
, cf
, sf
, rf
,
779 a1
, type1
, kind1
, optional1
, intent1
,
780 a2
, type2
, kind2
, optional2
, intent2
,
781 a3
, type3
, kind3
, optional3
, intent3
,
782 a4
, type4
, kind4
, optional4
, intent4
,
783 a5
, type5
, kind5
, optional5
, intent5
,
788 /* Locate an intrinsic symbol given a base pointer, number of elements
789 in the table and a pointer to a name. Returns the NULL pointer if
790 a name is not found. */
792 static gfc_intrinsic_sym
*
793 find_sym (gfc_intrinsic_sym
*start
, int n
, const char *name
)
795 /* name may be a user-supplied string, so we must first make sure
796 that we're comparing against a pointer into the global string
798 const char *p
= gfc_get_string (name
);
802 if (p
== start
->name
)
814 gfc_isym_id_by_intmod (intmod_id from_intmod
, int intmod_sym_id
)
816 if (from_intmod
== INTMOD_NONE
)
817 return (gfc_isym_id
) intmod_sym_id
;
818 else if (from_intmod
== INTMOD_ISO_C_BINDING
)
819 return (gfc_isym_id
) c_interop_kinds_table
[intmod_sym_id
].value
;
820 else if (from_intmod
== INTMOD_ISO_FORTRAN_ENV
)
821 switch (intmod_sym_id
)
823 #define NAMED_SUBROUTINE(a,b,c,d) \
825 return (gfc_isym_id) c;
826 #define NAMED_FUNCTION(a,b,c,d) \
828 return (gfc_isym_id) c;
829 #include "iso-fortran-env.def"
835 return (gfc_isym_id
) 0;
840 gfc_isym_id_by_intmod_sym (gfc_symbol
*sym
)
842 return gfc_isym_id_by_intmod (sym
->from_intmod
, sym
->intmod_sym_id
);
847 gfc_intrinsic_subroutine_by_id (gfc_isym_id id
)
849 gfc_intrinsic_sym
*start
= subroutines
;
865 gfc_intrinsic_function_by_id (gfc_isym_id id
)
867 gfc_intrinsic_sym
*start
= functions
;
882 /* Given a name, find a function in the intrinsic function table.
883 Returns NULL if not found. */
886 gfc_find_function (const char *name
)
888 gfc_intrinsic_sym
*sym
;
890 sym
= find_sym (functions
, nfunc
, name
);
891 if (!sym
|| sym
->from_module
)
892 sym
= find_sym (conversion
, nconv
, name
);
894 return (!sym
|| sym
->from_module
) ? NULL
: sym
;
898 /* Given a name, find a function in the intrinsic subroutine table.
899 Returns NULL if not found. */
902 gfc_find_subroutine (const char *name
)
904 gfc_intrinsic_sym
*sym
;
905 sym
= find_sym (subroutines
, nsub
, name
);
906 return (!sym
|| sym
->from_module
) ? NULL
: sym
;
910 /* Given a string, figure out if it is the name of a generic intrinsic
914 gfc_generic_intrinsic (const char *name
)
916 gfc_intrinsic_sym
*sym
;
918 sym
= gfc_find_function (name
);
919 return (!sym
|| sym
->from_module
) ? 0 : sym
->generic
;
923 /* Given a string, figure out if it is the name of a specific
924 intrinsic function or not. */
927 gfc_specific_intrinsic (const char *name
)
929 gfc_intrinsic_sym
*sym
;
931 sym
= gfc_find_function (name
);
932 return (!sym
|| sym
->from_module
) ? 0 : sym
->specific
;
936 /* Given a string, figure out if it is the name of an intrinsic function
937 or subroutine allowed as an actual argument or not. */
939 gfc_intrinsic_actual_ok (const char *name
, const bool subroutine_flag
)
941 gfc_intrinsic_sym
*sym
;
943 /* Intrinsic subroutines are not allowed as actual arguments. */
948 sym
= gfc_find_function (name
);
949 return (sym
== NULL
) ? 0 : sym
->actual_ok
;
954 /* Given a symbol, find out if it is (and is to be treated as) an intrinsic.
955 If its name refers to an intrinsic, but this intrinsic is not included in
956 the selected standard, this returns FALSE and sets the symbol's external
960 gfc_is_intrinsic (gfc_symbol
* sym
, int subroutine_flag
, locus loc
)
962 gfc_intrinsic_sym
* isym
;
965 /* If INTRINSIC attribute is already known, return. */
966 if (sym
->attr
.intrinsic
)
969 /* Check for attributes which prevent the symbol from being INTRINSIC. */
970 if (sym
->attr
.external
|| sym
->attr
.contained
971 || sym
->attr
.if_source
== IFSRC_IFBODY
)
975 isym
= gfc_find_subroutine (sym
->name
);
977 isym
= gfc_find_function (sym
->name
);
979 /* No such intrinsic available at all? */
983 /* See if this intrinsic is allowed in the current standard. */
984 if (!gfc_check_intrinsic_standard (isym
, &symstd
, false, loc
))
986 if (sym
->attr
.proc
== PROC_UNKNOWN
987 && gfc_option
.warn_intrinsics_std
)
988 gfc_warning_now ("The intrinsic '%s' at %L is not included in the"
989 " selected standard but %s and '%s' will be"
990 " treated as if declared EXTERNAL. Use an"
991 " appropriate -std=* option or define"
992 " -fall-intrinsics to allow this intrinsic.",
993 sym
->name
, &loc
, symstd
, sym
->name
);
1002 /* Collect a set of intrinsic functions into a generic collection.
1003 The first argument is the name of the generic function, which is
1004 also the name of a specific function. The rest of the specifics
1005 currently in the table are placed into the list of specific
1006 functions associated with that generic.
1009 FIXME: Remove the argument STANDARD if no regressions are
1010 encountered. Change all callers (approx. 360).
1014 make_generic (const char *name
, gfc_isym_id id
, int standard ATTRIBUTE_UNUSED
)
1016 gfc_intrinsic_sym
*g
;
1018 if (sizing
!= SZ_NOTHING
)
1021 g
= gfc_find_function (name
);
1023 gfc_internal_error ("make_generic(): Can't find generic symbol '%s'",
1026 gcc_assert (g
->id
== id
);
1030 if ((g
+ 1)->name
!= NULL
)
1031 g
->specific_head
= g
+ 1;
1034 while (g
->name
!= NULL
)
1046 /* Create a duplicate intrinsic function entry for the current
1047 function, the only differences being the alternate name and
1048 a different standard if necessary. Note that we use argument
1049 lists more than once, but all argument lists are freed as a
1053 make_alias (const char *name
, int standard
)
1066 next_sym
[0] = next_sym
[-1];
1067 next_sym
->name
= gfc_get_string (name
);
1068 next_sym
->standard
= standard
;
1078 /* Make the current subroutine noreturn. */
1081 make_noreturn (void)
1083 if (sizing
== SZ_NOTHING
)
1084 next_sym
[-1].noreturn
= 1;
1088 /* Mark current intrinsic as module intrinsic. */
1090 make_from_module (void)
1092 if (sizing
== SZ_NOTHING
)
1093 next_sym
[-1].from_module
= 1;
1096 /* Set the attr.value of the current procedure. */
1099 set_attr_value (int n
, ...)
1101 gfc_intrinsic_arg
*arg
;
1105 if (sizing
!= SZ_NOTHING
)
1109 arg
= next_sym
[-1].formal
;
1111 for (i
= 0; i
< n
; i
++)
1113 gcc_assert (arg
!= NULL
);
1114 arg
->value
= va_arg (argp
, int);
1121 /* Add intrinsic functions. */
1124 add_functions (void)
1126 /* Argument names as in the standard (to be used as argument keywords). */
1128 *a
= "a", *f
= "field", *pt
= "pointer", *tg
= "target",
1129 *b
= "b", *m
= "matrix", *ma
= "matrix_a", *mb
= "matrix_b",
1130 *c
= "c", *n
= "n", *ncopies
= "ncopies", *pos
= "pos", *bck
= "back",
1131 *i
= "i", *v
= "vector", *va
= "vector_a", *vb
= "vector_b",
1132 *j
= "j", *a1
= "a1", *fs
= "fsource", *ts
= "tsource",
1133 *l
= "l", *a2
= "a2", *mo
= "mold", *ord
= "order",
1134 *p
= "p", *ar
= "array", *shp
= "shape", *src
= "source",
1135 *r
= "r", *bd
= "boundary", *pad
= "pad", *set
= "set",
1136 *s
= "s", *dm
= "dim", *kind
= "kind", *msk
= "mask",
1137 *x
= "x", *sh
= "shift", *stg
= "string", *ssg
= "substring",
1138 *y
= "y", *sz
= "size", *sta
= "string_a", *stb
= "string_b",
1139 *z
= "z", *ln
= "len", *ut
= "unit", *han
= "handler",
1140 *num
= "number", *tm
= "time", *nm
= "name", *md
= "mode",
1141 *vl
= "values", *p1
= "path1", *p2
= "path2", *com
= "command",
1142 *ca
= "coarray", *sub
= "sub";
1144 int di
, dr
, dd
, dl
, dc
, dz
, ii
;
1146 di
= gfc_default_integer_kind
;
1147 dr
= gfc_default_real_kind
;
1148 dd
= gfc_default_double_kind
;
1149 dl
= gfc_default_logical_kind
;
1150 dc
= gfc_default_character_kind
;
1151 dz
= gfc_default_complex_kind
;
1152 ii
= gfc_index_integer_kind
;
1154 add_sym_1 ("abs", GFC_ISYM_ABS
, CLASS_ELEMENTAL
, ACTUAL_YES
, BT_REAL
, dr
, GFC_STD_F77
,
1155 gfc_check_abs
, gfc_simplify_abs
, gfc_resolve_abs
,
1156 a
, BT_REAL
, dr
, REQUIRED
);
1158 add_sym_1 ("iabs", GFC_ISYM_ABS
, CLASS_ELEMENTAL
, ACTUAL_YES
, BT_INTEGER
, di
, GFC_STD_F77
,
1159 NULL
, gfc_simplify_abs
, gfc_resolve_abs
,
1160 a
, BT_INTEGER
, di
, REQUIRED
);
1162 add_sym_1 ("dabs", GFC_ISYM_ABS
, CLASS_ELEMENTAL
, ACTUAL_YES
, BT_REAL
, dd
, GFC_STD_F77
,
1163 gfc_check_fn_d
, gfc_simplify_abs
, gfc_resolve_abs
,
1164 a
, BT_REAL
, dd
, REQUIRED
);
1166 add_sym_1 ("cabs", GFC_ISYM_ABS
, CLASS_ELEMENTAL
, ACTUAL_YES
, BT_REAL
, dr
, GFC_STD_F77
,
1167 NULL
, gfc_simplify_abs
, gfc_resolve_abs
,
1168 a
, BT_COMPLEX
, dz
, REQUIRED
);
1170 add_sym_1 ("zabs", GFC_ISYM_ABS
, CLASS_ELEMENTAL
, ACTUAL_YES
, BT_REAL
, dd
, GFC_STD_GNU
,
1171 NULL
, gfc_simplify_abs
, gfc_resolve_abs
,
1172 a
, BT_COMPLEX
, dd
, REQUIRED
);
1174 make_alias ("cdabs", GFC_STD_GNU
);
1176 make_generic ("abs", GFC_ISYM_ABS
, GFC_STD_F77
);
1178 /* The checking function for ACCESS is called gfc_check_access_func
1179 because the name gfc_check_access is already used in module.c. */
1180 add_sym_2 ("access", GFC_ISYM_ACCESS
, CLASS_IMPURE
, ACTUAL_NO
, BT_INTEGER
,
1181 di
, GFC_STD_GNU
, gfc_check_access_func
, NULL
, gfc_resolve_access
,
1182 nm
, BT_CHARACTER
, dc
, REQUIRED
, md
, BT_CHARACTER
, dc
, REQUIRED
);
1184 make_generic ("access", GFC_ISYM_ACCESS
, GFC_STD_GNU
);
1186 add_sym_2 ("achar", GFC_ISYM_ACHAR
, CLASS_ELEMENTAL
, ACTUAL_NO
,
1187 BT_CHARACTER
, dc
, GFC_STD_F95
,
1188 gfc_check_achar
, gfc_simplify_achar
, gfc_resolve_achar
,
1189 i
, BT_INTEGER
, di
, REQUIRED
, kind
, BT_INTEGER
, di
, OPTIONAL
);
1191 make_generic ("achar", GFC_ISYM_ACHAR
, GFC_STD_F95
);
1193 add_sym_1 ("acos", GFC_ISYM_ACOS
, CLASS_ELEMENTAL
, ACTUAL_YES
, BT_REAL
, dr
, GFC_STD_F77
,
1194 gfc_check_fn_rc2008
, gfc_simplify_acos
, gfc_resolve_acos
,
1195 x
, BT_REAL
, dr
, REQUIRED
);
1197 add_sym_1 ("dacos", GFC_ISYM_ACOS
, CLASS_ELEMENTAL
, ACTUAL_YES
, BT_REAL
, dd
, GFC_STD_F77
,
1198 gfc_check_fn_d
, gfc_simplify_acos
, gfc_resolve_acos
,
1199 x
, BT_REAL
, dd
, REQUIRED
);
1201 make_generic ("acos", GFC_ISYM_ACOS
, GFC_STD_F77
);
1203 add_sym_1 ("acosh", GFC_ISYM_ACOSH
, CLASS_ELEMENTAL
, ACTUAL_YES
, BT_REAL
, dr
,
1204 GFC_STD_F2008
, gfc_check_fn_rc2008
, gfc_simplify_acosh
,
1205 gfc_resolve_acosh
, x
, BT_REAL
, dr
, REQUIRED
);
1207 add_sym_1 ("dacosh", GFC_ISYM_ACOSH
, CLASS_ELEMENTAL
, ACTUAL_YES
, BT_REAL
, dd
, GFC_STD_GNU
,
1208 gfc_check_fn_d
, gfc_simplify_acosh
, gfc_resolve_acosh
,
1209 x
, BT_REAL
, dd
, REQUIRED
);
1211 make_generic ("acosh", GFC_ISYM_ACOSH
, GFC_STD_F2008
);
1213 add_sym_1 ("adjustl", GFC_ISYM_ADJUSTL
, CLASS_ELEMENTAL
, ACTUAL_NO
,
1214 BT_CHARACTER
, dc
, GFC_STD_F95
, NULL
, gfc_simplify_adjustl
,
1215 gfc_resolve_adjustl
, stg
, BT_CHARACTER
, 0, REQUIRED
);
1217 make_generic ("adjustl", GFC_ISYM_ADJUSTL
, GFC_STD_F95
);
1219 add_sym_1 ("adjustr", GFC_ISYM_ADJUSTR
, CLASS_ELEMENTAL
, ACTUAL_NO
,
1220 BT_CHARACTER
, dc
, GFC_STD_F95
, NULL
, gfc_simplify_adjustr
,
1221 gfc_resolve_adjustr
, stg
, BT_CHARACTER
, 0, REQUIRED
);
1223 make_generic ("adjustr", GFC_ISYM_ADJUSTR
, GFC_STD_F95
);
1225 add_sym_1 ("aimag", GFC_ISYM_AIMAG
, CLASS_ELEMENTAL
, ACTUAL_YES
, BT_REAL
, dr
, GFC_STD_F77
,
1226 gfc_check_fn_c
, gfc_simplify_aimag
, gfc_resolve_aimag
,
1227 z
, BT_COMPLEX
, dz
, REQUIRED
);
1229 make_alias ("imag", GFC_STD_GNU
);
1230 make_alias ("imagpart", GFC_STD_GNU
);
1232 add_sym_1 ("dimag", GFC_ISYM_AIMAG
, CLASS_ELEMENTAL
, ACTUAL_YES
, BT_REAL
, dd
, GFC_STD_GNU
,
1233 NULL
, gfc_simplify_aimag
, gfc_resolve_aimag
,
1234 z
, BT_COMPLEX
, dd
, REQUIRED
);
1236 make_generic ("aimag", GFC_ISYM_AIMAG
, GFC_STD_F77
);
1238 add_sym_2 ("aint", GFC_ISYM_AINT
, CLASS_ELEMENTAL
, ACTUAL_YES
, BT_REAL
, dr
, GFC_STD_F77
,
1239 gfc_check_a_xkind
, gfc_simplify_aint
, gfc_resolve_aint
,
1240 a
, BT_REAL
, dr
, REQUIRED
, kind
, BT_INTEGER
, di
, OPTIONAL
);
1242 add_sym_1 ("dint", GFC_ISYM_AINT
, CLASS_ELEMENTAL
, ACTUAL_YES
, BT_REAL
, dd
, GFC_STD_F77
,
1243 NULL
, gfc_simplify_dint
, gfc_resolve_dint
,
1244 a
, BT_REAL
, dd
, REQUIRED
);
1246 make_generic ("aint", GFC_ISYM_AINT
, GFC_STD_F77
);
1248 add_sym_2 ("all", GFC_ISYM_ALL
, CLASS_TRANSFORMATIONAL
, ACTUAL_NO
, BT_LOGICAL
, dl
, GFC_STD_F95
,
1249 gfc_check_all_any
, gfc_simplify_all
, gfc_resolve_all
,
1250 msk
, BT_LOGICAL
, dl
, REQUIRED
, dm
, BT_INTEGER
, ii
, OPTIONAL
);
1252 make_generic ("all", GFC_ISYM_ALL
, GFC_STD_F95
);
1254 add_sym_1 ("allocated", GFC_ISYM_ALLOCATED
, CLASS_INQUIRY
, ACTUAL_NO
, BT_LOGICAL
, dl
, GFC_STD_F95
,
1255 gfc_check_allocated
, NULL
, NULL
,
1256 ar
, BT_UNKNOWN
, 0, REQUIRED
);
1258 make_generic ("allocated", GFC_ISYM_ALLOCATED
, GFC_STD_F95
);
1260 add_sym_2 ("anint", GFC_ISYM_ANINT
, CLASS_ELEMENTAL
, ACTUAL_YES
, BT_REAL
, dr
, GFC_STD_F77
,
1261 gfc_check_a_xkind
, gfc_simplify_anint
, gfc_resolve_anint
,
1262 a
, BT_REAL
, dr
, REQUIRED
, kind
, BT_INTEGER
, di
, OPTIONAL
);
1264 add_sym_1 ("dnint", GFC_ISYM_ANINT
, CLASS_ELEMENTAL
, ACTUAL_YES
, BT_REAL
, dd
, GFC_STD_F77
,
1265 NULL
, gfc_simplify_dnint
, gfc_resolve_dnint
,
1266 a
, BT_REAL
, dd
, REQUIRED
);
1268 make_generic ("anint", GFC_ISYM_ANINT
, GFC_STD_F77
);
1270 add_sym_2 ("any", GFC_ISYM_ANY
, CLASS_TRANSFORMATIONAL
, ACTUAL_NO
, BT_LOGICAL
, dl
, GFC_STD_F95
,
1271 gfc_check_all_any
, gfc_simplify_any
, gfc_resolve_any
,
1272 msk
, BT_LOGICAL
, dl
, REQUIRED
, dm
, BT_INTEGER
, ii
, OPTIONAL
);
1274 make_generic ("any", GFC_ISYM_ANY
, GFC_STD_F95
);
1276 add_sym_1 ("asin", GFC_ISYM_ASIN
, CLASS_ELEMENTAL
, ACTUAL_YES
, BT_REAL
, dr
, GFC_STD_F77
,
1277 gfc_check_fn_rc2008
, gfc_simplify_asin
, gfc_resolve_asin
,
1278 x
, BT_REAL
, dr
, REQUIRED
);
1280 add_sym_1 ("dasin", GFC_ISYM_ASIN
, CLASS_ELEMENTAL
, ACTUAL_YES
, BT_REAL
, dd
, GFC_STD_F77
,
1281 gfc_check_fn_d
, gfc_simplify_asin
, gfc_resolve_asin
,
1282 x
, BT_REAL
, dd
, REQUIRED
);
1284 make_generic ("asin", GFC_ISYM_ASIN
, GFC_STD_F77
);
1286 add_sym_1 ("asinh", GFC_ISYM_ASINH
, CLASS_ELEMENTAL
, ACTUAL_YES
, BT_REAL
, dr
,
1287 GFC_STD_F2008
, gfc_check_fn_rc2008
, gfc_simplify_asinh
,
1288 gfc_resolve_asinh
, x
, BT_REAL
, dr
, REQUIRED
);
1290 add_sym_1 ("dasinh", GFC_ISYM_ASINH
, CLASS_ELEMENTAL
, ACTUAL_YES
, BT_REAL
, dd
, GFC_STD_GNU
,
1291 gfc_check_fn_d
, gfc_simplify_asinh
, gfc_resolve_asinh
,
1292 x
, BT_REAL
, dd
, REQUIRED
);
1294 make_generic ("asinh", GFC_ISYM_ASINH
, GFC_STD_F2008
);
1296 add_sym_2 ("associated", GFC_ISYM_ASSOCIATED
, CLASS_INQUIRY
, ACTUAL_NO
, BT_LOGICAL
, dl
,
1297 GFC_STD_F95
, gfc_check_associated
, NULL
, NULL
,
1298 pt
, BT_UNKNOWN
, 0, REQUIRED
, tg
, BT_UNKNOWN
, 0, OPTIONAL
);
1300 make_generic ("associated", GFC_ISYM_ASSOCIATED
, GFC_STD_F95
);
1302 add_sym_1 ("atan", GFC_ISYM_ATAN
, CLASS_ELEMENTAL
, ACTUAL_YES
, BT_REAL
, dr
, GFC_STD_F77
,
1303 gfc_check_fn_rc2008
, gfc_simplify_atan
, gfc_resolve_atan
,
1304 x
, BT_REAL
, dr
, REQUIRED
);
1306 add_sym_1 ("datan", GFC_ISYM_ATAN
, CLASS_ELEMENTAL
, ACTUAL_YES
, BT_REAL
, dd
, GFC_STD_F77
,
1307 gfc_check_fn_d
, gfc_simplify_atan
, gfc_resolve_atan
,
1308 x
, BT_REAL
, dd
, REQUIRED
);
1310 /* Two-argument version of atan, equivalent to atan2. */
1311 add_sym_2 ("atan", GFC_ISYM_ATAN2
, CLASS_ELEMENTAL
, ACTUAL_YES
, BT_REAL
, dr
, GFC_STD_F2008
,
1312 gfc_check_atan_2
, gfc_simplify_atan2
, gfc_resolve_atan2
,
1313 y
, BT_REAL
, dr
, REQUIRED
, x
, BT_REAL
, dr
, REQUIRED
);
1315 make_generic ("atan", GFC_ISYM_ATAN
, GFC_STD_F77
);
1317 add_sym_1 ("atanh", GFC_ISYM_ATANH
, CLASS_ELEMENTAL
, ACTUAL_YES
, BT_REAL
, dr
,
1318 GFC_STD_F2008
, gfc_check_fn_rc2008
, gfc_simplify_atanh
,
1319 gfc_resolve_atanh
, x
, BT_REAL
, dr
, REQUIRED
);
1321 add_sym_1 ("datanh", GFC_ISYM_ATANH
, CLASS_ELEMENTAL
, ACTUAL_YES
, BT_REAL
, dd
, GFC_STD_GNU
,
1322 gfc_check_fn_d
, gfc_simplify_atanh
, gfc_resolve_atanh
,
1323 x
, BT_REAL
, dd
, REQUIRED
);
1325 make_generic ("atanh", GFC_ISYM_ATANH
, GFC_STD_F2008
);
1327 add_sym_2 ("atan2", GFC_ISYM_ATAN2
, CLASS_ELEMENTAL
, ACTUAL_YES
, BT_REAL
, dr
, GFC_STD_F77
,
1328 gfc_check_atan2
, gfc_simplify_atan2
, gfc_resolve_atan2
,
1329 y
, BT_REAL
, dr
, REQUIRED
, x
, BT_REAL
, dr
, REQUIRED
);
1331 add_sym_2 ("datan2", GFC_ISYM_ATAN2
, CLASS_ELEMENTAL
, ACTUAL_YES
, BT_REAL
, dd
, GFC_STD_F77
,
1332 gfc_check_datan2
, gfc_simplify_atan2
, gfc_resolve_atan2
,
1333 y
, BT_REAL
, dd
, REQUIRED
, x
, BT_REAL
, dd
, REQUIRED
);
1335 make_generic ("atan2", GFC_ISYM_ATAN2
, GFC_STD_F77
);
1337 /* Bessel and Neumann functions for G77 compatibility. */
1338 add_sym_1 ("besj0", GFC_ISYM_J0
, CLASS_ELEMENTAL
, ACTUAL_NO
, BT_REAL
, dr
, GFC_STD_GNU
,
1339 gfc_check_fn_r
, gfc_simplify_bessel_j0
, gfc_resolve_g77_math1
,
1340 x
, BT_REAL
, dr
, REQUIRED
);
1342 make_alias ("bessel_j0", GFC_STD_F2008
);
1344 add_sym_1 ("dbesj0", GFC_ISYM_J0
, CLASS_ELEMENTAL
, ACTUAL_NO
, BT_REAL
, dd
, GFC_STD_GNU
,
1345 gfc_check_fn_d
, gfc_simplify_bessel_j0
, gfc_resolve_g77_math1
,
1346 x
, BT_REAL
, dd
, REQUIRED
);
1348 make_generic ("bessel_j0", GFC_ISYM_J0
, GFC_STD_F2008
);
1350 add_sym_1 ("besj1", GFC_ISYM_J1
, CLASS_ELEMENTAL
, ACTUAL_NO
, BT_REAL
, dr
, GFC_STD_GNU
,
1351 gfc_check_fn_r
, gfc_simplify_bessel_j1
, gfc_resolve_g77_math1
,
1352 x
, BT_REAL
, dr
, REQUIRED
);
1354 make_alias ("bessel_j1", GFC_STD_F2008
);
1356 add_sym_1 ("dbesj1", GFC_ISYM_J1
, CLASS_ELEMENTAL
, ACTUAL_NO
, BT_REAL
, dd
, GFC_STD_GNU
,
1357 gfc_check_fn_d
, gfc_simplify_bessel_j1
, gfc_resolve_g77_math1
,
1358 x
, BT_REAL
, dd
, REQUIRED
);
1360 make_generic ("bessel_j1", GFC_ISYM_J1
, GFC_STD_F2008
);
1362 add_sym_2 ("besjn", GFC_ISYM_JN
, CLASS_ELEMENTAL
, ACTUAL_NO
, BT_REAL
, dr
, GFC_STD_GNU
,
1363 gfc_check_besn
, gfc_simplify_bessel_jn
, gfc_resolve_besn
,
1364 n
, BT_INTEGER
, di
, REQUIRED
, x
, BT_REAL
, dr
, REQUIRED
);
1366 make_alias ("bessel_jn", GFC_STD_F2008
);
1368 add_sym_2 ("dbesjn", GFC_ISYM_JN
, CLASS_ELEMENTAL
, ACTUAL_NO
, BT_REAL
, dd
, GFC_STD_GNU
,
1369 gfc_check_besn
, gfc_simplify_bessel_jn
, gfc_resolve_besn
,
1370 n
, BT_INTEGER
, di
, REQUIRED
, x
, BT_REAL
, dd
, REQUIRED
);
1372 add_sym_3 ("bessel_jn", GFC_ISYM_JN2
, CLASS_TRANSFORMATIONAL
, ACTUAL_NO
, BT_REAL
, dr
, GFC_STD_F2008
,
1373 gfc_check_bessel_n2
, gfc_simplify_bessel_jn2
, gfc_resolve_bessel_n2
,
1374 "n1", BT_INTEGER
, di
, REQUIRED
,"n2", BT_INTEGER
, di
, REQUIRED
,
1375 x
, BT_REAL
, dr
, REQUIRED
);
1376 set_attr_value (3, true, true, true);
1378 make_generic ("bessel_jn", GFC_ISYM_JN
, GFC_STD_F2008
);
1380 add_sym_1 ("besy0", GFC_ISYM_Y0
, CLASS_ELEMENTAL
, ACTUAL_NO
, BT_REAL
, dr
, GFC_STD_GNU
,
1381 gfc_check_fn_r
, gfc_simplify_bessel_y0
, gfc_resolve_g77_math1
,
1382 x
, BT_REAL
, dr
, REQUIRED
);
1384 make_alias ("bessel_y0", GFC_STD_F2008
);
1386 add_sym_1 ("dbesy0", GFC_ISYM_Y0
, CLASS_ELEMENTAL
, ACTUAL_NO
, BT_REAL
, dd
, GFC_STD_GNU
,
1387 gfc_check_fn_d
, gfc_simplify_bessel_y0
, gfc_resolve_g77_math1
,
1388 x
, BT_REAL
, dd
, REQUIRED
);
1390 make_generic ("bessel_y0", GFC_ISYM_Y0
, GFC_STD_F2008
);
1392 add_sym_1 ("besy1", GFC_ISYM_Y1
, CLASS_ELEMENTAL
, ACTUAL_NO
, BT_REAL
, dr
, GFC_STD_GNU
,
1393 gfc_check_fn_r
, gfc_simplify_bessel_y1
, gfc_resolve_g77_math1
,
1394 x
, BT_REAL
, dr
, REQUIRED
);
1396 make_alias ("bessel_y1", GFC_STD_F2008
);
1398 add_sym_1 ("dbesy1", GFC_ISYM_Y1
, CLASS_ELEMENTAL
, ACTUAL_NO
, BT_REAL
, dd
, GFC_STD_GNU
,
1399 gfc_check_fn_d
, gfc_simplify_bessel_y1
, gfc_resolve_g77_math1
,
1400 x
, BT_REAL
, dd
, REQUIRED
);
1402 make_generic ("bessel_y1", GFC_ISYM_Y1
, GFC_STD_F2008
);
1404 add_sym_2 ("besyn", GFC_ISYM_YN
, CLASS_ELEMENTAL
, ACTUAL_NO
, BT_REAL
, dr
, GFC_STD_GNU
,
1405 gfc_check_besn
, gfc_simplify_bessel_yn
, gfc_resolve_besn
,
1406 n
, BT_INTEGER
, di
, REQUIRED
, x
, BT_REAL
, dr
, REQUIRED
);
1408 make_alias ("bessel_yn", GFC_STD_F2008
);
1410 add_sym_2 ("dbesyn", GFC_ISYM_YN
, CLASS_ELEMENTAL
, ACTUAL_NO
, BT_REAL
, dd
, GFC_STD_GNU
,
1411 gfc_check_besn
, gfc_simplify_bessel_yn
, gfc_resolve_besn
,
1412 n
, BT_INTEGER
, di
, REQUIRED
, x
, BT_REAL
, dd
, REQUIRED
);
1414 add_sym_3 ("bessel_yn", GFC_ISYM_YN2
, CLASS_TRANSFORMATIONAL
, ACTUAL_NO
, BT_REAL
, dr
, GFC_STD_F2008
,
1415 gfc_check_bessel_n2
, gfc_simplify_bessel_yn2
, gfc_resolve_bessel_n2
,
1416 "n1", BT_INTEGER
, di
, REQUIRED
,"n2", BT_INTEGER
, di
, REQUIRED
,
1417 x
, BT_REAL
, dr
, REQUIRED
);
1418 set_attr_value (3, true, true, true);
1420 make_generic ("bessel_yn", GFC_ISYM_YN
, GFC_STD_F2008
);
1422 add_sym_2 ("bge", GFC_ISYM_BGE
, CLASS_ELEMENTAL
, ACTUAL_NO
,
1423 BT_LOGICAL
, dl
, GFC_STD_F2008
,
1424 gfc_check_bge_bgt_ble_blt
, gfc_simplify_bge
, NULL
,
1425 i
, BT_INTEGER
, di
, REQUIRED
, j
, BT_INTEGER
, di
, REQUIRED
);
1427 make_generic ("bge", GFC_ISYM_BGE
, GFC_STD_F2008
);
1429 add_sym_2 ("bgt", GFC_ISYM_BGT
, CLASS_ELEMENTAL
, ACTUAL_NO
,
1430 BT_LOGICAL
, dl
, GFC_STD_F2008
,
1431 gfc_check_bge_bgt_ble_blt
, gfc_simplify_bgt
, NULL
,
1432 i
, BT_INTEGER
, di
, REQUIRED
, j
, BT_INTEGER
, di
, REQUIRED
);
1434 make_generic ("bgt", GFC_ISYM_BGT
, GFC_STD_F2008
);
1436 add_sym_1 ("bit_size", GFC_ISYM_BIT_SIZE
, CLASS_INQUIRY
, ACTUAL_NO
, BT_INTEGER
, di
, GFC_STD_F95
,
1437 gfc_check_i
, gfc_simplify_bit_size
, NULL
,
1438 i
, BT_INTEGER
, di
, REQUIRED
);
1440 make_generic ("bit_size", GFC_ISYM_BIT_SIZE
, GFC_STD_F95
);
1442 add_sym_2 ("ble", GFC_ISYM_BLE
, CLASS_ELEMENTAL
, ACTUAL_NO
,
1443 BT_LOGICAL
, dl
, GFC_STD_F2008
,
1444 gfc_check_bge_bgt_ble_blt
, gfc_simplify_ble
, NULL
,
1445 i
, BT_INTEGER
, di
, REQUIRED
, j
, BT_INTEGER
, di
, REQUIRED
);
1447 make_generic ("ble", GFC_ISYM_BLE
, GFC_STD_F2008
);
1449 add_sym_2 ("blt", GFC_ISYM_BLT
, CLASS_ELEMENTAL
, ACTUAL_NO
,
1450 BT_LOGICAL
, dl
, GFC_STD_F2008
,
1451 gfc_check_bge_bgt_ble_blt
, gfc_simplify_blt
, NULL
,
1452 i
, BT_INTEGER
, di
, REQUIRED
, j
, BT_INTEGER
, di
, REQUIRED
);
1454 make_generic ("blt", GFC_ISYM_BLT
, GFC_STD_F2008
);
1456 add_sym_2 ("btest", GFC_ISYM_BTEST
, CLASS_ELEMENTAL
, ACTUAL_NO
, BT_LOGICAL
, dl
, GFC_STD_F95
,
1457 gfc_check_bitfcn
, gfc_simplify_btest
, gfc_resolve_btest
,
1458 i
, BT_INTEGER
, di
, REQUIRED
, pos
, BT_INTEGER
, di
, REQUIRED
);
1460 make_generic ("btest", GFC_ISYM_BTEST
, GFC_STD_F95
);
1462 add_sym_2 ("ceiling", GFC_ISYM_CEILING
, CLASS_ELEMENTAL
, ACTUAL_NO
, BT_INTEGER
, di
, GFC_STD_F95
,
1463 gfc_check_a_ikind
, gfc_simplify_ceiling
, gfc_resolve_ceiling
,
1464 a
, BT_REAL
, dr
, REQUIRED
, kind
, BT_INTEGER
, di
, OPTIONAL
);
1466 make_generic ("ceiling", GFC_ISYM_CEILING
, GFC_STD_F95
);
1468 add_sym_2 ("char", GFC_ISYM_CHAR
, CLASS_ELEMENTAL
, ACTUAL_NO
, BT_CHARACTER
, dc
, GFC_STD_F77
,
1469 gfc_check_char
, gfc_simplify_char
, gfc_resolve_char
,
1470 i
, BT_INTEGER
, di
, REQUIRED
, kind
, BT_INTEGER
, di
, OPTIONAL
);
1472 make_generic ("char", GFC_ISYM_CHAR
, GFC_STD_F77
);
1474 add_sym_1 ("chdir", GFC_ISYM_CHDIR
, CLASS_IMPURE
, ACTUAL_NO
, BT_INTEGER
, di
,
1475 GFC_STD_GNU
, gfc_check_chdir
, NULL
, gfc_resolve_chdir
,
1476 nm
, BT_CHARACTER
, dc
, REQUIRED
);
1478 make_generic ("chdir", GFC_ISYM_CHDIR
, GFC_STD_GNU
);
1480 add_sym_2 ("chmod", GFC_ISYM_CHMOD
, CLASS_IMPURE
, ACTUAL_NO
, BT_INTEGER
,
1481 di
, GFC_STD_GNU
, gfc_check_chmod
, NULL
, gfc_resolve_chmod
,
1482 nm
, BT_CHARACTER
, dc
, REQUIRED
, md
, BT_CHARACTER
, dc
, REQUIRED
);
1484 make_generic ("chmod", GFC_ISYM_CHMOD
, GFC_STD_GNU
);
1486 add_sym_3 ("cmplx", GFC_ISYM_CMPLX
, CLASS_ELEMENTAL
, ACTUAL_NO
, BT_COMPLEX
, dz
, GFC_STD_F77
,
1487 gfc_check_cmplx
, gfc_simplify_cmplx
, gfc_resolve_cmplx
,
1488 x
, BT_UNKNOWN
, dr
, REQUIRED
, y
, BT_UNKNOWN
, dr
, OPTIONAL
,
1489 kind
, BT_INTEGER
, di
, OPTIONAL
);
1491 make_generic ("cmplx", GFC_ISYM_CMPLX
, GFC_STD_F77
);
1493 add_sym_0 ("command_argument_count", GFC_ISYM_COMMAND_ARGUMENT_COUNT
, CLASS_INQUIRY
,
1494 ACTUAL_NO
, BT_INTEGER
, di
, GFC_STD_F2003
, NULL
, NULL
, NULL
);
1496 make_generic ("command_argument_count", GFC_ISYM_COMMAND_ARGUMENT_COUNT
,
1499 add_sym_2 ("complex", GFC_ISYM_COMPLEX
, CLASS_ELEMENTAL
, ACTUAL_NO
, BT_COMPLEX
, dz
, GFC_STD_GNU
,
1500 gfc_check_complex
, gfc_simplify_complex
, gfc_resolve_complex
,
1501 x
, BT_UNKNOWN
, dr
, REQUIRED
, y
, BT_UNKNOWN
, dr
, REQUIRED
);
1503 make_generic ("complex", GFC_ISYM_COMPLEX
, GFC_STD_GNU
);
1505 /* Making dcmplx a specific of cmplx causes cmplx to return a double
1506 complex instead of the default complex. */
1508 add_sym_2 ("dcmplx", GFC_ISYM_CMPLX
, CLASS_ELEMENTAL
, ACTUAL_NO
, BT_COMPLEX
, dd
, GFC_STD_GNU
,
1509 gfc_check_dcmplx
, gfc_simplify_dcmplx
, gfc_resolve_dcmplx
,
1510 x
, BT_REAL
, dd
, REQUIRED
, y
, BT_REAL
, dd
, OPTIONAL
);
1512 make_generic ("dcmplx", GFC_ISYM_CMPLX
, GFC_STD_GNU
);
1514 add_sym_1 ("conjg", GFC_ISYM_CONJG
, CLASS_ELEMENTAL
, ACTUAL_YES
, BT_COMPLEX
, dz
, GFC_STD_F77
,
1515 gfc_check_fn_c
, gfc_simplify_conjg
, gfc_resolve_conjg
,
1516 z
, BT_COMPLEX
, dz
, REQUIRED
);
1518 add_sym_1 ("dconjg", GFC_ISYM_CONJG
, CLASS_ELEMENTAL
, ACTUAL_YES
, BT_COMPLEX
, dd
, GFC_STD_GNU
,
1519 NULL
, gfc_simplify_conjg
, gfc_resolve_conjg
,
1520 z
, BT_COMPLEX
, dd
, REQUIRED
);
1522 make_generic ("conjg", GFC_ISYM_CONJG
, GFC_STD_F77
);
1524 add_sym_1 ("cos", GFC_ISYM_COS
, CLASS_ELEMENTAL
, ACTUAL_YES
, BT_REAL
, dr
, GFC_STD_F77
,
1525 gfc_check_fn_rc
, gfc_simplify_cos
, gfc_resolve_cos
,
1526 x
, BT_REAL
, dr
, REQUIRED
);
1528 add_sym_1 ("dcos", GFC_ISYM_COS
, CLASS_ELEMENTAL
, ACTUAL_YES
, BT_REAL
, dd
, GFC_STD_F77
,
1529 gfc_check_fn_d
, gfc_simplify_cos
, gfc_resolve_cos
,
1530 x
, BT_REAL
, dd
, REQUIRED
);
1532 add_sym_1 ("ccos", GFC_ISYM_COS
, CLASS_ELEMENTAL
, ACTUAL_YES
, BT_COMPLEX
, dz
, GFC_STD_F77
,
1533 NULL
, gfc_simplify_cos
, gfc_resolve_cos
,
1534 x
, BT_COMPLEX
, dz
, REQUIRED
);
1536 add_sym_1 ("zcos", GFC_ISYM_COS
, CLASS_ELEMENTAL
, ACTUAL_YES
, BT_COMPLEX
, dd
, GFC_STD_GNU
,
1537 NULL
, gfc_simplify_cos
, gfc_resolve_cos
,
1538 x
, BT_COMPLEX
, dd
, REQUIRED
);
1540 make_alias ("cdcos", GFC_STD_GNU
);
1542 make_generic ("cos", GFC_ISYM_COS
, GFC_STD_F77
);
1544 add_sym_1 ("cosh", GFC_ISYM_COSH
, CLASS_ELEMENTAL
, ACTUAL_YES
, BT_REAL
, dr
, GFC_STD_F77
,
1545 gfc_check_fn_rc2008
, gfc_simplify_cosh
, gfc_resolve_cosh
,
1546 x
, BT_REAL
, dr
, REQUIRED
);
1548 add_sym_1 ("dcosh", GFC_ISYM_COSH
, CLASS_ELEMENTAL
, ACTUAL_YES
, BT_REAL
, dd
, GFC_STD_F77
,
1549 gfc_check_fn_d
, gfc_simplify_cosh
, gfc_resolve_cosh
,
1550 x
, BT_REAL
, dd
, REQUIRED
);
1552 make_generic ("cosh", GFC_ISYM_COSH
, GFC_STD_F77
);
1554 add_sym_3 ("count", GFC_ISYM_COUNT
, CLASS_TRANSFORMATIONAL
, ACTUAL_NO
,
1555 BT_INTEGER
, di
, GFC_STD_F95
,
1556 gfc_check_count
, gfc_simplify_count
, gfc_resolve_count
,
1557 msk
, BT_LOGICAL
, dl
, REQUIRED
, dm
, BT_INTEGER
, ii
, OPTIONAL
,
1558 kind
, BT_INTEGER
, di
, OPTIONAL
);
1560 make_generic ("count", GFC_ISYM_COUNT
, GFC_STD_F95
);
1562 add_sym_3 ("cshift", GFC_ISYM_CSHIFT
, CLASS_TRANSFORMATIONAL
, ACTUAL_NO
, BT_REAL
, dr
, GFC_STD_F95
,
1563 gfc_check_cshift
, NULL
, gfc_resolve_cshift
,
1564 ar
, BT_REAL
, dr
, REQUIRED
, sh
, BT_INTEGER
, di
, REQUIRED
,
1565 dm
, BT_INTEGER
, ii
, OPTIONAL
);
1567 make_generic ("cshift", GFC_ISYM_CSHIFT
, GFC_STD_F95
);
1569 add_sym_1 ("ctime", GFC_ISYM_CTIME
, CLASS_IMPURE
, ACTUAL_NO
, BT_CHARACTER
,
1570 0, GFC_STD_GNU
, gfc_check_ctime
, NULL
, gfc_resolve_ctime
,
1571 tm
, BT_INTEGER
, di
, REQUIRED
);
1573 make_generic ("ctime", GFC_ISYM_CTIME
, GFC_STD_GNU
);
1575 add_sym_1 ("dble", GFC_ISYM_DBLE
, CLASS_ELEMENTAL
, ACTUAL_NO
, BT_REAL
, dd
, GFC_STD_F77
,
1576 gfc_check_dble
, gfc_simplify_dble
, gfc_resolve_dble
,
1577 a
, BT_REAL
, dr
, REQUIRED
);
1579 make_generic ("dble", GFC_ISYM_DBLE
, GFC_STD_F77
);
1581 add_sym_1 ("digits", GFC_ISYM_DIGITS
, CLASS_INQUIRY
, ACTUAL_NO
, BT_INTEGER
, di
, GFC_STD_F95
,
1582 gfc_check_digits
, gfc_simplify_digits
, NULL
,
1583 x
, BT_UNKNOWN
, dr
, REQUIRED
);
1585 make_generic ("digits", GFC_ISYM_DIGITS
, GFC_STD_F95
);
1587 add_sym_2 ("dim", GFC_ISYM_DIM
, CLASS_ELEMENTAL
, ACTUAL_YES
, BT_REAL
, dr
, GFC_STD_F77
,
1588 gfc_check_a_p
, gfc_simplify_dim
, gfc_resolve_dim
,
1589 x
, BT_REAL
, dr
, REQUIRED
, y
, BT_REAL
, dr
, REQUIRED
);
1591 add_sym_2 ("idim", GFC_ISYM_DIM
, CLASS_ELEMENTAL
, ACTUAL_YES
, BT_INTEGER
, di
, GFC_STD_F77
,
1592 NULL
, gfc_simplify_dim
, gfc_resolve_dim
,
1593 x
, BT_INTEGER
, di
, REQUIRED
, y
, BT_INTEGER
, di
, REQUIRED
);
1595 add_sym_2 ("ddim", GFC_ISYM_DIM
, CLASS_ELEMENTAL
, ACTUAL_YES
, BT_REAL
, dd
, GFC_STD_F77
,
1596 gfc_check_x_yd
, gfc_simplify_dim
, gfc_resolve_dim
,
1597 x
, BT_REAL
, dd
, REQUIRED
, y
, BT_REAL
, dd
, REQUIRED
);
1599 make_generic ("dim", GFC_ISYM_DIM
, GFC_STD_F77
);
1601 add_sym_2 ("dot_product", GFC_ISYM_DOT_PRODUCT
, CLASS_TRANSFORMATIONAL
, ACTUAL_NO
, BT_REAL
, dr
,
1602 GFC_STD_F95
, gfc_check_dot_product
, gfc_simplify_dot_product
, gfc_resolve_dot_product
,
1603 va
, BT_REAL
, dr
, REQUIRED
, vb
, BT_REAL
, dr
, REQUIRED
);
1605 make_generic ("dot_product", GFC_ISYM_DOT_PRODUCT
, GFC_STD_F95
);
1607 add_sym_2 ("dprod", GFC_ISYM_DPROD
,CLASS_ELEMENTAL
, ACTUAL_YES
, BT_REAL
, dd
, GFC_STD_F77
,
1608 gfc_check_dprod
, gfc_simplify_dprod
, gfc_resolve_dprod
,
1609 x
, BT_REAL
, dr
, REQUIRED
, y
, BT_REAL
, dr
, REQUIRED
);
1611 make_generic ("dprod", GFC_ISYM_DPROD
, GFC_STD_F77
);
1613 add_sym_1 ("dreal", GFC_ISYM_REAL
, CLASS_ELEMENTAL
, ACTUAL_NO
,
1614 BT_REAL
, dd
, GFC_STD_GNU
, NULL
, gfc_simplify_dreal
, NULL
,
1615 a
, BT_COMPLEX
, dd
, REQUIRED
);
1617 make_generic ("dreal", GFC_ISYM_REAL
, GFC_STD_GNU
);
1619 add_sym_3 ("dshiftl", GFC_ISYM_DSHIFTL
, CLASS_ELEMENTAL
, ACTUAL_NO
,
1620 BT_INTEGER
, di
, GFC_STD_F2008
,
1621 gfc_check_dshift
, gfc_simplify_dshiftl
, gfc_resolve_dshift
,
1622 i
, BT_INTEGER
, di
, REQUIRED
,
1623 j
, BT_INTEGER
, di
, REQUIRED
,
1624 sh
, BT_INTEGER
, di
, REQUIRED
);
1626 make_generic ("dshiftl", GFC_ISYM_DSHIFTL
, GFC_STD_F2008
);
1628 add_sym_3 ("dshiftr", GFC_ISYM_DSHIFTR
, CLASS_ELEMENTAL
, ACTUAL_NO
,
1629 BT_INTEGER
, di
, GFC_STD_F2008
,
1630 gfc_check_dshift
, gfc_simplify_dshiftr
, gfc_resolve_dshift
,
1631 i
, BT_INTEGER
, di
, REQUIRED
,
1632 j
, BT_INTEGER
, di
, REQUIRED
,
1633 sh
, BT_INTEGER
, di
, REQUIRED
);
1635 make_generic ("dshiftr", GFC_ISYM_DSHIFTR
, GFC_STD_F2008
);
1637 add_sym_4 ("eoshift", GFC_ISYM_EOSHIFT
, CLASS_TRANSFORMATIONAL
, ACTUAL_NO
, BT_REAL
, dr
, GFC_STD_F95
,
1638 gfc_check_eoshift
, NULL
, gfc_resolve_eoshift
,
1639 ar
, BT_REAL
, dr
, REQUIRED
, sh
, BT_INTEGER
, ii
, REQUIRED
,
1640 bd
, BT_REAL
, dr
, OPTIONAL
, dm
, BT_INTEGER
, ii
, OPTIONAL
);
1642 make_generic ("eoshift", GFC_ISYM_EOSHIFT
, GFC_STD_F95
);
1644 add_sym_1 ("epsilon", GFC_ISYM_EPSILON
, CLASS_INQUIRY
, ACTUAL_NO
, BT_REAL
, dr
, GFC_STD_F95
,
1645 gfc_check_x
, gfc_simplify_epsilon
, NULL
,
1646 x
, BT_REAL
, dr
, REQUIRED
);
1648 make_generic ("epsilon", GFC_ISYM_EPSILON
, GFC_STD_F95
);
1650 /* G77 compatibility for the ERF() and ERFC() functions. */
1651 add_sym_1 ("erf", GFC_ISYM_ERF
, CLASS_ELEMENTAL
, ACTUAL_NO
, BT_REAL
, dr
,
1652 GFC_STD_F2008
, gfc_check_fn_r
, gfc_simplify_erf
,
1653 gfc_resolve_g77_math1
, x
, BT_REAL
, dr
, REQUIRED
);
1655 add_sym_1 ("derf", GFC_ISYM_ERF
, CLASS_ELEMENTAL
, ACTUAL_NO
, BT_REAL
, dd
,
1656 GFC_STD_GNU
, gfc_check_fn_d
, gfc_simplify_erf
,
1657 gfc_resolve_g77_math1
, x
, BT_REAL
, dd
, REQUIRED
);
1659 make_generic ("erf", GFC_ISYM_ERF
, GFC_STD_F2008
);
1661 add_sym_1 ("erfc", GFC_ISYM_ERFC
, CLASS_ELEMENTAL
, ACTUAL_NO
, BT_REAL
, dr
,
1662 GFC_STD_F2008
, gfc_check_fn_r
, gfc_simplify_erfc
,
1663 gfc_resolve_g77_math1
, x
, BT_REAL
, dr
, REQUIRED
);
1665 add_sym_1 ("derfc", GFC_ISYM_ERFC
, CLASS_ELEMENTAL
, ACTUAL_NO
, BT_REAL
, dd
,
1666 GFC_STD_GNU
, gfc_check_fn_d
, gfc_simplify_erfc
,
1667 gfc_resolve_g77_math1
, x
, BT_REAL
, dd
, REQUIRED
);
1669 make_generic ("erfc", GFC_ISYM_ERFC
, GFC_STD_F2008
);
1671 add_sym_1 ("erfc_scaled", GFC_ISYM_ERFC_SCALED
, CLASS_ELEMENTAL
, ACTUAL_NO
,
1672 BT_REAL
, dr
, GFC_STD_F2008
, gfc_check_fn_r
,
1673 gfc_simplify_erfc_scaled
, gfc_resolve_g77_math1
, x
, BT_REAL
,
1676 make_generic ("erfc_scaled", GFC_ISYM_ERFC_SCALED
, GFC_STD_F2008
);
1678 /* G77 compatibility */
1679 add_sym_1 ("dtime", GFC_ISYM_DTIME
, CLASS_IMPURE
, ACTUAL_NO
, BT_REAL
,
1680 4, GFC_STD_GNU
, gfc_check_dtime_etime
, NULL
, NULL
,
1681 x
, BT_REAL
, 4, REQUIRED
);
1683 make_generic ("dtime", GFC_ISYM_DTIME
, GFC_STD_GNU
);
1685 add_sym_1 ("etime", GFC_ISYM_ETIME
, CLASS_IMPURE
, ACTUAL_NO
, BT_REAL
,
1686 4, GFC_STD_GNU
, gfc_check_dtime_etime
, NULL
, NULL
,
1687 x
, BT_REAL
, 4, REQUIRED
);
1689 make_generic ("etime", GFC_ISYM_ETIME
, GFC_STD_GNU
);
1691 add_sym_1 ("exp", GFC_ISYM_EXP
, CLASS_ELEMENTAL
, ACTUAL_YES
, BT_REAL
, dr
, GFC_STD_F77
,
1692 gfc_check_fn_rc
, gfc_simplify_exp
, gfc_resolve_exp
,
1693 x
, BT_REAL
, dr
, REQUIRED
);
1695 add_sym_1 ("dexp", GFC_ISYM_EXP
, CLASS_ELEMENTAL
, ACTUAL_YES
, BT_REAL
, dd
, GFC_STD_F77
,
1696 gfc_check_fn_d
, gfc_simplify_exp
, gfc_resolve_exp
,
1697 x
, BT_REAL
, dd
, REQUIRED
);
1699 add_sym_1 ("cexp", GFC_ISYM_EXP
, CLASS_ELEMENTAL
, ACTUAL_YES
, BT_COMPLEX
, dz
, GFC_STD_F77
,
1700 NULL
, gfc_simplify_exp
, gfc_resolve_exp
,
1701 x
, BT_COMPLEX
, dz
, REQUIRED
);
1703 add_sym_1 ("zexp", GFC_ISYM_EXP
, CLASS_ELEMENTAL
, ACTUAL_YES
, BT_COMPLEX
, dd
, GFC_STD_GNU
,
1704 NULL
, gfc_simplify_exp
, gfc_resolve_exp
,
1705 x
, BT_COMPLEX
, dd
, REQUIRED
);
1707 make_alias ("cdexp", GFC_STD_GNU
);
1709 make_generic ("exp", GFC_ISYM_EXP
, GFC_STD_F77
);
1711 add_sym_1 ("exponent", GFC_ISYM_EXPONENT
, CLASS_ELEMENTAL
, ACTUAL_NO
, BT_INTEGER
, di
, GFC_STD_F95
,
1712 gfc_check_x
, gfc_simplify_exponent
, gfc_resolve_exponent
,
1713 x
, BT_REAL
, dr
, REQUIRED
);
1715 make_generic ("exponent", GFC_ISYM_EXPONENT
, GFC_STD_F95
);
1717 add_sym_2 ("extends_type_of", GFC_ISYM_EXTENDS_TYPE_OF
, CLASS_INQUIRY
,
1718 ACTUAL_NO
, BT_LOGICAL
, dl
, GFC_STD_F2003
,
1719 gfc_check_same_type_as
, gfc_simplify_extends_type_of
,
1720 gfc_resolve_extends_type_of
,
1721 a
, BT_UNKNOWN
, 0, REQUIRED
,
1722 mo
, BT_UNKNOWN
, 0, REQUIRED
);
1724 add_sym_0 ("fdate", GFC_ISYM_FDATE
, CLASS_IMPURE
, ACTUAL_NO
, BT_CHARACTER
,
1725 dc
, GFC_STD_GNU
, NULL
, NULL
, gfc_resolve_fdate
);
1727 make_generic ("fdate", GFC_ISYM_FDATE
, GFC_STD_GNU
);
1729 add_sym_2 ("floor", GFC_ISYM_FLOOR
, CLASS_ELEMENTAL
, ACTUAL_NO
, BT_INTEGER
, di
, GFC_STD_F95
,
1730 gfc_check_a_ikind
, gfc_simplify_floor
, gfc_resolve_floor
,
1731 a
, BT_REAL
, dr
, REQUIRED
, kind
, BT_INTEGER
, di
, OPTIONAL
);
1733 make_generic ("floor", GFC_ISYM_FLOOR
, GFC_STD_F95
);
1735 /* G77 compatible fnum */
1736 add_sym_1 ("fnum", GFC_ISYM_FNUM
, CLASS_IMPURE
, ACTUAL_NO
, BT_INTEGER
,
1737 di
, GFC_STD_GNU
, gfc_check_fnum
, NULL
, gfc_resolve_fnum
,
1738 ut
, BT_INTEGER
, di
, REQUIRED
);
1740 make_generic ("fnum", GFC_ISYM_FNUM
, GFC_STD_GNU
);
1742 add_sym_1 ("fraction", GFC_ISYM_FRACTION
, CLASS_ELEMENTAL
, ACTUAL_NO
, BT_REAL
, dr
, GFC_STD_F95
,
1743 gfc_check_x
, gfc_simplify_fraction
, gfc_resolve_fraction
,
1744 x
, BT_REAL
, dr
, REQUIRED
);
1746 make_generic ("fraction", GFC_ISYM_FRACTION
, GFC_STD_F95
);
1748 add_sym_2_intent ("fstat", GFC_ISYM_FSTAT
, CLASS_IMPURE
, ACTUAL_NO
,
1749 BT_INTEGER
, di
, GFC_STD_GNU
,
1750 gfc_check_fstat
, NULL
, gfc_resolve_fstat
,
1751 ut
, BT_INTEGER
, di
, REQUIRED
, INTENT_IN
,
1752 vl
, BT_INTEGER
, di
, REQUIRED
, INTENT_OUT
);
1754 make_generic ("fstat", GFC_ISYM_FSTAT
, GFC_STD_GNU
);
1756 add_sym_1 ("ftell", GFC_ISYM_FTELL
, CLASS_IMPURE
, ACTUAL_NO
, BT_INTEGER
,
1757 ii
, GFC_STD_GNU
, gfc_check_ftell
, NULL
, gfc_resolve_ftell
,
1758 ut
, BT_INTEGER
, di
, REQUIRED
);
1760 make_generic ("ftell", GFC_ISYM_FTELL
, GFC_STD_GNU
);
1762 add_sym_2_intent ("fgetc", GFC_ISYM_FGETC
, CLASS_IMPURE
, ACTUAL_NO
,
1763 BT_INTEGER
, di
, GFC_STD_GNU
,
1764 gfc_check_fgetputc
, NULL
, gfc_resolve_fgetc
,
1765 ut
, BT_INTEGER
, di
, REQUIRED
, INTENT_IN
,
1766 c
, BT_CHARACTER
, dc
, REQUIRED
, INTENT_OUT
);
1768 make_generic ("fgetc", GFC_ISYM_FGETC
, GFC_STD_GNU
);
1770 add_sym_1_intent ("fget", GFC_ISYM_FGET
, CLASS_IMPURE
, ACTUAL_NO
, BT_INTEGER
,
1771 di
, GFC_STD_GNU
, gfc_check_fgetput
, NULL
, gfc_resolve_fget
,
1772 c
, BT_CHARACTER
, dc
, REQUIRED
, INTENT_OUT
);
1774 make_generic ("fget", GFC_ISYM_FGET
, GFC_STD_GNU
);
1776 add_sym_2 ("fputc", GFC_ISYM_FPUTC
, CLASS_IMPURE
, ACTUAL_NO
, BT_INTEGER
,
1777 di
, GFC_STD_GNU
, gfc_check_fgetputc
, NULL
, gfc_resolve_fputc
,
1778 ut
, BT_INTEGER
, di
, REQUIRED
, c
, BT_CHARACTER
, dc
, REQUIRED
);
1780 make_generic ("fputc", GFC_ISYM_FPUTC
, GFC_STD_GNU
);
1782 add_sym_1 ("fput", GFC_ISYM_FPUT
, CLASS_IMPURE
, ACTUAL_NO
, BT_INTEGER
,
1783 di
, GFC_STD_GNU
, gfc_check_fgetput
, NULL
, gfc_resolve_fput
,
1784 c
, BT_CHARACTER
, dc
, REQUIRED
);
1786 make_generic ("fput", GFC_ISYM_FPUT
, GFC_STD_GNU
);
1788 add_sym_1 ("gamma", GFC_ISYM_TGAMMA
, CLASS_ELEMENTAL
, ACTUAL_NO
, BT_REAL
, dr
,
1789 GFC_STD_F2008
, gfc_check_fn_r
, gfc_simplify_gamma
,
1790 gfc_resolve_gamma
, x
, BT_REAL
, dr
, REQUIRED
);
1792 add_sym_1 ("dgamma", GFC_ISYM_TGAMMA
, CLASS_ELEMENTAL
, ACTUAL_NO
, BT_REAL
, dr
, GFC_STD_GNU
,
1793 gfc_check_fn_d
, gfc_simplify_gamma
, gfc_resolve_gamma
,
1794 x
, BT_REAL
, dr
, REQUIRED
);
1796 make_generic ("gamma", GFC_ISYM_TGAMMA
, GFC_STD_F2008
);
1798 /* Unix IDs (g77 compatibility) */
1799 add_sym_1 ("getcwd", GFC_ISYM_GETCWD
, CLASS_IMPURE
, ACTUAL_NO
, BT_INTEGER
,
1800 di
, GFC_STD_GNU
, NULL
, NULL
, gfc_resolve_getcwd
,
1801 c
, BT_CHARACTER
, dc
, REQUIRED
);
1803 make_generic ("getcwd", GFC_ISYM_GETCWD
, GFC_STD_GNU
);
1805 add_sym_0 ("getgid", GFC_ISYM_GETGID
, CLASS_IMPURE
, ACTUAL_NO
, BT_INTEGER
,
1806 di
, GFC_STD_GNU
, NULL
, NULL
, gfc_resolve_getgid
);
1808 make_generic ("getgid", GFC_ISYM_GETGID
, GFC_STD_GNU
);
1810 add_sym_0 ("getpid", GFC_ISYM_GETPID
, CLASS_IMPURE
, ACTUAL_NO
, BT_INTEGER
,
1811 di
, GFC_STD_GNU
, NULL
, NULL
, gfc_resolve_getpid
);
1813 make_generic ("getpid", GFC_ISYM_GETPID
, GFC_STD_GNU
);
1815 add_sym_0 ("getuid", GFC_ISYM_GETUID
, CLASS_IMPURE
, ACTUAL_NO
, BT_INTEGER
,
1816 di
, GFC_STD_GNU
, NULL
, NULL
, gfc_resolve_getuid
);
1818 make_generic ("getuid", GFC_ISYM_GETUID
, GFC_STD_GNU
);
1820 add_sym_1_intent ("hostnm", GFC_ISYM_HOSTNM
, CLASS_IMPURE
, ACTUAL_NO
,
1821 BT_INTEGER
, di
, GFC_STD_GNU
,
1822 gfc_check_hostnm
, NULL
, gfc_resolve_hostnm
,
1823 c
, BT_CHARACTER
, dc
, REQUIRED
, INTENT_OUT
);
1825 make_generic ("hostnm", GFC_ISYM_HOSTNM
, GFC_STD_GNU
);
1827 add_sym_1 ("huge", GFC_ISYM_HUGE
, CLASS_INQUIRY
, ACTUAL_NO
, BT_REAL
, dr
, GFC_STD_F95
,
1828 gfc_check_huge
, gfc_simplify_huge
, NULL
,
1829 x
, BT_UNKNOWN
, dr
, REQUIRED
);
1831 make_generic ("huge", GFC_ISYM_HUGE
, GFC_STD_F95
);
1833 add_sym_2 ("hypot", GFC_ISYM_HYPOT
, CLASS_ELEMENTAL
, ACTUAL_NO
,
1834 BT_REAL
, dr
, GFC_STD_F2008
,
1835 gfc_check_hypot
, gfc_simplify_hypot
, gfc_resolve_hypot
,
1836 x
, BT_REAL
, dr
, REQUIRED
, y
, BT_REAL
, dr
, REQUIRED
);
1838 make_generic ("hypot", GFC_ISYM_HYPOT
, GFC_STD_F2008
);
1840 add_sym_2 ("iachar", GFC_ISYM_IACHAR
, CLASS_ELEMENTAL
, ACTUAL_NO
,
1841 BT_INTEGER
, di
, GFC_STD_F95
,
1842 gfc_check_ichar_iachar
, gfc_simplify_iachar
, gfc_resolve_iachar
,
1843 c
, BT_CHARACTER
, dc
, REQUIRED
, kind
, BT_INTEGER
, di
, OPTIONAL
);
1845 make_generic ("iachar", GFC_ISYM_IACHAR
, GFC_STD_F95
);
1847 add_sym_2 ("iand", GFC_ISYM_IAND
, CLASS_ELEMENTAL
, ACTUAL_NO
, BT_INTEGER
, di
, GFC_STD_F95
,
1848 gfc_check_iand
, gfc_simplify_iand
, gfc_resolve_iand
,
1849 i
, BT_INTEGER
, di
, REQUIRED
, j
, BT_INTEGER
, di
, REQUIRED
);
1851 make_generic ("iand", GFC_ISYM_IAND
, GFC_STD_F95
);
1853 add_sym_2 ("and", GFC_ISYM_AND
, CLASS_IMPURE
, ACTUAL_NO
, BT_LOGICAL
,
1854 dl
, GFC_STD_GNU
, gfc_check_and
, gfc_simplify_and
, gfc_resolve_and
,
1855 i
, BT_UNKNOWN
, 0, REQUIRED
, j
, BT_UNKNOWN
, 0, REQUIRED
);
1857 make_generic ("and", GFC_ISYM_AND
, GFC_STD_GNU
);
1859 add_sym_3red ("iall", GFC_ISYM_IALL
, CLASS_TRANSFORMATIONAL
, ACTUAL_NO
, BT_REAL
, dr
, GFC_STD_F2008
,
1860 gfc_check_transf_bit_intrins
, gfc_simplify_iall
, gfc_resolve_iall
,
1861 ar
, BT_REAL
, dr
, REQUIRED
, dm
, BT_INTEGER
, ii
, OPTIONAL
,
1862 msk
, BT_LOGICAL
, dl
, OPTIONAL
);
1864 make_generic ("iall", GFC_ISYM_IALL
, GFC_STD_F2008
);
1866 add_sym_3red ("iany", GFC_ISYM_IANY
, CLASS_TRANSFORMATIONAL
, ACTUAL_NO
, BT_REAL
, dr
, GFC_STD_F2008
,
1867 gfc_check_transf_bit_intrins
, gfc_simplify_iany
, gfc_resolve_iany
,
1868 ar
, BT_REAL
, dr
, REQUIRED
, dm
, BT_INTEGER
, ii
, OPTIONAL
,
1869 msk
, BT_LOGICAL
, dl
, OPTIONAL
);
1871 make_generic ("iany", GFC_ISYM_IANY
, GFC_STD_F2008
);
1873 add_sym_0 ("iargc", GFC_ISYM_IARGC
, CLASS_IMPURE
, ACTUAL_NO
, BT_INTEGER
,
1874 di
, GFC_STD_GNU
, NULL
, NULL
, NULL
);
1876 make_generic ("iargc", GFC_ISYM_IARGC
, GFC_STD_GNU
);
1878 add_sym_2 ("ibclr", GFC_ISYM_IBCLR
, CLASS_ELEMENTAL
, ACTUAL_NO
, BT_INTEGER
, di
, GFC_STD_F95
,
1879 gfc_check_bitfcn
, gfc_simplify_ibclr
, gfc_resolve_ibclr
,
1880 i
, BT_INTEGER
, di
, REQUIRED
, pos
, BT_INTEGER
, di
, REQUIRED
);
1882 make_generic ("ibclr", GFC_ISYM_IBCLR
, GFC_STD_F95
);
1884 add_sym_3 ("ibits", GFC_ISYM_IBITS
, CLASS_ELEMENTAL
, ACTUAL_NO
, BT_INTEGER
, di
, GFC_STD_F95
,
1885 gfc_check_ibits
, gfc_simplify_ibits
, gfc_resolve_ibits
,
1886 i
, BT_INTEGER
, di
, REQUIRED
, pos
, BT_INTEGER
, di
, REQUIRED
,
1887 ln
, BT_INTEGER
, di
, REQUIRED
);
1889 make_generic ("ibits", GFC_ISYM_IBITS
, GFC_STD_F95
);
1891 add_sym_2 ("ibset", GFC_ISYM_IBSET
, CLASS_ELEMENTAL
, ACTUAL_NO
, BT_INTEGER
, di
, GFC_STD_F95
,
1892 gfc_check_bitfcn
, gfc_simplify_ibset
, gfc_resolve_ibset
,
1893 i
, BT_INTEGER
, di
, REQUIRED
, pos
, BT_INTEGER
, di
, REQUIRED
);
1895 make_generic ("ibset", GFC_ISYM_IBSET
, GFC_STD_F95
);
1897 add_sym_2 ("ichar", GFC_ISYM_ICHAR
, CLASS_ELEMENTAL
, ACTUAL_NO
,
1898 BT_INTEGER
, di
, GFC_STD_F77
,
1899 gfc_check_ichar_iachar
, gfc_simplify_ichar
, gfc_resolve_ichar
,
1900 c
, BT_CHARACTER
, dc
, REQUIRED
, kind
, BT_INTEGER
, di
, OPTIONAL
);
1902 make_generic ("ichar", GFC_ISYM_ICHAR
, GFC_STD_F77
);
1904 add_sym_2 ("ieor", GFC_ISYM_IEOR
, CLASS_ELEMENTAL
, ACTUAL_NO
, BT_INTEGER
, di
, GFC_STD_F95
,
1905 gfc_check_ieor
, gfc_simplify_ieor
, gfc_resolve_ieor
,
1906 i
, BT_INTEGER
, di
, REQUIRED
, j
, BT_INTEGER
, di
, REQUIRED
);
1908 make_generic ("ieor", GFC_ISYM_IEOR
, GFC_STD_F95
);
1910 add_sym_2 ("xor", GFC_ISYM_XOR
, CLASS_IMPURE
, ACTUAL_NO
, BT_LOGICAL
,
1911 dl
, GFC_STD_GNU
, gfc_check_and
, gfc_simplify_xor
, gfc_resolve_xor
,
1912 i
, BT_UNKNOWN
, 0, REQUIRED
, j
, BT_UNKNOWN
, 0, REQUIRED
);
1914 make_generic ("xor", GFC_ISYM_XOR
, GFC_STD_GNU
);
1916 add_sym_0 ("ierrno", GFC_ISYM_IERRNO
, CLASS_IMPURE
, ACTUAL_NO
, BT_INTEGER
,
1917 di
, GFC_STD_GNU
, NULL
, NULL
, gfc_resolve_ierrno
);
1919 make_generic ("ierrno", GFC_ISYM_IERRNO
, GFC_STD_GNU
);
1921 add_sym_2 ("image_index", GFC_ISYM_IMAGE_INDEX
, CLASS_INQUIRY
, ACTUAL_NO
, BT_INTEGER
, di
, GFC_STD_F2008
,
1922 gfc_check_image_index
, gfc_simplify_image_index
, gfc_resolve_image_index
,
1923 ca
, BT_REAL
, dr
, REQUIRED
, sub
, BT_INTEGER
, ii
, REQUIRED
);
1925 /* The resolution function for INDEX is called gfc_resolve_index_func
1926 because the name gfc_resolve_index is already used in resolve.c. */
1927 add_sym_4 ("index", GFC_ISYM_INDEX
, CLASS_ELEMENTAL
, ACTUAL_YES
,
1928 BT_INTEGER
, di
, GFC_STD_F77
,
1929 gfc_check_index
, gfc_simplify_index
, gfc_resolve_index_func
,
1930 stg
, BT_CHARACTER
, dc
, REQUIRED
, ssg
, BT_CHARACTER
, dc
, REQUIRED
,
1931 bck
, BT_LOGICAL
, dl
, OPTIONAL
, kind
, BT_INTEGER
, di
, OPTIONAL
);
1933 make_generic ("index", GFC_ISYM_INDEX
, GFC_STD_F77
);
1935 add_sym_2 ("int", GFC_ISYM_INT
, CLASS_ELEMENTAL
, ACTUAL_NO
, BT_INTEGER
, di
, GFC_STD_F77
,
1936 gfc_check_int
, gfc_simplify_int
, gfc_resolve_int
,
1937 a
, BT_REAL
, dr
, REQUIRED
, kind
, BT_INTEGER
, di
, OPTIONAL
);
1939 add_sym_1 ("ifix", GFC_ISYM_INT
, CLASS_ELEMENTAL
, ACTUAL_NO
, BT_INTEGER
, di
, GFC_STD_F77
,
1940 NULL
, gfc_simplify_ifix
, NULL
,
1941 a
, BT_REAL
, dr
, REQUIRED
);
1943 add_sym_1 ("idint", GFC_ISYM_INT
, CLASS_ELEMENTAL
, ACTUAL_NO
, BT_INTEGER
, di
, GFC_STD_F77
,
1944 NULL
, gfc_simplify_idint
, NULL
,
1945 a
, BT_REAL
, dd
, REQUIRED
);
1947 make_generic ("int", GFC_ISYM_INT
, GFC_STD_F77
);
1949 add_sym_1 ("int2", GFC_ISYM_INT2
, CLASS_ELEMENTAL
, ACTUAL_NO
, BT_INTEGER
, di
, GFC_STD_GNU
,
1950 gfc_check_intconv
, gfc_simplify_int2
, gfc_resolve_int2
,
1951 a
, BT_REAL
, dr
, REQUIRED
);
1953 make_alias ("short", GFC_STD_GNU
);
1955 make_generic ("int2", GFC_ISYM_INT2
, GFC_STD_GNU
);
1957 add_sym_1 ("int8", GFC_ISYM_INT8
, CLASS_ELEMENTAL
, ACTUAL_NO
, BT_INTEGER
, di
, GFC_STD_GNU
,
1958 gfc_check_intconv
, gfc_simplify_int8
, gfc_resolve_int8
,
1959 a
, BT_REAL
, dr
, REQUIRED
);
1961 make_generic ("int8", GFC_ISYM_INT8
, GFC_STD_GNU
);
1963 add_sym_1 ("long", GFC_ISYM_LONG
, CLASS_ELEMENTAL
, ACTUAL_NO
, BT_INTEGER
, di
, GFC_STD_GNU
,
1964 gfc_check_intconv
, gfc_simplify_long
, gfc_resolve_long
,
1965 a
, BT_REAL
, dr
, REQUIRED
);
1967 make_generic ("long", GFC_ISYM_LONG
, GFC_STD_GNU
);
1969 add_sym_2 ("ior", GFC_ISYM_IOR
, CLASS_ELEMENTAL
, ACTUAL_NO
, BT_INTEGER
, di
, GFC_STD_F95
,
1970 gfc_check_ior
, gfc_simplify_ior
, gfc_resolve_ior
,
1971 i
, BT_INTEGER
, di
, REQUIRED
, j
, BT_INTEGER
, di
, REQUIRED
);
1973 make_generic ("ior", GFC_ISYM_IOR
, GFC_STD_F95
);
1975 add_sym_2 ("or", GFC_ISYM_OR
, CLASS_IMPURE
, ACTUAL_NO
, BT_LOGICAL
,
1976 dl
, GFC_STD_GNU
, gfc_check_and
, gfc_simplify_or
, gfc_resolve_or
,
1977 i
, BT_UNKNOWN
, 0, REQUIRED
, j
, BT_UNKNOWN
, 0, REQUIRED
);
1979 make_generic ("or", GFC_ISYM_OR
, GFC_STD_GNU
);
1981 add_sym_3red ("iparity", GFC_ISYM_IPARITY
, CLASS_TRANSFORMATIONAL
, ACTUAL_NO
, BT_REAL
, dr
, GFC_STD_F2008
,
1982 gfc_check_transf_bit_intrins
, gfc_simplify_iparity
, gfc_resolve_iparity
,
1983 ar
, BT_REAL
, dr
, REQUIRED
, dm
, BT_INTEGER
, ii
, OPTIONAL
,
1984 msk
, BT_LOGICAL
, dl
, OPTIONAL
);
1986 make_generic ("iparity", GFC_ISYM_IPARITY
, GFC_STD_F2008
);
1988 /* The following function is for G77 compatibility. */
1989 add_sym_1 ("irand", GFC_ISYM_IRAND
, CLASS_IMPURE
, ACTUAL_NO
, BT_INTEGER
,
1990 4, GFC_STD_GNU
, gfc_check_irand
, NULL
, NULL
,
1991 i
, BT_INTEGER
, 4, OPTIONAL
);
1993 make_generic ("irand", GFC_ISYM_IRAND
, GFC_STD_GNU
);
1995 add_sym_1 ("isatty", GFC_ISYM_ISATTY
, CLASS_IMPURE
, ACTUAL_NO
, BT_LOGICAL
,
1996 dl
, GFC_STD_GNU
, gfc_check_isatty
, NULL
, gfc_resolve_isatty
,
1997 ut
, BT_INTEGER
, di
, REQUIRED
);
1999 make_generic ("isatty", GFC_ISYM_ISATTY
, GFC_STD_GNU
);
2001 add_sym_1 ("is_iostat_end", GFC_ISYM_IS_IOSTAT_END
,
2002 CLASS_ELEMENTAL
, ACTUAL_NO
, BT_LOGICAL
, dl
, GFC_STD_F2003
,
2003 gfc_check_i
, gfc_simplify_is_iostat_end
, NULL
,
2004 i
, BT_INTEGER
, 0, REQUIRED
);
2006 make_generic ("is_iostat_end", GFC_ISYM_IS_IOSTAT_END
, GFC_STD_F2003
);
2008 add_sym_1 ("is_iostat_eor", GFC_ISYM_IS_IOSTAT_EOR
,
2009 CLASS_ELEMENTAL
, ACTUAL_NO
, BT_LOGICAL
, dl
, GFC_STD_F2003
,
2010 gfc_check_i
, gfc_simplify_is_iostat_eor
, NULL
,
2011 i
, BT_INTEGER
, 0, REQUIRED
);
2013 make_generic ("is_iostat_eor", GFC_ISYM_IS_IOSTAT_EOR
, GFC_STD_F2003
);
2015 add_sym_1 ("isnan", GFC_ISYM_ISNAN
, CLASS_ELEMENTAL
, ACTUAL_NO
,
2016 BT_LOGICAL
, dl
, GFC_STD_GNU
,
2017 gfc_check_isnan
, gfc_simplify_isnan
, NULL
,
2018 x
, BT_REAL
, 0, REQUIRED
);
2020 make_generic ("isnan", GFC_ISYM_ISNAN
, GFC_STD_GNU
);
2022 add_sym_2 ("rshift", GFC_ISYM_RSHIFT
, CLASS_ELEMENTAL
, ACTUAL_NO
,
2023 BT_INTEGER
, di
, GFC_STD_GNU
,
2024 gfc_check_ishft
, gfc_simplify_rshift
, gfc_resolve_rshift
,
2025 i
, BT_INTEGER
, di
, REQUIRED
, sh
, BT_INTEGER
, di
, REQUIRED
);
2027 make_generic ("rshift", GFC_ISYM_RSHIFT
, GFC_STD_GNU
);
2029 add_sym_2 ("lshift", GFC_ISYM_LSHIFT
, CLASS_ELEMENTAL
, ACTUAL_NO
,
2030 BT_INTEGER
, di
, GFC_STD_GNU
,
2031 gfc_check_ishft
, gfc_simplify_lshift
, gfc_resolve_lshift
,
2032 i
, BT_INTEGER
, di
, REQUIRED
, sh
, BT_INTEGER
, di
, REQUIRED
);
2034 make_generic ("lshift", GFC_ISYM_LSHIFT
, GFC_STD_GNU
);
2036 add_sym_2 ("ishft", GFC_ISYM_ISHFT
, CLASS_ELEMENTAL
, ACTUAL_NO
, BT_INTEGER
, di
, GFC_STD_F95
,
2037 gfc_check_ishft
, gfc_simplify_ishft
, gfc_resolve_ishft
,
2038 i
, BT_INTEGER
, di
, REQUIRED
, sh
, BT_INTEGER
, di
, REQUIRED
);
2040 make_generic ("ishft", GFC_ISYM_ISHFT
, GFC_STD_F95
);
2042 add_sym_3 ("ishftc", GFC_ISYM_ISHFTC
, CLASS_ELEMENTAL
, ACTUAL_NO
, BT_INTEGER
, di
, GFC_STD_F95
,
2043 gfc_check_ishftc
, gfc_simplify_ishftc
, gfc_resolve_ishftc
,
2044 i
, BT_INTEGER
, di
, REQUIRED
, sh
, BT_INTEGER
, di
, REQUIRED
,
2045 sz
, BT_INTEGER
, di
, OPTIONAL
);
2047 make_generic ("ishftc", GFC_ISYM_ISHFTC
, GFC_STD_F95
);
2049 add_sym_2 ("kill", GFC_ISYM_KILL
, CLASS_IMPURE
, ACTUAL_NO
, BT_INTEGER
,
2050 di
, GFC_STD_GNU
, gfc_check_kill
, NULL
, gfc_resolve_kill
,
2051 a
, BT_INTEGER
, di
, REQUIRED
, b
, BT_INTEGER
, di
, REQUIRED
);
2053 make_generic ("kill", GFC_ISYM_KILL
, GFC_STD_GNU
);
2055 add_sym_1 ("kind", GFC_ISYM_KIND
, CLASS_INQUIRY
, ACTUAL_NO
, BT_INTEGER
, di
, GFC_STD_F95
,
2056 gfc_check_kind
, gfc_simplify_kind
, NULL
,
2057 x
, BT_REAL
, dr
, REQUIRED
);
2059 make_generic ("kind", GFC_ISYM_KIND
, GFC_STD_F95
);
2061 add_sym_3 ("lbound", GFC_ISYM_LBOUND
, CLASS_INQUIRY
, ACTUAL_NO
,
2062 BT_INTEGER
, di
, GFC_STD_F95
,
2063 gfc_check_lbound
, gfc_simplify_lbound
, gfc_resolve_lbound
,
2064 ar
, BT_REAL
, dr
, REQUIRED
, dm
, BT_INTEGER
, di
, OPTIONAL
,
2065 kind
, BT_INTEGER
, di
, OPTIONAL
);
2067 make_generic ("lbound", GFC_ISYM_LBOUND
, GFC_STD_F95
);
2069 add_sym_3 ("lcobound", GFC_ISYM_LCOBOUND
, CLASS_INQUIRY
, ACTUAL_NO
,
2070 BT_INTEGER
, di
, GFC_STD_F2008
,
2071 gfc_check_lcobound
, gfc_simplify_lcobound
, gfc_resolve_lcobound
,
2072 ca
, BT_REAL
, dr
, REQUIRED
, dm
, BT_INTEGER
, ii
, OPTIONAL
,
2073 kind
, BT_INTEGER
, di
, OPTIONAL
);
2075 make_generic ("lcobound", GFC_ISYM_LCOBOUND
, GFC_STD_F2008
);
2077 add_sym_1 ("leadz", GFC_ISYM_LEADZ
, CLASS_ELEMENTAL
, ACTUAL_NO
,
2078 BT_INTEGER
, di
, GFC_STD_F2008
,
2079 gfc_check_i
, gfc_simplify_leadz
, NULL
,
2080 i
, BT_INTEGER
, di
, REQUIRED
);
2082 make_generic ("leadz", GFC_ISYM_LEADZ
, GFC_STD_F2008
);
2084 add_sym_2 ("len", GFC_ISYM_LEN
, CLASS_INQUIRY
, ACTUAL_YES
,
2085 BT_INTEGER
, di
, GFC_STD_F77
,
2086 gfc_check_len_lentrim
, gfc_simplify_len
, gfc_resolve_len
,
2087 stg
, BT_CHARACTER
, dc
, REQUIRED
, kind
, BT_INTEGER
, di
, OPTIONAL
);
2089 make_generic ("len", GFC_ISYM_LEN
, GFC_STD_F77
);
2091 add_sym_2 ("len_trim", GFC_ISYM_LEN_TRIM
, CLASS_ELEMENTAL
, ACTUAL_NO
,
2092 BT_INTEGER
, di
, GFC_STD_F95
,
2093 gfc_check_len_lentrim
, gfc_simplify_len_trim
, gfc_resolve_len_trim
,
2094 stg
, BT_CHARACTER
, dc
, REQUIRED
, kind
, BT_INTEGER
, di
, OPTIONAL
);
2096 make_alias ("lnblnk", GFC_STD_GNU
);
2098 make_generic ("len_trim", GFC_ISYM_LEN_TRIM
, GFC_STD_F95
);
2100 add_sym_1 ("lgamma", GFC_ISYM_LGAMMA
, CLASS_ELEMENTAL
, ACTUAL_NO
, BT_REAL
,
2102 gfc_check_fn_r
, gfc_simplify_lgamma
, gfc_resolve_lgamma
,
2103 x
, BT_REAL
, dr
, REQUIRED
);
2105 make_alias ("log_gamma", GFC_STD_F2008
);
2107 add_sym_1 ("algama", GFC_ISYM_LGAMMA
, CLASS_ELEMENTAL
, ACTUAL_NO
, BT_REAL
, dr
, GFC_STD_GNU
,
2108 gfc_check_fn_r
, gfc_simplify_lgamma
, gfc_resolve_lgamma
,
2109 x
, BT_REAL
, dr
, REQUIRED
);
2111 add_sym_1 ("dlgama", GFC_ISYM_LGAMMA
, CLASS_ELEMENTAL
, ACTUAL_NO
, BT_REAL
, dr
, GFC_STD_GNU
,
2112 gfc_check_fn_d
, gfc_simplify_lgamma
, gfc_resolve_lgamma
,
2113 x
, BT_REAL
, dr
, REQUIRED
);
2115 make_generic ("log_gamma", GFC_ISYM_LGAMMA
, GFC_STD_F2008
);
2118 add_sym_2 ("lge", GFC_ISYM_LGE
, CLASS_ELEMENTAL
, ACTUAL_NO
, BT_LOGICAL
, dl
,
2119 GFC_STD_F77
, gfc_check_lge_lgt_lle_llt
, gfc_simplify_lge
, NULL
,
2120 sta
, BT_CHARACTER
, dc
, REQUIRED
, stb
, BT_CHARACTER
, dc
, REQUIRED
);
2122 make_generic ("lge", GFC_ISYM_LGE
, GFC_STD_F77
);
2124 add_sym_2 ("lgt", GFC_ISYM_LGT
, CLASS_ELEMENTAL
, ACTUAL_NO
, BT_LOGICAL
, dl
,
2125 GFC_STD_F77
, gfc_check_lge_lgt_lle_llt
, gfc_simplify_lgt
, NULL
,
2126 sta
, BT_CHARACTER
, dc
, REQUIRED
, stb
, BT_CHARACTER
, dc
, REQUIRED
);
2128 make_generic ("lgt", GFC_ISYM_LGT
, GFC_STD_F77
);
2130 add_sym_2 ("lle",GFC_ISYM_LLE
, CLASS_ELEMENTAL
, ACTUAL_NO
, BT_LOGICAL
, dl
,
2131 GFC_STD_F77
, gfc_check_lge_lgt_lle_llt
, gfc_simplify_lle
, NULL
,
2132 sta
, BT_CHARACTER
, dc
, REQUIRED
, stb
, BT_CHARACTER
, dc
, REQUIRED
);
2134 make_generic ("lle", GFC_ISYM_LLE
, GFC_STD_F77
);
2136 add_sym_2 ("llt", GFC_ISYM_LLT
, CLASS_ELEMENTAL
, ACTUAL_NO
, BT_LOGICAL
, dl
,
2137 GFC_STD_F77
, gfc_check_lge_lgt_lle_llt
, gfc_simplify_llt
, NULL
,
2138 sta
, BT_CHARACTER
, dc
, REQUIRED
, stb
, BT_CHARACTER
, dc
, REQUIRED
);
2140 make_generic ("llt", GFC_ISYM_LLT
, GFC_STD_F77
);
2142 add_sym_2 ("link", GFC_ISYM_LINK
, CLASS_IMPURE
, ACTUAL_NO
, BT_INTEGER
, di
,
2143 GFC_STD_GNU
, gfc_check_link
, NULL
, gfc_resolve_link
,
2144 p1
, BT_CHARACTER
, dc
, REQUIRED
, p2
, BT_CHARACTER
, dc
, REQUIRED
);
2146 make_generic ("link", GFC_ISYM_LINK
, GFC_STD_GNU
);
2148 add_sym_1 ("log", GFC_ISYM_LOG
, CLASS_ELEMENTAL
, ACTUAL_NO
, BT_REAL
, dr
, GFC_STD_F77
,
2149 gfc_check_fn_rc
, gfc_simplify_log
, gfc_resolve_log
,
2150 x
, BT_REAL
, dr
, REQUIRED
);
2152 add_sym_1 ("alog", GFC_ISYM_LOG
, CLASS_ELEMENTAL
, ACTUAL_YES
, BT_REAL
, dr
, GFC_STD_F77
,
2153 NULL
, gfc_simplify_log
, gfc_resolve_log
,
2154 x
, BT_REAL
, dr
, REQUIRED
);
2156 add_sym_1 ("dlog", GFC_ISYM_LOG
, CLASS_ELEMENTAL
, ACTUAL_YES
, BT_REAL
, dd
, GFC_STD_F77
,
2157 gfc_check_fn_d
, gfc_simplify_log
, gfc_resolve_log
,
2158 x
, BT_REAL
, dd
, REQUIRED
);
2160 add_sym_1 ("clog", GFC_ISYM_LOG
, CLASS_ELEMENTAL
, ACTUAL_YES
, BT_COMPLEX
, dz
, GFC_STD_F77
,
2161 NULL
, gfc_simplify_log
, gfc_resolve_log
,
2162 x
, BT_COMPLEX
, dz
, REQUIRED
);
2164 add_sym_1 ("zlog", GFC_ISYM_LOG
, CLASS_ELEMENTAL
, ACTUAL_YES
, BT_COMPLEX
, dd
, GFC_STD_GNU
,
2165 NULL
, gfc_simplify_log
, gfc_resolve_log
,
2166 x
, BT_COMPLEX
, dd
, REQUIRED
);
2168 make_alias ("cdlog", GFC_STD_GNU
);
2170 make_generic ("log", GFC_ISYM_LOG
, GFC_STD_F77
);
2172 add_sym_1 ("log10", GFC_ISYM_LOG10
, CLASS_ELEMENTAL
, ACTUAL_NO
, BT_REAL
, dr
, GFC_STD_F77
,
2173 gfc_check_fn_r
, gfc_simplify_log10
, gfc_resolve_log10
,
2174 x
, BT_REAL
, dr
, REQUIRED
);
2176 add_sym_1 ("alog10", GFC_ISYM_LOG10
, CLASS_ELEMENTAL
, ACTUAL_YES
, BT_REAL
, dr
, GFC_STD_F77
,
2177 NULL
, gfc_simplify_log10
, gfc_resolve_log10
,
2178 x
, BT_REAL
, dr
, REQUIRED
);
2180 add_sym_1 ("dlog10", GFC_ISYM_LOG10
, CLASS_ELEMENTAL
, ACTUAL_YES
, BT_REAL
, dd
, GFC_STD_F77
,
2181 gfc_check_fn_d
, gfc_simplify_log10
, gfc_resolve_log10
,
2182 x
, BT_REAL
, dd
, REQUIRED
);
2184 make_generic ("log10", GFC_ISYM_LOG10
, GFC_STD_F77
);
2186 add_sym_2 ("logical", GFC_ISYM_LOGICAL
, CLASS_ELEMENTAL
, ACTUAL_NO
, BT_LOGICAL
, dl
, GFC_STD_F95
,
2187 gfc_check_logical
, gfc_simplify_logical
, gfc_resolve_logical
,
2188 l
, BT_LOGICAL
, dl
, REQUIRED
, kind
, BT_INTEGER
, di
, OPTIONAL
);
2190 make_generic ("logical", GFC_ISYM_LOGICAL
, GFC_STD_F95
);
2192 add_sym_2_intent ("lstat", GFC_ISYM_LSTAT
, CLASS_IMPURE
, ACTUAL_NO
,
2193 BT_INTEGER
, di
, GFC_STD_GNU
,
2194 gfc_check_stat
, NULL
, gfc_resolve_lstat
,
2195 nm
, BT_CHARACTER
, dc
, REQUIRED
, INTENT_IN
,
2196 vl
, BT_INTEGER
, di
, REQUIRED
, INTENT_OUT
);
2198 make_generic ("lstat", GFC_ISYM_LSTAT
, GFC_STD_GNU
);
2200 add_sym_1 ("malloc", GFC_ISYM_MALLOC
, CLASS_IMPURE
, ACTUAL_NO
, BT_INTEGER
, ii
,
2201 GFC_STD_GNU
, gfc_check_malloc
, NULL
, gfc_resolve_malloc
,
2202 sz
, BT_INTEGER
, di
, REQUIRED
);
2204 make_generic ("malloc", GFC_ISYM_MALLOC
, GFC_STD_GNU
);
2206 add_sym_2 ("maskl", GFC_ISYM_MASKL
, CLASS_ELEMENTAL
, ACTUAL_NO
,
2207 BT_INTEGER
, di
, GFC_STD_F2008
,
2208 gfc_check_mask
, gfc_simplify_maskl
, gfc_resolve_mask
,
2209 i
, BT_INTEGER
, di
, REQUIRED
,
2210 kind
, BT_INTEGER
, di
, OPTIONAL
);
2212 make_generic ("maskl", GFC_ISYM_MASKL
, GFC_STD_F2008
);
2214 add_sym_2 ("maskr", GFC_ISYM_MASKR
, CLASS_ELEMENTAL
, ACTUAL_NO
,
2215 BT_INTEGER
, di
, GFC_STD_F2008
,
2216 gfc_check_mask
, gfc_simplify_maskr
, gfc_resolve_mask
,
2217 i
, BT_INTEGER
, di
, REQUIRED
,
2218 kind
, BT_INTEGER
, di
, OPTIONAL
);
2220 make_generic ("maskr", GFC_ISYM_MASKR
, GFC_STD_F2008
);
2222 add_sym_2 ("matmul", GFC_ISYM_MATMUL
, CLASS_TRANSFORMATIONAL
, ACTUAL_NO
, BT_REAL
, dr
, GFC_STD_F95
,
2223 gfc_check_matmul
, gfc_simplify_matmul
, gfc_resolve_matmul
,
2224 ma
, BT_REAL
, dr
, REQUIRED
, mb
, BT_REAL
, dr
, REQUIRED
);
2226 make_generic ("matmul", GFC_ISYM_MATMUL
, GFC_STD_F95
);
2228 /* Note: amax0 is equivalent to real(max), max1 is equivalent to
2229 int(max). The max function must take at least two arguments. */
2231 add_sym_1m ("max", GFC_ISYM_MAX
, CLASS_ELEMENTAL
, ACTUAL_NO
, BT_UNKNOWN
, 0, GFC_STD_F77
,
2232 gfc_check_min_max
, gfc_simplify_max
, gfc_resolve_max
,
2233 a1
, BT_UNKNOWN
, dr
, REQUIRED
, a2
, BT_UNKNOWN
, dr
, REQUIRED
);
2235 add_sym_1m ("max0", GFC_ISYM_MAX
, CLASS_ELEMENTAL
, ACTUAL_NO
, BT_INTEGER
, di
, GFC_STD_F77
,
2236 gfc_check_min_max_integer
, gfc_simplify_max
, NULL
,
2237 a1
, BT_INTEGER
, di
, REQUIRED
, a2
, BT_INTEGER
, di
, REQUIRED
);
2239 add_sym_1m ("amax0", GFC_ISYM_MAX
, CLASS_ELEMENTAL
, ACTUAL_NO
, BT_REAL
, dr
, GFC_STD_F77
,
2240 gfc_check_min_max_integer
, gfc_simplify_max
, NULL
,
2241 a1
, BT_INTEGER
, di
, REQUIRED
, a2
, BT_INTEGER
, di
, REQUIRED
);
2243 add_sym_1m ("amax1", GFC_ISYM_MAX
, CLASS_ELEMENTAL
, ACTUAL_NO
, BT_REAL
, dr
, GFC_STD_F77
,
2244 gfc_check_min_max_real
, gfc_simplify_max
, NULL
,
2245 a1
, BT_REAL
, dr
, REQUIRED
, a2
, BT_REAL
, dr
, REQUIRED
);
2247 add_sym_1m ("max1", GFC_ISYM_MAX
, CLASS_ELEMENTAL
, ACTUAL_NO
, BT_INTEGER
, di
, GFC_STD_F77
,
2248 gfc_check_min_max_real
, gfc_simplify_max
, NULL
,
2249 a1
, BT_REAL
, dr
, REQUIRED
, a2
, BT_REAL
, dr
, REQUIRED
);
2251 add_sym_1m ("dmax1", GFC_ISYM_MAX
, CLASS_ELEMENTAL
, ACTUAL_NO
, BT_REAL
, dd
, GFC_STD_F77
,
2252 gfc_check_min_max_double
, gfc_simplify_max
, NULL
,
2253 a1
, BT_REAL
, dd
, REQUIRED
, a2
, BT_REAL
, dd
, REQUIRED
);
2255 make_generic ("max", GFC_ISYM_MAX
, GFC_STD_F77
);
2257 add_sym_1 ("maxexponent", GFC_ISYM_MAXEXPONENT
, CLASS_INQUIRY
, ACTUAL_NO
, BT_INTEGER
, di
,
2258 GFC_STD_F95
, gfc_check_x
, gfc_simplify_maxexponent
, NULL
,
2259 x
, BT_UNKNOWN
, dr
, REQUIRED
);
2261 make_generic ("maxexponent", GFC_ISYM_MAXEXPONENT
, GFC_STD_F95
);
2263 add_sym_3ml ("maxloc", GFC_ISYM_MAXLOC
, CLASS_TRANSFORMATIONAL
, ACTUAL_NO
, BT_INTEGER
, di
, GFC_STD_F95
,
2264 gfc_check_minloc_maxloc
, NULL
, gfc_resolve_maxloc
,
2265 ar
, BT_REAL
, dr
, REQUIRED
, dm
, BT_INTEGER
, ii
, OPTIONAL
,
2266 msk
, BT_LOGICAL
, dl
, OPTIONAL
);
2268 make_generic ("maxloc", GFC_ISYM_MAXLOC
, GFC_STD_F95
);
2270 add_sym_3red ("maxval", GFC_ISYM_MAXVAL
, CLASS_TRANSFORMATIONAL
, ACTUAL_NO
, BT_REAL
, dr
, GFC_STD_F95
,
2271 gfc_check_minval_maxval
, gfc_simplify_maxval
, gfc_resolve_maxval
,
2272 ar
, BT_REAL
, dr
, REQUIRED
, dm
, BT_INTEGER
, ii
, OPTIONAL
,
2273 msk
, BT_LOGICAL
, dl
, OPTIONAL
);
2275 make_generic ("maxval", GFC_ISYM_MAXVAL
, GFC_STD_F95
);
2277 add_sym_0 ("mclock", GFC_ISYM_MCLOCK
, CLASS_IMPURE
, ACTUAL_NO
, BT_INTEGER
, di
,
2278 GFC_STD_GNU
, NULL
, NULL
, gfc_resolve_mclock
);
2280 make_generic ("mclock", GFC_ISYM_MCLOCK
, GFC_STD_GNU
);
2282 add_sym_0 ("mclock8", GFC_ISYM_MCLOCK8
, CLASS_IMPURE
, ACTUAL_NO
, BT_INTEGER
,
2283 di
, GFC_STD_GNU
, NULL
, NULL
, gfc_resolve_mclock8
);
2285 make_generic ("mclock8", GFC_ISYM_MCLOCK8
, GFC_STD_GNU
);
2287 add_sym_3 ("merge", GFC_ISYM_MERGE
, CLASS_ELEMENTAL
, ACTUAL_NO
, BT_REAL
, dr
, GFC_STD_F95
,
2288 gfc_check_merge
, gfc_simplify_merge
, gfc_resolve_merge
,
2289 ts
, BT_REAL
, dr
, REQUIRED
, fs
, BT_REAL
, dr
, REQUIRED
,
2290 msk
, BT_LOGICAL
, dl
, REQUIRED
);
2292 make_generic ("merge", GFC_ISYM_MERGE
, GFC_STD_F95
);
2294 add_sym_3 ("merge_bits", GFC_ISYM_MERGE_BITS
, CLASS_ELEMENTAL
, ACTUAL_NO
,
2295 BT_INTEGER
, di
, GFC_STD_F2008
,
2296 gfc_check_merge_bits
, gfc_simplify_merge_bits
,
2297 gfc_resolve_merge_bits
,
2298 i
, BT_INTEGER
, di
, REQUIRED
,
2299 j
, BT_INTEGER
, di
, REQUIRED
,
2300 msk
, BT_INTEGER
, di
, REQUIRED
);
2302 make_generic ("merge_bits", GFC_ISYM_MERGE_BITS
, GFC_STD_F2008
);
2304 /* Note: amin0 is equivalent to real(min), min1 is equivalent to
2307 add_sym_1m ("min", GFC_ISYM_MIN
, CLASS_ELEMENTAL
, ACTUAL_NO
, BT_UNKNOWN
, 0, GFC_STD_F77
,
2308 gfc_check_min_max
, gfc_simplify_min
, gfc_resolve_min
,
2309 a1
, BT_REAL
, dr
, REQUIRED
, a2
, BT_REAL
, dr
, REQUIRED
);
2311 add_sym_1m ("min0", GFC_ISYM_MIN
, CLASS_ELEMENTAL
, ACTUAL_NO
, BT_INTEGER
, di
, GFC_STD_F77
,
2312 gfc_check_min_max_integer
, gfc_simplify_min
, NULL
,
2313 a1
, BT_INTEGER
, di
, REQUIRED
, a2
, BT_INTEGER
, di
, REQUIRED
);
2315 add_sym_1m ("amin0", GFC_ISYM_MIN
, CLASS_ELEMENTAL
, ACTUAL_NO
, BT_REAL
, dr
, GFC_STD_F77
,
2316 gfc_check_min_max_integer
, gfc_simplify_min
, NULL
,
2317 a1
, BT_INTEGER
, di
, REQUIRED
, a2
, BT_INTEGER
, di
, REQUIRED
);
2319 add_sym_1m ("amin1", GFC_ISYM_MIN
, CLASS_ELEMENTAL
, ACTUAL_NO
, BT_REAL
, dr
, GFC_STD_F77
,
2320 gfc_check_min_max_real
, gfc_simplify_min
, NULL
,
2321 a1
, BT_REAL
, dr
, REQUIRED
, a2
, BT_REAL
, dr
, REQUIRED
);
2323 add_sym_1m ("min1", GFC_ISYM_MIN
, CLASS_ELEMENTAL
, ACTUAL_NO
, BT_INTEGER
, di
, GFC_STD_F77
,
2324 gfc_check_min_max_real
, gfc_simplify_min
, NULL
,
2325 a1
, BT_REAL
, dr
, REQUIRED
, a2
, BT_REAL
, dr
, REQUIRED
);
2327 add_sym_1m ("dmin1", GFC_ISYM_MIN
, CLASS_ELEMENTAL
, ACTUAL_NO
, BT_REAL
, dd
, GFC_STD_F77
,
2328 gfc_check_min_max_double
, gfc_simplify_min
, NULL
,
2329 a1
, BT_REAL
, dd
, REQUIRED
, a2
, BT_REAL
, dd
, REQUIRED
);
2331 make_generic ("min", GFC_ISYM_MIN
, GFC_STD_F77
);
2333 add_sym_1 ("minexponent", GFC_ISYM_MINEXPONENT
, CLASS_INQUIRY
, ACTUAL_NO
, BT_INTEGER
, di
,
2334 GFC_STD_F95
, gfc_check_x
, gfc_simplify_minexponent
, NULL
,
2335 x
, BT_UNKNOWN
, dr
, REQUIRED
);
2337 make_generic ("minexponent", GFC_ISYM_MINEXPONENT
, GFC_STD_F95
);
2339 add_sym_3ml ("minloc", GFC_ISYM_MINLOC
, CLASS_TRANSFORMATIONAL
, ACTUAL_NO
, BT_INTEGER
, di
, GFC_STD_F95
,
2340 gfc_check_minloc_maxloc
, NULL
, gfc_resolve_minloc
,
2341 ar
, BT_REAL
, dr
, REQUIRED
, dm
, BT_INTEGER
, ii
, OPTIONAL
,
2342 msk
, BT_LOGICAL
, dl
, OPTIONAL
);
2344 make_generic ("minloc", GFC_ISYM_MINLOC
, GFC_STD_F95
);
2346 add_sym_3red ("minval", GFC_ISYM_MINVAL
, CLASS_TRANSFORMATIONAL
, ACTUAL_NO
, BT_REAL
, dr
, GFC_STD_F95
,
2347 gfc_check_minval_maxval
, gfc_simplify_minval
, gfc_resolve_minval
,
2348 ar
, BT_REAL
, dr
, REQUIRED
, dm
, BT_INTEGER
, ii
, OPTIONAL
,
2349 msk
, BT_LOGICAL
, dl
, OPTIONAL
);
2351 make_generic ("minval", GFC_ISYM_MINVAL
, GFC_STD_F95
);
2353 add_sym_2 ("mod", GFC_ISYM_MOD
, CLASS_ELEMENTAL
, ACTUAL_YES
, BT_INTEGER
, di
, GFC_STD_F77
,
2354 gfc_check_a_p
, gfc_simplify_mod
, gfc_resolve_mod
,
2355 a
, BT_INTEGER
, di
, REQUIRED
, p
, BT_INTEGER
, di
, REQUIRED
);
2357 add_sym_2 ("amod", GFC_ISYM_MOD
, CLASS_ELEMENTAL
, ACTUAL_YES
, BT_REAL
, dr
, GFC_STD_F77
,
2358 NULL
, gfc_simplify_mod
, gfc_resolve_mod
,
2359 a
, BT_REAL
, dr
, REQUIRED
, p
, BT_REAL
, dr
, REQUIRED
);
2361 add_sym_2 ("dmod", GFC_ISYM_MOD
, CLASS_ELEMENTAL
, ACTUAL_YES
, BT_REAL
, dd
, GFC_STD_F77
,
2362 gfc_check_x_yd
, gfc_simplify_mod
, gfc_resolve_mod
,
2363 a
, BT_REAL
, dd
, REQUIRED
, p
, BT_REAL
, dd
, REQUIRED
);
2365 make_generic ("mod", GFC_ISYM_MOD
, GFC_STD_F77
);
2367 add_sym_2 ("modulo", GFC_ISYM_MODULO
, CLASS_ELEMENTAL
, ACTUAL_NO
, BT_REAL
, di
, GFC_STD_F95
,
2368 gfc_check_a_p
, gfc_simplify_modulo
, gfc_resolve_modulo
,
2369 a
, BT_REAL
, di
, REQUIRED
, p
, BT_REAL
, di
, REQUIRED
);
2371 make_generic ("modulo", GFC_ISYM_MODULO
, GFC_STD_F95
);
2373 add_sym_2 ("nearest", GFC_ISYM_NEAREST
, CLASS_ELEMENTAL
, ACTUAL_NO
, BT_REAL
, dr
, GFC_STD_F95
,
2374 gfc_check_nearest
, gfc_simplify_nearest
, gfc_resolve_nearest
,
2375 x
, BT_REAL
, dr
, REQUIRED
, s
, BT_REAL
, dr
, REQUIRED
);
2377 make_generic ("nearest", GFC_ISYM_NEAREST
, GFC_STD_F95
);
2379 add_sym_1 ("new_line", GFC_ISYM_NEW_LINE
, CLASS_INQUIRY
, ACTUAL_NO
, BT_CHARACTER
, dc
,
2380 GFC_STD_F2003
, gfc_check_new_line
, gfc_simplify_new_line
, NULL
,
2381 a
, BT_CHARACTER
, dc
, REQUIRED
);
2383 make_generic ("new_line", GFC_ISYM_NEW_LINE
, GFC_STD_F2003
);
2385 add_sym_2 ("nint", GFC_ISYM_NINT
, CLASS_ELEMENTAL
, ACTUAL_YES
, BT_INTEGER
, di
, GFC_STD_F77
,
2386 gfc_check_a_ikind
, gfc_simplify_nint
, gfc_resolve_nint
,
2387 a
, BT_REAL
, dr
, REQUIRED
, kind
, BT_INTEGER
, di
, OPTIONAL
);
2389 add_sym_1 ("idnint", GFC_ISYM_NINT
, CLASS_ELEMENTAL
, ACTUAL_YES
, BT_INTEGER
, di
, GFC_STD_F77
,
2390 gfc_check_idnint
, gfc_simplify_idnint
, gfc_resolve_idnint
,
2391 a
, BT_REAL
, dd
, REQUIRED
);
2393 make_generic ("nint", GFC_ISYM_NINT
, GFC_STD_F77
);
2395 add_sym_1 ("not", GFC_ISYM_NOT
, CLASS_ELEMENTAL
, ACTUAL_NO
, BT_INTEGER
, di
, GFC_STD_F95
,
2396 gfc_check_i
, gfc_simplify_not
, gfc_resolve_not
,
2397 i
, BT_INTEGER
, di
, REQUIRED
);
2399 make_generic ("not", GFC_ISYM_NOT
, GFC_STD_F95
);
2401 add_sym_2 ("norm2", GFC_ISYM_NORM2
, CLASS_TRANSFORMATIONAL
, ACTUAL_NO
, BT_REAL
, dr
,
2402 GFC_STD_F2008
, gfc_check_norm2
, gfc_simplify_norm2
, gfc_resolve_norm2
,
2403 x
, BT_REAL
, dr
, REQUIRED
,
2404 dm
, BT_INTEGER
, ii
, OPTIONAL
);
2406 make_generic ("norm2", GFC_ISYM_NORM2
, GFC_STD_F2008
);
2408 add_sym_1 ("null", GFC_ISYM_NULL
, CLASS_TRANSFORMATIONAL
, ACTUAL_NO
, BT_INTEGER
, di
, GFC_STD_F95
,
2409 gfc_check_null
, gfc_simplify_null
, NULL
,
2410 mo
, BT_INTEGER
, di
, OPTIONAL
);
2412 make_generic ("null", GFC_ISYM_NULL
, GFC_STD_F95
);
2414 add_sym_0 ("num_images", GFC_ISYM_NUM_IMAGES
, CLASS_INQUIRY
, ACTUAL_NO
,
2415 BT_INTEGER
, di
, GFC_STD_F2008
,
2416 NULL
, gfc_simplify_num_images
, NULL
);
2418 add_sym_3 ("pack", GFC_ISYM_PACK
, CLASS_TRANSFORMATIONAL
, ACTUAL_NO
, BT_REAL
, dr
, GFC_STD_F95
,
2419 gfc_check_pack
, gfc_simplify_pack
, gfc_resolve_pack
,
2420 ar
, BT_REAL
, dr
, REQUIRED
, msk
, BT_LOGICAL
, dl
, REQUIRED
,
2421 v
, BT_REAL
, dr
, OPTIONAL
);
2423 make_generic ("pack", GFC_ISYM_PACK
, GFC_STD_F95
);
2426 add_sym_2 ("parity", GFC_ISYM_PARITY
, CLASS_TRANSFORMATIONAL
, ACTUAL_NO
, BT_LOGICAL
, dl
,
2427 GFC_STD_F2008
, gfc_check_parity
, gfc_simplify_parity
, gfc_resolve_parity
,
2428 msk
, BT_LOGICAL
, dl
, REQUIRED
,
2429 dm
, BT_INTEGER
, ii
, OPTIONAL
);
2431 make_generic ("parity", GFC_ISYM_PARITY
, GFC_STD_F2008
);
2433 add_sym_1 ("popcnt", GFC_ISYM_POPCNT
, CLASS_ELEMENTAL
, ACTUAL_NO
,
2434 BT_INTEGER
, di
, GFC_STD_F2008
,
2435 gfc_check_i
, gfc_simplify_popcnt
, NULL
,
2436 i
, BT_INTEGER
, di
, REQUIRED
);
2438 make_generic ("popcnt", GFC_ISYM_POPCNT
, GFC_STD_F2008
);
2440 add_sym_1 ("poppar", GFC_ISYM_POPPAR
, CLASS_ELEMENTAL
, ACTUAL_NO
,
2441 BT_INTEGER
, di
, GFC_STD_F2008
,
2442 gfc_check_i
, gfc_simplify_poppar
, NULL
,
2443 i
, BT_INTEGER
, di
, REQUIRED
);
2445 make_generic ("poppar", GFC_ISYM_POPPAR
, GFC_STD_F2008
);
2447 add_sym_1 ("precision", GFC_ISYM_PRECISION
, CLASS_INQUIRY
, ACTUAL_NO
, BT_INTEGER
, di
, GFC_STD_F95
,
2448 gfc_check_precision
, gfc_simplify_precision
, NULL
,
2449 x
, BT_UNKNOWN
, 0, REQUIRED
);
2451 make_generic ("precision", GFC_ISYM_PRECISION
, GFC_STD_F95
);
2453 add_sym_1_intent ("present", GFC_ISYM_PRESENT
, CLASS_INQUIRY
, ACTUAL_NO
,
2454 BT_LOGICAL
, dl
, GFC_STD_F95
, gfc_check_present
, NULL
, NULL
,
2455 a
, BT_REAL
, dr
, REQUIRED
, INTENT_UNKNOWN
);
2457 make_generic ("present", GFC_ISYM_PRESENT
, GFC_STD_F95
);
2459 add_sym_3red ("product", GFC_ISYM_PRODUCT
, CLASS_TRANSFORMATIONAL
, ACTUAL_NO
, BT_REAL
, dr
, GFC_STD_F95
,
2460 gfc_check_product_sum
, gfc_simplify_product
, gfc_resolve_product
,
2461 ar
, BT_REAL
, dr
, REQUIRED
, dm
, BT_INTEGER
, ii
, OPTIONAL
,
2462 msk
, BT_LOGICAL
, dl
, OPTIONAL
);
2464 make_generic ("product", GFC_ISYM_PRODUCT
, GFC_STD_F95
);
2466 add_sym_1 ("radix", GFC_ISYM_RADIX
, CLASS_INQUIRY
, ACTUAL_NO
, BT_INTEGER
, di
, GFC_STD_F95
,
2467 gfc_check_radix
, gfc_simplify_radix
, NULL
,
2468 x
, BT_UNKNOWN
, 0, REQUIRED
);
2470 make_generic ("radix", GFC_ISYM_RADIX
, GFC_STD_F95
);
2472 /* The following function is for G77 compatibility. */
2473 add_sym_1 ("rand", GFC_ISYM_RAND
, CLASS_IMPURE
, ACTUAL_NO
, BT_REAL
,
2474 4, GFC_STD_GNU
, gfc_check_rand
, NULL
, NULL
,
2475 i
, BT_INTEGER
, 4, OPTIONAL
);
2477 /* Compatibility with HP FORTRAN 77/iX Reference. Note, rand() and ran()
2478 use slightly different shoddy multiplicative congruential PRNG. */
2479 make_alias ("ran", GFC_STD_GNU
);
2481 make_generic ("rand", GFC_ISYM_RAND
, GFC_STD_GNU
);
2483 add_sym_1 ("range", GFC_ISYM_RANGE
, CLASS_INQUIRY
, ACTUAL_NO
, BT_INTEGER
, di
, GFC_STD_F95
,
2484 gfc_check_range
, gfc_simplify_range
, NULL
,
2485 x
, BT_REAL
, dr
, REQUIRED
);
2487 make_generic ("range", GFC_ISYM_RANGE
, GFC_STD_F95
);
2489 add_sym_1 ("rank", GFC_ISYM_RANK
, CLASS_INQUIRY
, ACTUAL_NO
, BT_INTEGER
, di
,
2490 GFC_STD_F2008_TS
, gfc_check_rank
, gfc_simplify_rank
, gfc_resolve_rank
,
2491 a
, BT_REAL
, dr
, REQUIRED
);
2492 make_generic ("rank", GFC_ISYM_RANK
, GFC_STD_F2008_TS
);
2494 add_sym_2 ("real", GFC_ISYM_REAL
, CLASS_ELEMENTAL
, ACTUAL_NO
, BT_REAL
, dr
, GFC_STD_F77
,
2495 gfc_check_real
, gfc_simplify_real
, gfc_resolve_real
,
2496 a
, BT_UNKNOWN
, dr
, REQUIRED
, kind
, BT_INTEGER
, di
, OPTIONAL
);
2498 /* This provides compatibility with g77. */
2499 add_sym_1 ("realpart", GFC_ISYM_REAL
, CLASS_ELEMENTAL
, ACTUAL_NO
, BT_REAL
, dr
, GFC_STD_GNU
,
2500 gfc_check_fn_c
, gfc_simplify_realpart
, gfc_resolve_realpart
,
2501 a
, BT_UNKNOWN
, dr
, REQUIRED
);
2503 add_sym_1 ("float", GFC_ISYM_REAL
, CLASS_ELEMENTAL
, ACTUAL_NO
, BT_REAL
, dr
, GFC_STD_F77
,
2504 gfc_check_float
, gfc_simplify_float
, NULL
,
2505 a
, BT_INTEGER
, di
, REQUIRED
);
2507 add_sym_1 ("dfloat", GFC_ISYM_REAL
, CLASS_ELEMENTAL
, ACTUAL_NO
, BT_REAL
, dd
, GFC_STD_GNU
,
2508 gfc_check_float
, gfc_simplify_dble
, gfc_resolve_dble
,
2509 a
, BT_REAL
, dr
, REQUIRED
);
2511 add_sym_1 ("sngl", GFC_ISYM_REAL
, CLASS_ELEMENTAL
, ACTUAL_NO
, BT_REAL
, dr
, GFC_STD_F77
,
2512 gfc_check_sngl
, gfc_simplify_sngl
, NULL
,
2513 a
, BT_REAL
, dd
, REQUIRED
);
2515 make_generic ("real", GFC_ISYM_REAL
, GFC_STD_F77
);
2517 add_sym_2 ("rename", GFC_ISYM_RENAME
, CLASS_IMPURE
, ACTUAL_NO
, BT_INTEGER
, di
,
2518 GFC_STD_GNU
, gfc_check_rename
, NULL
, gfc_resolve_rename
,
2519 p1
, BT_CHARACTER
, dc
, REQUIRED
, p2
, BT_CHARACTER
, dc
, REQUIRED
);
2521 make_generic ("rename", GFC_ISYM_RENAME
, GFC_STD_GNU
);
2523 add_sym_2 ("repeat", GFC_ISYM_REPEAT
, CLASS_TRANSFORMATIONAL
, ACTUAL_NO
, BT_CHARACTER
, dc
, GFC_STD_F95
,
2524 gfc_check_repeat
, gfc_simplify_repeat
, gfc_resolve_repeat
,
2525 stg
, BT_CHARACTER
, dc
, REQUIRED
, ncopies
, BT_INTEGER
, di
, REQUIRED
);
2527 make_generic ("repeat", GFC_ISYM_REPEAT
, GFC_STD_F95
);
2529 add_sym_4 ("reshape", GFC_ISYM_RESHAPE
, CLASS_TRANSFORMATIONAL
, ACTUAL_NO
, BT_REAL
, dr
, GFC_STD_F95
,
2530 gfc_check_reshape
, gfc_simplify_reshape
, gfc_resolve_reshape
,
2531 src
, BT_REAL
, dr
, REQUIRED
, shp
, BT_INTEGER
, ii
, REQUIRED
,
2532 pad
, BT_REAL
, dr
, OPTIONAL
, ord
, BT_INTEGER
, ii
, OPTIONAL
);
2534 make_generic ("reshape", GFC_ISYM_RESHAPE
, GFC_STD_F95
);
2536 add_sym_1 ("rrspacing", GFC_ISYM_RRSPACING
, CLASS_ELEMENTAL
, ACTUAL_NO
, BT_REAL
, dr
, GFC_STD_F95
,
2537 gfc_check_x
, gfc_simplify_rrspacing
, gfc_resolve_rrspacing
,
2538 x
, BT_REAL
, dr
, REQUIRED
);
2540 make_generic ("rrspacing", GFC_ISYM_RRSPACING
, GFC_STD_F95
);
2542 add_sym_2 ("same_type_as", GFC_ISYM_SAME_TYPE_AS
, CLASS_INQUIRY
, ACTUAL_NO
,
2543 BT_LOGICAL
, dl
, GFC_STD_F2003
,
2544 gfc_check_same_type_as
, gfc_simplify_same_type_as
, NULL
,
2545 a
, BT_UNKNOWN
, 0, REQUIRED
,
2546 b
, BT_UNKNOWN
, 0, REQUIRED
);
2548 add_sym_2 ("scale", GFC_ISYM_SCALE
, CLASS_ELEMENTAL
, ACTUAL_NO
, BT_REAL
, dr
, GFC_STD_F95
,
2549 gfc_check_scale
, gfc_simplify_scale
, gfc_resolve_scale
,
2550 x
, BT_REAL
, dr
, REQUIRED
, i
, BT_INTEGER
, di
, REQUIRED
);
2552 make_generic ("scale", GFC_ISYM_SCALE
, GFC_STD_F95
);
2554 add_sym_4 ("scan", GFC_ISYM_SCAN
, CLASS_ELEMENTAL
, ACTUAL_NO
,
2555 BT_INTEGER
, di
, GFC_STD_F95
,
2556 gfc_check_scan
, gfc_simplify_scan
, gfc_resolve_scan
,
2557 stg
, BT_CHARACTER
, dc
, REQUIRED
, set
, BT_CHARACTER
, dc
, REQUIRED
,
2558 bck
, BT_LOGICAL
, dl
, OPTIONAL
, kind
, BT_INTEGER
, di
, OPTIONAL
);
2560 make_generic ("scan", GFC_ISYM_SCAN
, GFC_STD_F95
);
2562 /* Added for G77 compatibility garbage. */
2563 add_sym_0 ("second", GFC_ISYM_SECOND
, CLASS_IMPURE
, ACTUAL_NO
, BT_REAL
,
2564 4, GFC_STD_GNU
, NULL
, NULL
, NULL
);
2566 make_generic ("second", GFC_ISYM_SECOND
, GFC_STD_GNU
);
2568 /* Added for G77 compatibility. */
2569 add_sym_1 ("secnds", GFC_ISYM_SECNDS
, CLASS_IMPURE
, ACTUAL_NO
, BT_REAL
,
2570 dr
, GFC_STD_GNU
, gfc_check_secnds
, NULL
, gfc_resolve_secnds
,
2571 x
, BT_REAL
, dr
, REQUIRED
);
2573 make_generic ("secnds", GFC_ISYM_SECNDS
, GFC_STD_GNU
);
2575 add_sym_1 ("selected_char_kind", GFC_ISYM_SC_KIND
, CLASS_TRANSFORMATIONAL
,
2576 ACTUAL_NO
, BT_INTEGER
, di
, GFC_STD_F2003
,
2577 gfc_check_selected_char_kind
, gfc_simplify_selected_char_kind
,
2578 NULL
, nm
, BT_CHARACTER
, dc
, REQUIRED
);
2580 make_generic ("selected_char_kind", GFC_ISYM_SC_KIND
, GFC_STD_F2003
);
2582 add_sym_1 ("selected_int_kind", GFC_ISYM_SI_KIND
, CLASS_TRANSFORMATIONAL
, ACTUAL_NO
, BT_INTEGER
, di
,
2583 GFC_STD_F95
, gfc_check_selected_int_kind
,
2584 gfc_simplify_selected_int_kind
, NULL
, r
, BT_INTEGER
, di
, REQUIRED
);
2586 make_generic ("selected_int_kind", GFC_ISYM_SI_KIND
, GFC_STD_F95
);
2588 add_sym_3 ("selected_real_kind", GFC_ISYM_SR_KIND
, CLASS_TRANSFORMATIONAL
, ACTUAL_NO
, BT_INTEGER
, di
,
2589 GFC_STD_F95
, gfc_check_selected_real_kind
,
2590 gfc_simplify_selected_real_kind
, NULL
,
2591 p
, BT_INTEGER
, di
, OPTIONAL
, r
, BT_INTEGER
, di
, OPTIONAL
,
2592 "radix", BT_INTEGER
, di
, OPTIONAL
);
2594 make_generic ("selected_real_kind", GFC_ISYM_SR_KIND
, GFC_STD_F95
);
2596 add_sym_2 ("set_exponent", GFC_ISYM_SET_EXPONENT
, CLASS_ELEMENTAL
, ACTUAL_NO
, BT_REAL
, dr
, GFC_STD_F95
,
2597 gfc_check_set_exponent
, gfc_simplify_set_exponent
,
2598 gfc_resolve_set_exponent
,
2599 x
, BT_REAL
, dr
, REQUIRED
, i
, BT_INTEGER
, di
, REQUIRED
);
2601 make_generic ("set_exponent", GFC_ISYM_SET_EXPONENT
, GFC_STD_F95
);
2603 add_sym_2 ("shape", GFC_ISYM_SHAPE
, CLASS_INQUIRY
, ACTUAL_NO
, BT_INTEGER
, di
, GFC_STD_F95
,
2604 gfc_check_shape
, gfc_simplify_shape
, gfc_resolve_shape
,
2605 src
, BT_REAL
, dr
, REQUIRED
,
2606 kind
, BT_INTEGER
, di
, OPTIONAL
);
2608 make_generic ("shape", GFC_ISYM_SHAPE
, GFC_STD_F95
);
2610 add_sym_2 ("shifta", GFC_ISYM_SHIFTA
, CLASS_ELEMENTAL
, ACTUAL_NO
,
2611 BT_INTEGER
, di
, GFC_STD_F2008
,
2612 gfc_check_shift
, gfc_simplify_shifta
, gfc_resolve_shift
,
2613 i
, BT_INTEGER
, di
, REQUIRED
,
2614 sh
, BT_INTEGER
, di
, REQUIRED
);
2616 make_generic ("shifta", GFC_ISYM_SHIFTA
, GFC_STD_F2008
);
2618 add_sym_2 ("shiftl", GFC_ISYM_SHIFTL
, CLASS_ELEMENTAL
, ACTUAL_NO
,
2619 BT_INTEGER
, di
, GFC_STD_F2008
,
2620 gfc_check_shift
, gfc_simplify_shiftl
, gfc_resolve_shift
,
2621 i
, BT_INTEGER
, di
, REQUIRED
,
2622 sh
, BT_INTEGER
, di
, REQUIRED
);
2624 make_generic ("shiftl", GFC_ISYM_SHIFTL
, GFC_STD_F2008
);
2626 add_sym_2 ("shiftr", GFC_ISYM_SHIFTR
, CLASS_ELEMENTAL
, ACTUAL_NO
,
2627 BT_INTEGER
, di
, GFC_STD_F2008
,
2628 gfc_check_shift
, gfc_simplify_shiftr
, gfc_resolve_shift
,
2629 i
, BT_INTEGER
, di
, REQUIRED
,
2630 sh
, BT_INTEGER
, di
, REQUIRED
);
2632 make_generic ("shiftr", GFC_ISYM_SHIFTR
, GFC_STD_F2008
);
2634 add_sym_2 ("sign", GFC_ISYM_SIGN
, CLASS_ELEMENTAL
, ACTUAL_YES
, BT_REAL
, dr
, GFC_STD_F77
,
2635 gfc_check_sign
, gfc_simplify_sign
, gfc_resolve_sign
,
2636 a
, BT_REAL
, dr
, REQUIRED
, b
, BT_REAL
, dr
, REQUIRED
);
2638 add_sym_2 ("isign", GFC_ISYM_SIGN
, CLASS_ELEMENTAL
, ACTUAL_YES
, BT_INTEGER
, di
, GFC_STD_F77
,
2639 NULL
, gfc_simplify_sign
, gfc_resolve_sign
,
2640 a
, BT_INTEGER
, di
, REQUIRED
, b
, BT_INTEGER
, di
, REQUIRED
);
2642 add_sym_2 ("dsign", GFC_ISYM_SIGN
, CLASS_ELEMENTAL
, ACTUAL_YES
, BT_REAL
, dd
, GFC_STD_F77
,
2643 gfc_check_x_yd
, gfc_simplify_sign
, gfc_resolve_sign
,
2644 a
, BT_REAL
, dd
, REQUIRED
, b
, BT_REAL
, dd
, REQUIRED
);
2646 make_generic ("sign", GFC_ISYM_SIGN
, GFC_STD_F77
);
2648 add_sym_2 ("signal", GFC_ISYM_SIGNAL
, CLASS_IMPURE
, ACTUAL_NO
, BT_INTEGER
,
2649 di
, GFC_STD_GNU
, gfc_check_signal
, NULL
, gfc_resolve_signal
,
2650 num
, BT_INTEGER
, di
, REQUIRED
, han
, BT_VOID
, 0, REQUIRED
);
2652 make_generic ("signal", GFC_ISYM_SIGNAL
, GFC_STD_GNU
);
2654 add_sym_1 ("sin", GFC_ISYM_SIN
, CLASS_ELEMENTAL
, ACTUAL_YES
, BT_REAL
, dr
, GFC_STD_F77
,
2655 gfc_check_fn_rc
, gfc_simplify_sin
, gfc_resolve_sin
,
2656 x
, BT_REAL
, dr
, REQUIRED
);
2658 add_sym_1 ("dsin", GFC_ISYM_SIN
, CLASS_ELEMENTAL
, ACTUAL_YES
, BT_REAL
, dd
, GFC_STD_F77
,
2659 gfc_check_fn_d
, gfc_simplify_sin
, gfc_resolve_sin
,
2660 x
, BT_REAL
, dd
, REQUIRED
);
2662 add_sym_1 ("csin", GFC_ISYM_SIN
, CLASS_ELEMENTAL
, ACTUAL_YES
, BT_COMPLEX
, dz
, GFC_STD_F77
,
2663 NULL
, gfc_simplify_sin
, gfc_resolve_sin
,
2664 x
, BT_COMPLEX
, dz
, REQUIRED
);
2666 add_sym_1 ("zsin", GFC_ISYM_SIN
, CLASS_ELEMENTAL
, ACTUAL_YES
, BT_COMPLEX
, dd
, GFC_STD_GNU
,
2667 NULL
, gfc_simplify_sin
, gfc_resolve_sin
,
2668 x
, BT_COMPLEX
, dd
, REQUIRED
);
2670 make_alias ("cdsin", GFC_STD_GNU
);
2672 make_generic ("sin", GFC_ISYM_SIN
, GFC_STD_F77
);
2674 add_sym_1 ("sinh", GFC_ISYM_SINH
, CLASS_ELEMENTAL
, ACTUAL_YES
, BT_REAL
, dr
, GFC_STD_F77
,
2675 gfc_check_fn_rc2008
, gfc_simplify_sinh
, gfc_resolve_sinh
,
2676 x
, BT_REAL
, dr
, REQUIRED
);
2678 add_sym_1 ("dsinh", GFC_ISYM_SINH
,CLASS_ELEMENTAL
, ACTUAL_YES
, BT_REAL
, dd
, GFC_STD_F77
,
2679 gfc_check_fn_d
, gfc_simplify_sinh
, gfc_resolve_sinh
,
2680 x
, BT_REAL
, dd
, REQUIRED
);
2682 make_generic ("sinh", GFC_ISYM_SINH
, GFC_STD_F77
);
2684 add_sym_3 ("size", GFC_ISYM_SIZE
, CLASS_INQUIRY
, ACTUAL_NO
,
2685 BT_INTEGER
, di
, GFC_STD_F95
,
2686 gfc_check_size
, gfc_simplify_size
, gfc_resolve_size
,
2687 ar
, BT_REAL
, dr
, REQUIRED
, dm
, BT_INTEGER
, ii
, OPTIONAL
,
2688 kind
, BT_INTEGER
, di
, OPTIONAL
);
2690 make_generic ("size", GFC_ISYM_SIZE
, GFC_STD_F95
);
2692 /* Obtain the stride for a given dimensions; to be used only internally.
2693 "make_from_module" makes inaccessible for external users. */
2694 add_sym_2 (GFC_PREFIX ("stride"), GFC_ISYM_STRIDE
, CLASS_INQUIRY
, ACTUAL_NO
,
2695 BT_INTEGER
, gfc_index_integer_kind
, GFC_STD_GNU
,
2696 NULL
, NULL
, gfc_resolve_stride
,
2697 ar
, BT_REAL
, dr
, REQUIRED
, dm
, BT_INTEGER
, ii
, OPTIONAL
);
2700 add_sym_1 ("sizeof", GFC_ISYM_SIZEOF
, CLASS_IMPURE
, ACTUAL_NO
, BT_INTEGER
, ii
,
2701 GFC_STD_GNU
, gfc_check_sizeof
, gfc_simplify_sizeof
, NULL
,
2702 x
, BT_UNKNOWN
, 0, REQUIRED
);
2704 make_generic ("sizeof", GFC_ISYM_SIZEOF
, GFC_STD_GNU
);
2706 /* The following functions are part of ISO_C_BINDING. */
2707 add_sym_2 ("c_associated", GFC_ISYM_C_ASSOCIATED
, CLASS_INQUIRY
, ACTUAL_NO
,
2708 BT_LOGICAL
, dl
, GFC_STD_F2003
, gfc_check_c_associated
, NULL
, NULL
,
2709 "C_PTR_1", BT_VOID
, 0, REQUIRED
,
2710 "C_PTR_2", BT_VOID
, 0, OPTIONAL
);
2713 add_sym_1 ("c_loc", GFC_ISYM_C_LOC
, CLASS_INQUIRY
, ACTUAL_NO
,
2714 BT_VOID
, 0, GFC_STD_F2003
,
2715 gfc_check_c_loc
, NULL
, gfc_resolve_c_loc
,
2716 x
, BT_UNKNOWN
, 0, REQUIRED
);
2719 add_sym_1 ("c_funloc", GFC_ISYM_C_FUNLOC
, CLASS_INQUIRY
, ACTUAL_NO
,
2720 BT_VOID
, 0, GFC_STD_F2003
,
2721 gfc_check_c_funloc
, NULL
, gfc_resolve_c_funloc
,
2722 x
, BT_UNKNOWN
, 0, REQUIRED
);
2725 add_sym_1 ("c_sizeof", GFC_ISYM_C_SIZEOF
, CLASS_INQUIRY
, ACTUAL_NO
,
2726 BT_INTEGER
, gfc_index_integer_kind
, GFC_STD_F2008
,
2727 gfc_check_c_sizeof
, gfc_simplify_sizeof
, NULL
,
2728 x
, BT_UNKNOWN
, 0, REQUIRED
);
2731 /* COMPILER_OPTIONS and COMPILER_VERSION are part of ISO_FORTRAN_ENV. */
2732 add_sym_0 ("compiler_options", GFC_ISYM_COMPILER_OPTIONS
, CLASS_INQUIRY
,
2733 ACTUAL_NO
, BT_CHARACTER
, dc
, GFC_STD_F2008
,
2734 NULL
, gfc_simplify_compiler_options
, NULL
);
2737 add_sym_0 ("compiler_version", GFC_ISYM_COMPILER_VERSION
, CLASS_INQUIRY
,
2738 ACTUAL_NO
, BT_CHARACTER
, dc
, GFC_STD_F2008
,
2739 NULL
, gfc_simplify_compiler_version
, NULL
);
2742 add_sym_1 ("spacing", GFC_ISYM_SPACING
, CLASS_ELEMENTAL
, ACTUAL_NO
, BT_REAL
, dr
, GFC_STD_F95
,
2743 gfc_check_x
, gfc_simplify_spacing
, gfc_resolve_spacing
,
2744 x
, BT_REAL
, dr
, REQUIRED
);
2746 make_generic ("spacing", GFC_ISYM_SPACING
, GFC_STD_F95
);
2748 add_sym_3 ("spread", GFC_ISYM_SPREAD
, CLASS_TRANSFORMATIONAL
, ACTUAL_NO
, BT_REAL
, dr
, GFC_STD_F95
,
2749 gfc_check_spread
, gfc_simplify_spread
, gfc_resolve_spread
,
2750 src
, BT_REAL
, dr
, REQUIRED
, dm
, BT_INTEGER
, ii
, REQUIRED
,
2751 ncopies
, BT_INTEGER
, di
, REQUIRED
);
2753 make_generic ("spread", GFC_ISYM_SPREAD
, GFC_STD_F95
);
2755 add_sym_1 ("sqrt", GFC_ISYM_SQRT
, CLASS_ELEMENTAL
, ACTUAL_YES
, BT_REAL
, dr
, GFC_STD_F77
,
2756 gfc_check_fn_rc
, gfc_simplify_sqrt
, gfc_resolve_sqrt
,
2757 x
, BT_REAL
, dr
, REQUIRED
);
2759 add_sym_1 ("dsqrt", GFC_ISYM_SQRT
, CLASS_ELEMENTAL
, ACTUAL_YES
, BT_REAL
, dd
, GFC_STD_F77
,
2760 gfc_check_fn_d
, gfc_simplify_sqrt
, gfc_resolve_sqrt
,
2761 x
, BT_REAL
, dd
, REQUIRED
);
2763 add_sym_1 ("csqrt", GFC_ISYM_SQRT
, CLASS_ELEMENTAL
, ACTUAL_YES
, BT_COMPLEX
, dz
, GFC_STD_F77
,
2764 NULL
, gfc_simplify_sqrt
, gfc_resolve_sqrt
,
2765 x
, BT_COMPLEX
, dz
, REQUIRED
);
2767 add_sym_1 ("zsqrt", GFC_ISYM_SQRT
, CLASS_ELEMENTAL
, ACTUAL_YES
, BT_COMPLEX
, dd
, GFC_STD_GNU
,
2768 NULL
, gfc_simplify_sqrt
, gfc_resolve_sqrt
,
2769 x
, BT_COMPLEX
, dd
, REQUIRED
);
2771 make_alias ("cdsqrt", GFC_STD_GNU
);
2773 make_generic ("sqrt", GFC_ISYM_SQRT
, GFC_STD_F77
);
2775 add_sym_2_intent ("stat", GFC_ISYM_STAT
, CLASS_IMPURE
, ACTUAL_NO
,
2776 BT_INTEGER
, di
, GFC_STD_GNU
,
2777 gfc_check_stat
, NULL
, gfc_resolve_stat
,
2778 nm
, BT_CHARACTER
, dc
, REQUIRED
, INTENT_IN
,
2779 vl
, BT_INTEGER
, di
, REQUIRED
, INTENT_OUT
);
2781 make_generic ("stat", GFC_ISYM_STAT
, GFC_STD_GNU
);
2783 add_sym_2 ("storage_size", GFC_ISYM_STORAGE_SIZE
, CLASS_INQUIRY
, ACTUAL_NO
,
2784 BT_INTEGER
, di
, GFC_STD_F2008
,
2785 gfc_check_storage_size
, gfc_simplify_storage_size
,
2786 gfc_resolve_storage_size
,
2787 a
, BT_UNKNOWN
, 0, REQUIRED
,
2788 kind
, BT_INTEGER
, di
, OPTIONAL
);
2790 add_sym_3red ("sum", GFC_ISYM_SUM
, CLASS_TRANSFORMATIONAL
, ACTUAL_NO
, BT_REAL
, dr
, GFC_STD_F95
,
2791 gfc_check_product_sum
, gfc_simplify_sum
, gfc_resolve_sum
,
2792 ar
, BT_REAL
, dr
, REQUIRED
, dm
, BT_INTEGER
, ii
, OPTIONAL
,
2793 msk
, BT_LOGICAL
, dl
, OPTIONAL
);
2795 make_generic ("sum", GFC_ISYM_SUM
, GFC_STD_F95
);
2797 add_sym_2 ("symlnk", GFC_ISYM_SYMLNK
, CLASS_IMPURE
, ACTUAL_NO
, BT_INTEGER
, di
,
2798 GFC_STD_GNU
, gfc_check_symlnk
, NULL
, gfc_resolve_symlnk
,
2799 p1
, BT_CHARACTER
, dc
, REQUIRED
, p2
, BT_CHARACTER
, dc
, REQUIRED
);
2801 make_generic ("symlnk", GFC_ISYM_SYMLNK
, GFC_STD_GNU
);
2803 add_sym_1 ("system", GFC_ISYM_SYSTEM
, CLASS_IMPURE
, ACTUAL_NO
, BT_INTEGER
, di
,
2804 GFC_STD_GNU
, NULL
, NULL
, NULL
,
2805 com
, BT_CHARACTER
, dc
, REQUIRED
);
2807 make_generic ("system", GFC_ISYM_SYSTEM
, GFC_STD_GNU
);
2809 add_sym_1 ("tan", GFC_ISYM_TAN
, CLASS_ELEMENTAL
, ACTUAL_YES
, BT_REAL
, dr
, GFC_STD_F77
,
2810 gfc_check_fn_rc2008
, gfc_simplify_tan
, gfc_resolve_tan
,
2811 x
, BT_REAL
, dr
, REQUIRED
);
2813 add_sym_1 ("dtan", GFC_ISYM_TAN
, CLASS_ELEMENTAL
, ACTUAL_YES
, BT_REAL
, dd
, GFC_STD_F77
,
2814 gfc_check_fn_d
, gfc_simplify_tan
, gfc_resolve_tan
,
2815 x
, BT_REAL
, dd
, REQUIRED
);
2817 make_generic ("tan", GFC_ISYM_TAN
, GFC_STD_F77
);
2819 add_sym_1 ("tanh", GFC_ISYM_TANH
, CLASS_ELEMENTAL
, ACTUAL_YES
, BT_REAL
, dr
, GFC_STD_F77
,
2820 gfc_check_fn_rc2008
, gfc_simplify_tanh
, gfc_resolve_tanh
,
2821 x
, BT_REAL
, dr
, REQUIRED
);
2823 add_sym_1 ("dtanh", GFC_ISYM_TANH
, CLASS_ELEMENTAL
, ACTUAL_YES
, BT_REAL
, dd
, GFC_STD_F77
,
2824 gfc_check_fn_d
, gfc_simplify_tanh
, gfc_resolve_tanh
,
2825 x
, BT_REAL
, dd
, REQUIRED
);
2827 make_generic ("tanh", GFC_ISYM_TANH
, GFC_STD_F77
);
2829 add_sym_2 ("this_image", GFC_ISYM_THIS_IMAGE
, CLASS_INQUIRY
, ACTUAL_NO
, BT_INTEGER
, di
, GFC_STD_F2008
,
2830 gfc_check_this_image
, gfc_simplify_this_image
, gfc_resolve_this_image
,
2831 ca
, BT_REAL
, dr
, OPTIONAL
, dm
, BT_INTEGER
, ii
, OPTIONAL
);
2833 add_sym_0 ("time", GFC_ISYM_TIME
, CLASS_IMPURE
, ACTUAL_NO
, BT_INTEGER
,
2834 di
, GFC_STD_GNU
, NULL
, NULL
, gfc_resolve_time
);
2836 make_generic ("time", GFC_ISYM_TIME
, GFC_STD_GNU
);
2838 add_sym_0 ("time8", GFC_ISYM_TIME8
, CLASS_IMPURE
, ACTUAL_NO
, BT_INTEGER
,
2839 di
, GFC_STD_GNU
, NULL
, NULL
, gfc_resolve_time8
);
2841 make_generic ("time8", GFC_ISYM_TIME8
, GFC_STD_GNU
);
2843 add_sym_1 ("tiny", GFC_ISYM_TINY
, CLASS_INQUIRY
, ACTUAL_NO
, BT_REAL
, dr
, GFC_STD_F95
,
2844 gfc_check_x
, gfc_simplify_tiny
, NULL
,
2845 x
, BT_REAL
, dr
, REQUIRED
);
2847 make_generic ("tiny", GFC_ISYM_TINY
, GFC_STD_F95
);
2849 add_sym_1 ("trailz", GFC_ISYM_TRAILZ
, CLASS_ELEMENTAL
, ACTUAL_NO
,
2850 BT_INTEGER
, di
, GFC_STD_F2008
,
2851 gfc_check_i
, gfc_simplify_trailz
, NULL
,
2852 i
, BT_INTEGER
, di
, REQUIRED
);
2854 make_generic ("trailz", GFC_ISYM_TRAILZ
, GFC_STD_F2008
);
2856 add_sym_3 ("transfer", GFC_ISYM_TRANSFER
, CLASS_TRANSFORMATIONAL
, ACTUAL_NO
, BT_REAL
, dr
, GFC_STD_F95
,
2857 gfc_check_transfer
, gfc_simplify_transfer
, gfc_resolve_transfer
,
2858 src
, BT_REAL
, dr
, REQUIRED
, mo
, BT_REAL
, dr
, REQUIRED
,
2859 sz
, BT_INTEGER
, di
, OPTIONAL
);
2861 make_generic ("transfer", GFC_ISYM_TRANSFER
, GFC_STD_F95
);
2863 add_sym_1 ("transpose", GFC_ISYM_TRANSPOSE
, CLASS_TRANSFORMATIONAL
, ACTUAL_NO
, BT_REAL
, dr
, GFC_STD_F95
,
2864 gfc_check_transpose
, gfc_simplify_transpose
, gfc_resolve_transpose
,
2865 m
, BT_REAL
, dr
, REQUIRED
);
2867 make_generic ("transpose", GFC_ISYM_TRANSPOSE
, GFC_STD_F95
);
2869 add_sym_1 ("trim", GFC_ISYM_TRIM
, CLASS_TRANSFORMATIONAL
, ACTUAL_NO
, BT_CHARACTER
, dc
, GFC_STD_F95
,
2870 gfc_check_trim
, gfc_simplify_trim
, gfc_resolve_trim
,
2871 stg
, BT_CHARACTER
, dc
, REQUIRED
);
2873 make_generic ("trim", GFC_ISYM_TRIM
, GFC_STD_F95
);
2875 add_sym_1 ("ttynam", GFC_ISYM_TTYNAM
, CLASS_IMPURE
, ACTUAL_NO
, BT_CHARACTER
,
2876 0, GFC_STD_GNU
, gfc_check_ttynam
, NULL
, gfc_resolve_ttynam
,
2877 ut
, BT_INTEGER
, di
, REQUIRED
);
2879 make_generic ("ttynam", GFC_ISYM_TTYNAM
, GFC_STD_GNU
);
2881 add_sym_3 ("ubound", GFC_ISYM_UBOUND
, CLASS_INQUIRY
, ACTUAL_NO
,
2882 BT_INTEGER
, di
, GFC_STD_F95
,
2883 gfc_check_ubound
, gfc_simplify_ubound
, gfc_resolve_ubound
,
2884 ar
, BT_REAL
, dr
, REQUIRED
, dm
, BT_INTEGER
, ii
, OPTIONAL
,
2885 kind
, BT_INTEGER
, di
, OPTIONAL
);
2887 make_generic ("ubound", GFC_ISYM_UBOUND
, GFC_STD_F95
);
2889 add_sym_3 ("ucobound", GFC_ISYM_UCOBOUND
, CLASS_INQUIRY
, ACTUAL_NO
,
2890 BT_INTEGER
, di
, GFC_STD_F2008
,
2891 gfc_check_ucobound
, gfc_simplify_ucobound
, gfc_resolve_ucobound
,
2892 ca
, BT_REAL
, dr
, REQUIRED
, dm
, BT_INTEGER
, ii
, OPTIONAL
,
2893 kind
, BT_INTEGER
, di
, OPTIONAL
);
2895 make_generic ("ucobound", GFC_ISYM_UCOBOUND
, GFC_STD_F2008
);
2897 /* g77 compatibility for UMASK. */
2898 add_sym_1 ("umask", GFC_ISYM_UMASK
, CLASS_IMPURE
, ACTUAL_NO
, BT_INTEGER
, di
,
2899 GFC_STD_GNU
, gfc_check_umask
, NULL
, gfc_resolve_umask
,
2900 msk
, BT_INTEGER
, di
, REQUIRED
);
2902 make_generic ("umask", GFC_ISYM_UMASK
, GFC_STD_GNU
);
2904 /* g77 compatibility for UNLINK. */
2905 add_sym_1 ("unlink", GFC_ISYM_UNLINK
, CLASS_IMPURE
, ACTUAL_NO
, BT_INTEGER
,
2906 di
, GFC_STD_GNU
, gfc_check_unlink
, NULL
, gfc_resolve_unlink
,
2907 "path", BT_CHARACTER
, dc
, REQUIRED
);
2909 make_generic ("unlink", GFC_ISYM_UNLINK
, GFC_STD_GNU
);
2911 add_sym_3 ("unpack", GFC_ISYM_UNPACK
, CLASS_TRANSFORMATIONAL
, ACTUAL_NO
, BT_REAL
, dr
, GFC_STD_F95
,
2912 gfc_check_unpack
, gfc_simplify_unpack
, gfc_resolve_unpack
,
2913 v
, BT_REAL
, dr
, REQUIRED
, msk
, BT_LOGICAL
, dl
, REQUIRED
,
2914 f
, BT_REAL
, dr
, REQUIRED
);
2916 make_generic ("unpack", GFC_ISYM_UNPACK
, GFC_STD_F95
);
2918 add_sym_4 ("verify", GFC_ISYM_VERIFY
, CLASS_ELEMENTAL
, ACTUAL_NO
,
2919 BT_INTEGER
, di
, GFC_STD_F95
,
2920 gfc_check_verify
, gfc_simplify_verify
, gfc_resolve_verify
,
2921 stg
, BT_CHARACTER
, dc
, REQUIRED
, set
, BT_CHARACTER
, dc
, REQUIRED
,
2922 bck
, BT_LOGICAL
, dl
, OPTIONAL
, kind
, BT_INTEGER
, di
, OPTIONAL
);
2924 make_generic ("verify", GFC_ISYM_VERIFY
, GFC_STD_F95
);
2926 add_sym_1 ("loc", GFC_ISYM_LOC
, CLASS_IMPURE
, ACTUAL_NO
, BT_INTEGER
, ii
,
2927 GFC_STD_GNU
, gfc_check_loc
, NULL
, gfc_resolve_loc
,
2928 x
, BT_UNKNOWN
, 0, REQUIRED
);
2930 make_generic ("loc", GFC_ISYM_LOC
, GFC_STD_GNU
);
2934 /* Add intrinsic subroutines. */
2937 add_subroutines (void)
2939 /* Argument names as in the standard (to be used as argument keywords). */
2941 *h
= "harvest", *dt
= "date", *vl
= "values", *pt
= "put",
2942 *c
= "count", *tm
= "time", *tp
= "topos", *gt
= "get",
2943 *t
= "to", *zn
= "zone", *fp
= "frompos", *cm
= "count_max",
2944 *f
= "from", *sz
= "size", *ln
= "len", *cr
= "count_rate",
2945 *com
= "command", *length
= "length", *st
= "status",
2946 *val
= "value", *num
= "number", *name
= "name",
2947 *trim_name
= "trim_name", *ut
= "unit", *han
= "handler",
2948 *sec
= "seconds", *res
= "result", *of
= "offset", *md
= "mode",
2949 *whence
= "whence", *pos
= "pos", *ptr
= "ptr", *p1
= "path1",
2950 *p2
= "path2", *msk
= "mask", *old
= "old";
2952 int di
, dr
, dc
, dl
, ii
;
2954 di
= gfc_default_integer_kind
;
2955 dr
= gfc_default_real_kind
;
2956 dc
= gfc_default_character_kind
;
2957 dl
= gfc_default_logical_kind
;
2958 ii
= gfc_index_integer_kind
;
2960 add_sym_0s ("abort", GFC_ISYM_ABORT
, GFC_STD_GNU
, NULL
);
2964 add_sym_2s ("atomic_define", GFC_ISYM_ATOMIC_DEF
, CLASS_ATOMIC
,
2965 BT_UNKNOWN
, 0, GFC_STD_F2008
,
2966 gfc_check_atomic_def
, NULL
, gfc_resolve_atomic_def
,
2967 "atom", BT_INTEGER
, di
, REQUIRED
, INTENT_OUT
,
2968 "value", BT_INTEGER
, di
, REQUIRED
, INTENT_IN
);
2970 add_sym_2s ("atomic_ref", GFC_ISYM_ATOMIC_REF
, CLASS_ATOMIC
,
2971 BT_UNKNOWN
, 0, GFC_STD_F2008
,
2972 gfc_check_atomic_ref
, NULL
, gfc_resolve_atomic_ref
,
2973 "value", BT_INTEGER
, di
, REQUIRED
, INTENT_OUT
,
2974 "atom", BT_INTEGER
, di
, REQUIRED
, INTENT_IN
);
2976 add_sym_0s ("backtrace", GFC_ISYM_BACKTRACE
, GFC_STD_GNU
, NULL
);
2978 add_sym_1s ("cpu_time", GFC_ISYM_CPU_TIME
, CLASS_IMPURE
, BT_UNKNOWN
, 0,
2979 GFC_STD_F95
, gfc_check_cpu_time
, NULL
, gfc_resolve_cpu_time
,
2980 tm
, BT_REAL
, dr
, REQUIRED
, INTENT_OUT
);
2982 /* More G77 compatibility garbage. */
2983 add_sym_2s ("ctime", GFC_ISYM_CTIME
, CLASS_IMPURE
, BT_UNKNOWN
, 0, GFC_STD_GNU
,
2984 gfc_check_ctime_sub
, NULL
, gfc_resolve_ctime_sub
,
2985 tm
, BT_INTEGER
, di
, REQUIRED
, INTENT_IN
,
2986 res
, BT_CHARACTER
, dc
, REQUIRED
, INTENT_OUT
);
2988 add_sym_1s ("idate", GFC_ISYM_IDATE
, CLASS_IMPURE
, BT_UNKNOWN
, 0, GFC_STD_GNU
,
2989 gfc_check_itime_idate
, NULL
, gfc_resolve_idate
,
2990 vl
, BT_INTEGER
, 4, REQUIRED
, INTENT_OUT
);
2992 add_sym_1s ("itime", GFC_ISYM_ITIME
, CLASS_IMPURE
, BT_UNKNOWN
, 0, GFC_STD_GNU
,
2993 gfc_check_itime_idate
, NULL
, gfc_resolve_itime
,
2994 vl
, BT_INTEGER
, 4, REQUIRED
, INTENT_OUT
);
2996 add_sym_2s ("ltime", GFC_ISYM_LTIME
, CLASS_IMPURE
, BT_UNKNOWN
, 0, GFC_STD_GNU
,
2997 gfc_check_ltime_gmtime
, NULL
, gfc_resolve_ltime
,
2998 tm
, BT_INTEGER
, di
, REQUIRED
, INTENT_IN
,
2999 vl
, BT_INTEGER
, di
, REQUIRED
, INTENT_OUT
);
3001 add_sym_2s ("gmtime", GFC_ISYM_GMTIME
, CLASS_IMPURE
, BT_UNKNOWN
, 0,
3002 GFC_STD_GNU
, gfc_check_ltime_gmtime
, NULL
, gfc_resolve_gmtime
,
3003 tm
, BT_INTEGER
, di
, REQUIRED
, INTENT_IN
,
3004 vl
, BT_INTEGER
, di
, REQUIRED
, INTENT_OUT
);
3006 add_sym_1s ("second", GFC_ISYM_SECOND
, CLASS_IMPURE
, BT_UNKNOWN
, 0,
3007 GFC_STD_GNU
, gfc_check_second_sub
, NULL
, gfc_resolve_second_sub
,
3008 tm
, BT_REAL
, dr
, REQUIRED
, INTENT_OUT
);
3010 add_sym_2s ("chdir", GFC_ISYM_CHDIR
, CLASS_IMPURE
, BT_UNKNOWN
, 0, GFC_STD_GNU
,
3011 gfc_check_chdir_sub
, NULL
, gfc_resolve_chdir_sub
,
3012 name
, BT_CHARACTER
, dc
, REQUIRED
, INTENT_IN
,
3013 st
, BT_INTEGER
, di
, OPTIONAL
, INTENT_OUT
);
3015 add_sym_3s ("chmod", GFC_ISYM_CHMOD
, CLASS_IMPURE
, BT_UNKNOWN
, 0, GFC_STD_GNU
,
3016 gfc_check_chmod_sub
, NULL
, gfc_resolve_chmod_sub
,
3017 name
, BT_CHARACTER
, dc
, REQUIRED
, INTENT_IN
,
3018 md
, BT_CHARACTER
, dc
, REQUIRED
, INTENT_IN
,
3019 st
, BT_INTEGER
, di
, OPTIONAL
, INTENT_OUT
);
3021 add_sym_4s ("date_and_time", GFC_ISYM_DATE_AND_TIME
, CLASS_IMPURE
, BT_UNKNOWN
,
3022 0, GFC_STD_F95
, gfc_check_date_and_time
, NULL
, NULL
,
3023 dt
, BT_CHARACTER
, dc
, OPTIONAL
, INTENT_OUT
,
3024 tm
, BT_CHARACTER
, dc
, OPTIONAL
, INTENT_OUT
,
3025 zn
, BT_CHARACTER
, dc
, OPTIONAL
, INTENT_OUT
,
3026 vl
, BT_INTEGER
, di
, OPTIONAL
, INTENT_OUT
);
3028 /* More G77 compatibility garbage. */
3029 add_sym_2s ("etime", GFC_ISYM_ETIME
, CLASS_IMPURE
, BT_UNKNOWN
, 0, GFC_STD_GNU
,
3030 gfc_check_dtime_etime_sub
, NULL
, gfc_resolve_etime_sub
,
3031 vl
, BT_REAL
, 4, REQUIRED
, INTENT_OUT
,
3032 tm
, BT_REAL
, 4, REQUIRED
, INTENT_OUT
);
3034 add_sym_2s ("dtime", GFC_ISYM_DTIME
, CLASS_IMPURE
, BT_UNKNOWN
, 0, GFC_STD_GNU
,
3035 gfc_check_dtime_etime_sub
, NULL
, gfc_resolve_dtime_sub
,
3036 vl
, BT_REAL
, 4, REQUIRED
, INTENT_OUT
,
3037 tm
, BT_REAL
, 4, REQUIRED
, INTENT_OUT
);
3039 add_sym_5s ("execute_command_line", GFC_ISYM_EXECUTE_COMMAND_LINE
,
3040 CLASS_IMPURE
, BT_UNKNOWN
, 0, GFC_STD_F2008
,
3041 NULL
, NULL
, gfc_resolve_execute_command_line
,
3042 "command", BT_CHARACTER
, dc
, REQUIRED
, INTENT_IN
,
3043 "wait", BT_LOGICAL
, dl
, OPTIONAL
, INTENT_IN
,
3044 "exitstat", BT_INTEGER
, di
, OPTIONAL
, INTENT_INOUT
,
3045 "cmdstat", BT_INTEGER
, di
, OPTIONAL
, INTENT_OUT
,
3046 "cmdmsg", BT_CHARACTER
, dc
, OPTIONAL
, INTENT_INOUT
);
3048 add_sym_1s ("fdate", GFC_ISYM_FDATE
, CLASS_IMPURE
, BT_UNKNOWN
, 0, GFC_STD_GNU
,
3049 gfc_check_fdate_sub
, NULL
, gfc_resolve_fdate_sub
,
3050 dt
, BT_CHARACTER
, dc
, REQUIRED
, INTENT_OUT
);
3052 add_sym_1s ("gerror", GFC_ISYM_GERROR
, CLASS_IMPURE
, BT_UNKNOWN
,
3053 0, GFC_STD_GNU
, gfc_check_gerror
, NULL
, gfc_resolve_gerror
,
3054 res
, BT_CHARACTER
, dc
, REQUIRED
, INTENT_OUT
);
3056 add_sym_2s ("getcwd", GFC_ISYM_GETCWD
, CLASS_IMPURE
, BT_UNKNOWN
, 0,
3057 GFC_STD_GNU
, gfc_check_getcwd_sub
, NULL
, gfc_resolve_getcwd_sub
,
3058 c
, BT_CHARACTER
, dc
, REQUIRED
, INTENT_OUT
,
3059 st
, BT_INTEGER
, di
, OPTIONAL
, INTENT_OUT
);
3061 add_sym_2s ("getenv", GFC_ISYM_GETENV
, CLASS_IMPURE
, BT_UNKNOWN
,
3062 0, GFC_STD_GNU
, NULL
, NULL
, NULL
,
3063 name
, BT_CHARACTER
, dc
, REQUIRED
, INTENT_IN
,
3064 val
, BT_CHARACTER
, dc
, REQUIRED
, INTENT_OUT
);
3066 add_sym_2s ("getarg", GFC_ISYM_GETARG
, CLASS_IMPURE
, BT_UNKNOWN
,
3067 0, GFC_STD_GNU
, gfc_check_getarg
, NULL
, gfc_resolve_getarg
,
3068 pos
, BT_INTEGER
, di
, REQUIRED
, INTENT_IN
,
3069 val
, BT_CHARACTER
, dc
, REQUIRED
, INTENT_OUT
);
3071 add_sym_1s ("getlog", GFC_ISYM_GETLOG
, CLASS_IMPURE
, BT_UNKNOWN
,
3072 0, GFC_STD_GNU
, gfc_check_getlog
, NULL
, gfc_resolve_getlog
,
3073 c
, BT_CHARACTER
, dc
, REQUIRED
, INTENT_OUT
);
3075 /* F2003 commandline routines. */
3077 add_sym_3s ("get_command", GFC_ISYM_GET_COMMAND
, CLASS_IMPURE
,
3078 BT_UNKNOWN
, 0, GFC_STD_F2003
,
3079 NULL
, NULL
, gfc_resolve_get_command
,
3080 com
, BT_CHARACTER
, dc
, OPTIONAL
, INTENT_OUT
,
3081 length
, BT_INTEGER
, di
, OPTIONAL
, INTENT_OUT
,
3082 st
, BT_INTEGER
, di
, OPTIONAL
, INTENT_OUT
);
3084 add_sym_4s ("get_command_argument", GFC_ISYM_GET_COMMAND_ARGUMENT
,
3085 CLASS_IMPURE
, BT_UNKNOWN
, 0, GFC_STD_F2003
, NULL
, NULL
,
3086 gfc_resolve_get_command_argument
,
3087 num
, BT_INTEGER
, di
, REQUIRED
, INTENT_IN
,
3088 val
, BT_CHARACTER
, dc
, OPTIONAL
, INTENT_OUT
,
3089 length
, BT_INTEGER
, di
, OPTIONAL
, INTENT_OUT
,
3090 st
, BT_INTEGER
, di
, OPTIONAL
, INTENT_OUT
);
3092 /* F2003 subroutine to get environment variables. */
3094 add_sym_5s ("get_environment_variable", GFC_ISYM_GET_ENVIRONMENT_VARIABLE
,
3095 CLASS_IMPURE
, BT_UNKNOWN
, 0, GFC_STD_F2003
,
3096 NULL
, NULL
, gfc_resolve_get_environment_variable
,
3097 name
, BT_CHARACTER
, dc
, REQUIRED
, INTENT_IN
,
3098 val
, BT_CHARACTER
, dc
, OPTIONAL
, INTENT_OUT
,
3099 length
, BT_INTEGER
, di
, OPTIONAL
, INTENT_OUT
,
3100 st
, BT_INTEGER
, di
, OPTIONAL
, INTENT_OUT
,
3101 trim_name
, BT_LOGICAL
, dl
, OPTIONAL
, INTENT_IN
);
3103 add_sym_2s ("move_alloc", GFC_ISYM_MOVE_ALLOC
, CLASS_PURE
, BT_UNKNOWN
, 0,
3105 gfc_check_move_alloc
, NULL
, NULL
,
3106 f
, BT_UNKNOWN
, 0, REQUIRED
, INTENT_INOUT
,
3107 t
, BT_UNKNOWN
, 0, REQUIRED
, INTENT_OUT
);
3109 add_sym_5s ("mvbits", GFC_ISYM_MVBITS
, CLASS_ELEMENTAL
, BT_UNKNOWN
, 0,
3110 GFC_STD_F95
, gfc_check_mvbits
, gfc_simplify_mvbits
,
3112 f
, BT_INTEGER
, di
, REQUIRED
, INTENT_IN
,
3113 fp
, BT_INTEGER
, di
, REQUIRED
, INTENT_IN
,
3114 ln
, BT_INTEGER
, di
, REQUIRED
, INTENT_IN
,
3115 t
, BT_INTEGER
, di
, REQUIRED
, INTENT_INOUT
,
3116 tp
, BT_INTEGER
, di
, REQUIRED
, INTENT_IN
);
3118 add_sym_1s ("random_number", GFC_ISYM_RANDOM_NUMBER
, CLASS_IMPURE
,
3119 BT_UNKNOWN
, 0, GFC_STD_F95
,
3120 gfc_check_random_number
, NULL
, gfc_resolve_random_number
,
3121 h
, BT_REAL
, dr
, REQUIRED
, INTENT_OUT
);
3123 add_sym_3s ("random_seed", GFC_ISYM_RANDOM_SEED
, CLASS_IMPURE
,
3124 BT_UNKNOWN
, 0, GFC_STD_F95
,
3125 gfc_check_random_seed
, NULL
, gfc_resolve_random_seed
,
3126 sz
, BT_INTEGER
, di
, OPTIONAL
, INTENT_OUT
,
3127 pt
, BT_INTEGER
, di
, OPTIONAL
, INTENT_IN
,
3128 gt
, BT_INTEGER
, di
, OPTIONAL
, INTENT_OUT
);
3130 /* The following subroutines are part of ISO_C_BINDING. */
3132 add_sym_3s ("c_f_pointer", GFC_ISYM_C_F_POINTER
, CLASS_IMPURE
, BT_UNKNOWN
, 0,
3133 GFC_STD_F2003
, gfc_check_c_f_pointer
, NULL
, NULL
,
3134 "cptr", BT_VOID
, 0, REQUIRED
, INTENT_IN
,
3135 "fptr", BT_UNKNOWN
, 0, REQUIRED
, INTENT_OUT
,
3136 "shape", BT_INTEGER
, di
, OPTIONAL
, INTENT_IN
);
3139 add_sym_2s ("c_f_procpointer", GFC_ISYM_C_F_PROCPOINTER
, CLASS_IMPURE
,
3140 BT_UNKNOWN
, 0, GFC_STD_F2003
, gfc_check_c_f_procpointer
,
3142 "cptr", BT_VOID
, 0, REQUIRED
, INTENT_IN
,
3143 "fptr", BT_UNKNOWN
, 0, REQUIRED
, INTENT_OUT
);
3146 /* More G77 compatibility garbage. */
3147 add_sym_3s ("alarm", GFC_ISYM_ALARM
, CLASS_IMPURE
, BT_UNKNOWN
, 0, GFC_STD_GNU
,
3148 gfc_check_alarm_sub
, NULL
, gfc_resolve_alarm_sub
,
3149 sec
, BT_INTEGER
, di
, REQUIRED
, INTENT_IN
,
3150 han
, BT_UNKNOWN
, 0, REQUIRED
, INTENT_IN
,
3151 st
, BT_INTEGER
, di
, OPTIONAL
, INTENT_OUT
);
3153 add_sym_1s ("srand", GFC_ISYM_SRAND
, CLASS_IMPURE
, BT_UNKNOWN
,
3154 di
, GFC_STD_GNU
, gfc_check_srand
, NULL
, gfc_resolve_srand
,
3155 "seed", BT_INTEGER
, 4, REQUIRED
, INTENT_IN
);
3157 add_sym_1s ("exit", GFC_ISYM_EXIT
, CLASS_IMPURE
, BT_UNKNOWN
, 0, GFC_STD_GNU
,
3158 gfc_check_exit
, NULL
, gfc_resolve_exit
,
3159 st
, BT_INTEGER
, di
, OPTIONAL
, INTENT_IN
);
3163 add_sym_3s ("fgetc", GFC_ISYM_FGETC
, CLASS_IMPURE
, BT_UNKNOWN
, 0, GFC_STD_GNU
,
3164 gfc_check_fgetputc_sub
, NULL
, gfc_resolve_fgetc_sub
,
3165 ut
, BT_INTEGER
, di
, REQUIRED
, INTENT_IN
,
3166 c
, BT_CHARACTER
, dc
, REQUIRED
, INTENT_OUT
,
3167 st
, BT_INTEGER
, di
, OPTIONAL
, INTENT_OUT
);
3169 add_sym_2s ("fget", GFC_ISYM_FGET
, CLASS_IMPURE
, BT_UNKNOWN
, 0, GFC_STD_GNU
,
3170 gfc_check_fgetput_sub
, NULL
, gfc_resolve_fget_sub
,
3171 c
, BT_CHARACTER
, dc
, REQUIRED
, INTENT_OUT
,
3172 st
, BT_INTEGER
, di
, OPTIONAL
, INTENT_OUT
);
3174 add_sym_1s ("flush", GFC_ISYM_FLUSH
, CLASS_IMPURE
, BT_UNKNOWN
, 0, GFC_STD_GNU
,
3175 gfc_check_flush
, NULL
, gfc_resolve_flush
,
3176 ut
, BT_INTEGER
, di
, OPTIONAL
, INTENT_IN
);
3178 add_sym_3s ("fputc", GFC_ISYM_FPUTC
, CLASS_IMPURE
, BT_UNKNOWN
, 0, GFC_STD_GNU
,
3179 gfc_check_fgetputc_sub
, NULL
, gfc_resolve_fputc_sub
,
3180 ut
, BT_INTEGER
, di
, REQUIRED
, INTENT_IN
,
3181 c
, BT_CHARACTER
, dc
, REQUIRED
, INTENT_IN
,
3182 st
, BT_INTEGER
, di
, OPTIONAL
, INTENT_OUT
);
3184 add_sym_2s ("fput", GFC_ISYM_FPUT
, CLASS_IMPURE
, BT_UNKNOWN
, 0, GFC_STD_GNU
,
3185 gfc_check_fgetput_sub
, NULL
, gfc_resolve_fput_sub
,
3186 c
, BT_CHARACTER
, dc
, REQUIRED
, INTENT_IN
,
3187 st
, BT_INTEGER
, di
, OPTIONAL
, INTENT_OUT
);
3189 add_sym_1s ("free", GFC_ISYM_FREE
, CLASS_IMPURE
, BT_UNKNOWN
, 0, GFC_STD_GNU
,
3190 gfc_check_free
, NULL
, gfc_resolve_free
,
3191 ptr
, BT_INTEGER
, ii
, REQUIRED
, INTENT_INOUT
);
3193 add_sym_4s ("fseek", GFC_ISYM_FSEEK
, CLASS_IMPURE
, BT_UNKNOWN
, 0, GFC_STD_GNU
,
3194 gfc_check_fseek_sub
, NULL
, gfc_resolve_fseek_sub
,
3195 ut
, BT_INTEGER
, di
, REQUIRED
, INTENT_IN
,
3196 of
, BT_INTEGER
, di
, REQUIRED
, INTENT_IN
,
3197 whence
, BT_INTEGER
, di
, REQUIRED
, INTENT_IN
,
3198 st
, BT_INTEGER
, di
, OPTIONAL
, INTENT_OUT
);
3200 add_sym_2s ("ftell", GFC_ISYM_FTELL
, CLASS_IMPURE
, BT_UNKNOWN
, 0, GFC_STD_GNU
,
3201 gfc_check_ftell_sub
, NULL
, gfc_resolve_ftell_sub
,
3202 ut
, BT_INTEGER
, di
, REQUIRED
, INTENT_IN
,
3203 of
, BT_INTEGER
, ii
, REQUIRED
, INTENT_OUT
);
3205 add_sym_2s ("hostnm", GFC_ISYM_HOSTNM
, CLASS_IMPURE
, BT_UNKNOWN
, 0,
3206 GFC_STD_GNU
, gfc_check_hostnm_sub
, NULL
, gfc_resolve_hostnm_sub
,
3207 c
, BT_CHARACTER
, dc
, REQUIRED
, INTENT_OUT
,
3208 st
, BT_INTEGER
, di
, OPTIONAL
, INTENT_OUT
);
3210 add_sym_3s ("kill", GFC_ISYM_KILL
, CLASS_IMPURE
, BT_UNKNOWN
, 0, GFC_STD_GNU
,
3211 gfc_check_kill_sub
, NULL
, gfc_resolve_kill_sub
,
3212 c
, BT_INTEGER
, di
, REQUIRED
, INTENT_IN
,
3213 val
, BT_INTEGER
, di
, REQUIRED
, INTENT_IN
,
3214 st
, BT_INTEGER
, di
, OPTIONAL
, INTENT_OUT
);
3216 add_sym_3s ("link", GFC_ISYM_LINK
, CLASS_IMPURE
, BT_UNKNOWN
, 0, GFC_STD_GNU
,
3217 gfc_check_link_sub
, NULL
, gfc_resolve_link_sub
,
3218 p1
, BT_CHARACTER
, dc
, REQUIRED
, INTENT_IN
,
3219 p2
, BT_CHARACTER
, dc
, REQUIRED
, INTENT_IN
,
3220 st
, BT_INTEGER
, di
, OPTIONAL
, INTENT_OUT
);
3222 add_sym_1s ("perror", GFC_ISYM_PERROR
, CLASS_IMPURE
, BT_UNKNOWN
,
3223 0, GFC_STD_GNU
, gfc_check_perror
, NULL
, gfc_resolve_perror
,
3224 "string", BT_CHARACTER
, dc
, REQUIRED
, INTENT_IN
);
3226 add_sym_3s ("rename", GFC_ISYM_RENAME
, CLASS_IMPURE
, BT_UNKNOWN
, 0,
3227 GFC_STD_GNU
, gfc_check_rename_sub
, NULL
, gfc_resolve_rename_sub
,
3228 p1
, BT_CHARACTER
, dc
, REQUIRED
, INTENT_IN
,
3229 p2
, BT_CHARACTER
, dc
, REQUIRED
, INTENT_IN
,
3230 st
, BT_INTEGER
, di
, OPTIONAL
, INTENT_OUT
);
3232 add_sym_1s ("sleep", GFC_ISYM_SLEEP
, CLASS_IMPURE
, BT_UNKNOWN
, 0, GFC_STD_GNU
,
3233 gfc_check_sleep_sub
, NULL
, gfc_resolve_sleep_sub
,
3234 sec
, BT_INTEGER
, di
, REQUIRED
, INTENT_IN
);
3236 add_sym_3s ("fstat", GFC_ISYM_FSTAT
, CLASS_IMPURE
, BT_UNKNOWN
, 0, GFC_STD_GNU
,
3237 gfc_check_fstat_sub
, NULL
, gfc_resolve_fstat_sub
,
3238 ut
, BT_INTEGER
, di
, REQUIRED
, INTENT_IN
,
3239 vl
, BT_INTEGER
, di
, REQUIRED
, INTENT_OUT
,
3240 st
, BT_INTEGER
, di
, OPTIONAL
, INTENT_OUT
);
3242 add_sym_3s ("lstat", GFC_ISYM_LSTAT
, CLASS_IMPURE
, BT_UNKNOWN
, 0, GFC_STD_GNU
,
3243 gfc_check_stat_sub
, NULL
, gfc_resolve_lstat_sub
,
3244 name
, BT_CHARACTER
, dc
, REQUIRED
, INTENT_IN
,
3245 vl
, BT_INTEGER
, di
, REQUIRED
, INTENT_OUT
,
3246 st
, BT_INTEGER
, di
, OPTIONAL
, INTENT_OUT
);
3248 add_sym_3s ("stat", GFC_ISYM_STAT
, CLASS_IMPURE
, BT_UNKNOWN
, 0, GFC_STD_GNU
,
3249 gfc_check_stat_sub
, NULL
, gfc_resolve_stat_sub
,
3250 name
, BT_CHARACTER
, dc
, REQUIRED
, INTENT_IN
,
3251 vl
, BT_INTEGER
, di
, REQUIRED
, INTENT_OUT
,
3252 st
, BT_INTEGER
, di
, OPTIONAL
, INTENT_OUT
);
3254 add_sym_3s ("signal", GFC_ISYM_SIGNAL
, CLASS_IMPURE
, BT_UNKNOWN
, 0,
3255 GFC_STD_GNU
, gfc_check_signal_sub
, NULL
, gfc_resolve_signal_sub
,
3256 num
, BT_INTEGER
, di
, REQUIRED
, INTENT_IN
,
3257 han
, BT_UNKNOWN
, 0, REQUIRED
, INTENT_IN
,
3258 st
, BT_INTEGER
, di
, OPTIONAL
, INTENT_OUT
);
3260 add_sym_3s ("symlnk", GFC_ISYM_SYMLINK
, CLASS_IMPURE
, BT_UNKNOWN
, 0,
3261 GFC_STD_GNU
, gfc_check_symlnk_sub
, NULL
, gfc_resolve_symlnk_sub
,
3262 p1
, BT_CHARACTER
, dc
, REQUIRED
, INTENT_IN
,
3263 p2
, BT_CHARACTER
, dc
, REQUIRED
, INTENT_IN
,
3264 st
, BT_INTEGER
, di
, OPTIONAL
, INTENT_OUT
);
3266 add_sym_2s ("system", GFC_ISYM_SYSTEM
, CLASS_IMPURE
, BT_UNKNOWN
,
3267 0, GFC_STD_GNU
, NULL
, NULL
, gfc_resolve_system_sub
,
3268 com
, BT_CHARACTER
, dc
, REQUIRED
, INTENT_IN
,
3269 st
, BT_INTEGER
, di
, OPTIONAL
, INTENT_OUT
);
3271 add_sym_3s ("system_clock", GFC_ISYM_SYSTEM_CLOCK
, CLASS_IMPURE
,
3272 BT_UNKNOWN
, 0, GFC_STD_F95
,
3273 gfc_check_system_clock
, NULL
, gfc_resolve_system_clock
,
3274 c
, BT_INTEGER
, di
, OPTIONAL
, INTENT_OUT
,
3275 cr
, BT_INTEGER
, di
, OPTIONAL
, INTENT_OUT
,
3276 cm
, BT_INTEGER
, di
, OPTIONAL
, INTENT_OUT
);
3278 add_sym_2s ("ttynam", GFC_ISYM_TTYNAM
, CLASS_IMPURE
, BT_UNKNOWN
, 0,
3279 GFC_STD_GNU
, gfc_check_ttynam_sub
, NULL
, gfc_resolve_ttynam_sub
,
3280 ut
, BT_INTEGER
, di
, REQUIRED
, INTENT_IN
,
3281 name
, BT_CHARACTER
, dc
, REQUIRED
, INTENT_OUT
);
3283 add_sym_2s ("umask", GFC_ISYM_UMASK
, CLASS_IMPURE
, BT_UNKNOWN
, 0, GFC_STD_GNU
,
3284 gfc_check_umask_sub
, NULL
, gfc_resolve_umask_sub
,
3285 msk
, BT_INTEGER
, di
, REQUIRED
, INTENT_IN
,
3286 old
, BT_INTEGER
, di
, OPTIONAL
, INTENT_OUT
);
3288 add_sym_2s ("unlink", GFC_ISYM_UNLINK
, CLASS_IMPURE
, BT_UNKNOWN
, 0,
3289 GFC_STD_GNU
, gfc_check_unlink_sub
, NULL
, gfc_resolve_unlink_sub
,
3290 "path", BT_CHARACTER
, dc
, REQUIRED
, INTENT_IN
,
3291 st
, BT_INTEGER
, di
, OPTIONAL
, INTENT_OUT
);
3295 /* Add a function to the list of conversion symbols. */
3298 add_conv (bt from_type
, int from_kind
, bt to_type
, int to_kind
, int standard
)
3300 gfc_typespec from
, to
;
3301 gfc_intrinsic_sym
*sym
;
3303 if (sizing
== SZ_CONVS
)
3309 gfc_clear_ts (&from
);
3310 from
.type
= from_type
;
3311 from
.kind
= from_kind
;
3317 sym
= conversion
+ nconv
;
3319 sym
->name
= conv_name (&from
, &to
);
3320 sym
->lib_name
= sym
->name
;
3321 sym
->simplify
.cc
= gfc_convert_constant
;
3322 sym
->standard
= standard
;
3325 sym
->conversion
= 1;
3327 sym
->id
= GFC_ISYM_CONVERSION
;
3333 /* Create gfc_intrinsic_sym nodes for all intrinsic conversion
3334 functions by looping over the kind tables. */
3337 add_conversions (void)
3341 /* Integer-Integer conversions. */
3342 for (i
= 0; gfc_integer_kinds
[i
].kind
!= 0; i
++)
3343 for (j
= 0; gfc_integer_kinds
[j
].kind
!= 0; j
++)
3348 add_conv (BT_INTEGER
, gfc_integer_kinds
[i
].kind
,
3349 BT_INTEGER
, gfc_integer_kinds
[j
].kind
, GFC_STD_F77
);
3352 /* Integer-Real/Complex conversions. */
3353 for (i
= 0; gfc_integer_kinds
[i
].kind
!= 0; i
++)
3354 for (j
= 0; gfc_real_kinds
[j
].kind
!= 0; j
++)
3356 add_conv (BT_INTEGER
, gfc_integer_kinds
[i
].kind
,
3357 BT_REAL
, gfc_real_kinds
[j
].kind
, GFC_STD_F77
);
3359 add_conv (BT_REAL
, gfc_real_kinds
[j
].kind
,
3360 BT_INTEGER
, gfc_integer_kinds
[i
].kind
, GFC_STD_F77
);
3362 add_conv (BT_INTEGER
, gfc_integer_kinds
[i
].kind
,
3363 BT_COMPLEX
, gfc_real_kinds
[j
].kind
, GFC_STD_F77
);
3365 add_conv (BT_COMPLEX
, gfc_real_kinds
[j
].kind
,
3366 BT_INTEGER
, gfc_integer_kinds
[i
].kind
, GFC_STD_F77
);
3369 if ((gfc_option
.allow_std
& GFC_STD_LEGACY
) != 0)
3371 /* Hollerith-Integer conversions. */
3372 for (i
= 0; gfc_integer_kinds
[i
].kind
!= 0; i
++)
3373 add_conv (BT_HOLLERITH
, gfc_default_character_kind
,
3374 BT_INTEGER
, gfc_integer_kinds
[i
].kind
, GFC_STD_LEGACY
);
3375 /* Hollerith-Real conversions. */
3376 for (i
= 0; gfc_real_kinds
[i
].kind
!= 0; i
++)
3377 add_conv (BT_HOLLERITH
, gfc_default_character_kind
,
3378 BT_REAL
, gfc_real_kinds
[i
].kind
, GFC_STD_LEGACY
);
3379 /* Hollerith-Complex conversions. */
3380 for (i
= 0; gfc_real_kinds
[i
].kind
!= 0; i
++)
3381 add_conv (BT_HOLLERITH
, gfc_default_character_kind
,
3382 BT_COMPLEX
, gfc_real_kinds
[i
].kind
, GFC_STD_LEGACY
);
3384 /* Hollerith-Character conversions. */
3385 add_conv (BT_HOLLERITH
, gfc_default_character_kind
, BT_CHARACTER
,
3386 gfc_default_character_kind
, GFC_STD_LEGACY
);
3388 /* Hollerith-Logical conversions. */
3389 for (i
= 0; gfc_logical_kinds
[i
].kind
!= 0; i
++)
3390 add_conv (BT_HOLLERITH
, gfc_default_character_kind
,
3391 BT_LOGICAL
, gfc_logical_kinds
[i
].kind
, GFC_STD_LEGACY
);
3394 /* Real/Complex - Real/Complex conversions. */
3395 for (i
= 0; gfc_real_kinds
[i
].kind
!= 0; i
++)
3396 for (j
= 0; gfc_real_kinds
[j
].kind
!= 0; j
++)
3400 add_conv (BT_REAL
, gfc_real_kinds
[i
].kind
,
3401 BT_REAL
, gfc_real_kinds
[j
].kind
, GFC_STD_F77
);
3403 add_conv (BT_COMPLEX
, gfc_real_kinds
[i
].kind
,
3404 BT_COMPLEX
, gfc_real_kinds
[j
].kind
, GFC_STD_F77
);
3407 add_conv (BT_REAL
, gfc_real_kinds
[i
].kind
,
3408 BT_COMPLEX
, gfc_real_kinds
[j
].kind
, GFC_STD_F77
);
3410 add_conv (BT_COMPLEX
, gfc_real_kinds
[i
].kind
,
3411 BT_REAL
, gfc_real_kinds
[j
].kind
, GFC_STD_F77
);
3414 /* Logical/Logical kind conversion. */
3415 for (i
= 0; gfc_logical_kinds
[i
].kind
; i
++)
3416 for (j
= 0; gfc_logical_kinds
[j
].kind
; j
++)
3421 add_conv (BT_LOGICAL
, gfc_logical_kinds
[i
].kind
,
3422 BT_LOGICAL
, gfc_logical_kinds
[j
].kind
, GFC_STD_F77
);
3425 /* Integer-Logical and Logical-Integer conversions. */
3426 if ((gfc_option
.allow_std
& GFC_STD_LEGACY
) != 0)
3427 for (i
=0; gfc_integer_kinds
[i
].kind
; i
++)
3428 for (j
=0; gfc_logical_kinds
[j
].kind
; j
++)
3430 add_conv (BT_INTEGER
, gfc_integer_kinds
[i
].kind
,
3431 BT_LOGICAL
, gfc_logical_kinds
[j
].kind
, GFC_STD_LEGACY
);
3432 add_conv (BT_LOGICAL
, gfc_logical_kinds
[j
].kind
,
3433 BT_INTEGER
, gfc_integer_kinds
[i
].kind
, GFC_STD_LEGACY
);
3439 add_char_conversions (void)
3443 /* Count possible conversions. */
3444 for (i
= 0; gfc_character_kinds
[i
].kind
!= 0; i
++)
3445 for (j
= 0; gfc_character_kinds
[j
].kind
!= 0; j
++)
3449 /* Allocate memory. */
3450 char_conversions
= XCNEWVEC (gfc_intrinsic_sym
, ncharconv
);
3452 /* Add the conversions themselves. */
3454 for (i
= 0; gfc_character_kinds
[i
].kind
!= 0; i
++)
3455 for (j
= 0; gfc_character_kinds
[j
].kind
!= 0; j
++)
3457 gfc_typespec from
, to
;
3462 gfc_clear_ts (&from
);
3463 from
.type
= BT_CHARACTER
;
3464 from
.kind
= gfc_character_kinds
[i
].kind
;
3467 to
.type
= BT_CHARACTER
;
3468 to
.kind
= gfc_character_kinds
[j
].kind
;
3470 char_conversions
[n
].name
= conv_name (&from
, &to
);
3471 char_conversions
[n
].lib_name
= char_conversions
[n
].name
;
3472 char_conversions
[n
].simplify
.cc
= gfc_convert_char_constant
;
3473 char_conversions
[n
].standard
= GFC_STD_F2003
;
3474 char_conversions
[n
].elemental
= 1;
3475 char_conversions
[n
].pure
= 1;
3476 char_conversions
[n
].conversion
= 0;
3477 char_conversions
[n
].ts
= to
;
3478 char_conversions
[n
].id
= GFC_ISYM_CONVERSION
;
3485 /* Initialize the table of intrinsics. */
3487 gfc_intrinsic_init_1 (void)
3489 nargs
= nfunc
= nsub
= nconv
= 0;
3491 /* Create a namespace to hold the resolved intrinsic symbols. */
3492 gfc_intrinsic_namespace
= gfc_get_namespace (NULL
, 0);
3501 functions
= XCNEWVAR (struct gfc_intrinsic_sym
,
3502 sizeof (gfc_intrinsic_sym
) * (nfunc
+ nsub
)
3503 + sizeof (gfc_intrinsic_arg
) * nargs
);
3505 next_sym
= functions
;
3506 subroutines
= functions
+ nfunc
;
3508 conversion
= XCNEWVEC (gfc_intrinsic_sym
, nconv
);
3510 next_arg
= ((gfc_intrinsic_arg
*) (subroutines
+ nsub
)) - 1;
3512 sizing
= SZ_NOTHING
;
3519 /* Character conversion intrinsics need to be treated separately. */
3520 add_char_conversions ();
3525 gfc_intrinsic_done_1 (void)
3529 free (char_conversions
);
3530 gfc_free_namespace (gfc_intrinsic_namespace
);
3534 /******** Subroutines to check intrinsic interfaces ***********/
3536 /* Given a formal argument list, remove any NULL arguments that may
3537 have been left behind by a sort against some formal argument list. */
3540 remove_nullargs (gfc_actual_arglist
**ap
)
3542 gfc_actual_arglist
*head
, *tail
, *next
;
3546 for (head
= *ap
; head
; head
= next
)
3550 if (head
->expr
== NULL
&& !head
->label
)
3553 gfc_free_actual_arglist (head
);
3572 /* Given an actual arglist and a formal arglist, sort the actual
3573 arglist so that its arguments are in a one-to-one correspondence
3574 with the format arglist. Arguments that are not present are given
3575 a blank gfc_actual_arglist structure. If something is obviously
3576 wrong (say, a missing required argument) we abort sorting and
3580 sort_actual (const char *name
, gfc_actual_arglist
**ap
,
3581 gfc_intrinsic_arg
*formal
, locus
*where
)
3583 gfc_actual_arglist
*actual
, *a
;
3584 gfc_intrinsic_arg
*f
;
3586 remove_nullargs (ap
);
3589 for (f
= formal
; f
; f
= f
->next
)
3595 if (f
== NULL
&& a
== NULL
) /* No arguments */
3599 { /* Put the nonkeyword arguments in a 1:1 correspondence */
3605 if (a
->name
!= NULL
)
3617 gfc_error ("Too many arguments in call to '%s' at %L", name
, where
);
3621 /* Associate the remaining actual arguments, all of which have
3622 to be keyword arguments. */
3623 for (; a
; a
= a
->next
)
3625 for (f
= formal
; f
; f
= f
->next
)
3626 if (strcmp (a
->name
, f
->name
) == 0)
3631 if (a
->name
[0] == '%')
3632 gfc_error ("The argument list functions %%VAL, %%LOC or %%REF "
3633 "are not allowed in this context at %L", where
);
3635 gfc_error ("Can't find keyword named '%s' in call to '%s' at %L",
3636 a
->name
, name
, where
);
3640 if (f
->actual
!= NULL
)
3642 gfc_error ("Argument '%s' appears twice in call to '%s' at %L",
3643 f
->name
, name
, where
);
3651 /* At this point, all unmatched formal args must be optional. */
3652 for (f
= formal
; f
; f
= f
->next
)
3654 if (f
->actual
== NULL
&& f
->optional
== 0)
3656 gfc_error ("Missing actual argument '%s' in call to '%s' at %L",
3657 f
->name
, name
, where
);
3663 /* Using the formal argument list, string the actual argument list
3664 together in a way that corresponds with the formal list. */
3667 for (f
= formal
; f
; f
= f
->next
)
3669 if (f
->actual
&& f
->actual
->label
!= NULL
&& f
->ts
.type
)
3671 gfc_error ("ALTERNATE RETURN not permitted at %L", where
);
3675 if (f
->actual
== NULL
)
3677 a
= gfc_get_actual_arglist ();
3678 a
->missing_arg_type
= f
->ts
.type
;
3690 actual
->next
= NULL
; /* End the sorted argument list. */
3696 /* Compare an actual argument list with an intrinsic's formal argument
3697 list. The lists are checked for agreement of type. We don't check
3698 for arrayness here. */
3701 check_arglist (gfc_actual_arglist
**ap
, gfc_intrinsic_sym
*sym
,
3704 gfc_actual_arglist
*actual
;
3705 gfc_intrinsic_arg
*formal
;
3708 formal
= sym
->formal
;
3712 for (; formal
; formal
= formal
->next
, actual
= actual
->next
, i
++)
3716 if (actual
->expr
== NULL
)
3721 /* A kind of 0 means we don't check for kind. */
3723 ts
.kind
= actual
->expr
->ts
.kind
;
3725 if (!gfc_compare_types (&ts
, &actual
->expr
->ts
))
3728 gfc_error ("Type of argument '%s' in call to '%s' at %L should "
3729 "be %s, not %s", gfc_current_intrinsic_arg
[i
]->name
,
3730 gfc_current_intrinsic
, &actual
->expr
->where
,
3731 gfc_typename (&formal
->ts
),
3732 gfc_typename (&actual
->expr
->ts
));
3736 /* If the formal argument is INTENT([IN]OUT), check for definability. */
3737 if (formal
->intent
== INTENT_INOUT
|| formal
->intent
== INTENT_OUT
)
3739 const char* context
= (error_flag
3740 ? _("actual argument to INTENT = OUT/INOUT")
3743 /* No pointer arguments for intrinsics. */
3744 if (!gfc_check_vardef_context (actual
->expr
, false, false, false, context
))
3753 /* Given a pointer to an intrinsic symbol and an expression node that
3754 represent the function call to that subroutine, figure out the type
3755 of the result. This may involve calling a resolution subroutine. */
3758 resolve_intrinsic (gfc_intrinsic_sym
*specific
, gfc_expr
*e
)
3760 gfc_expr
*a1
, *a2
, *a3
, *a4
, *a5
;
3761 gfc_actual_arglist
*arg
;
3763 if (specific
->resolve
.f1
== NULL
)
3765 if (e
->value
.function
.name
== NULL
)
3766 e
->value
.function
.name
= specific
->lib_name
;
3768 if (e
->ts
.type
== BT_UNKNOWN
)
3769 e
->ts
= specific
->ts
;
3773 arg
= e
->value
.function
.actual
;
3775 /* Special case hacks for MIN and MAX. */
3776 if (specific
->resolve
.f1m
== gfc_resolve_max
3777 || specific
->resolve
.f1m
== gfc_resolve_min
)
3779 (*specific
->resolve
.f1m
) (e
, arg
);
3785 (*specific
->resolve
.f0
) (e
);
3794 (*specific
->resolve
.f1
) (e
, a1
);
3803 (*specific
->resolve
.f2
) (e
, a1
, a2
);
3812 (*specific
->resolve
.f3
) (e
, a1
, a2
, a3
);
3821 (*specific
->resolve
.f4
) (e
, a1
, a2
, a3
, a4
);
3830 (*specific
->resolve
.f5
) (e
, a1
, a2
, a3
, a4
, a5
);
3834 gfc_internal_error ("resolve_intrinsic(): Too many args for intrinsic");
3838 /* Given an intrinsic symbol node and an expression node, call the
3839 simplification function (if there is one), perhaps replacing the
3840 expression with something simpler. We return false on an error
3841 of the simplification, true if the simplification worked, even
3842 if nothing has changed in the expression itself. */
3845 do_simplify (gfc_intrinsic_sym
*specific
, gfc_expr
*e
)
3847 gfc_expr
*result
, *a1
, *a2
, *a3
, *a4
, *a5
;
3848 gfc_actual_arglist
*arg
;
3850 /* Max and min require special handling due to the variable number
3852 if (specific
->simplify
.f1
== gfc_simplify_min
)
3854 result
= gfc_simplify_min (e
);
3858 if (specific
->simplify
.f1
== gfc_simplify_max
)
3860 result
= gfc_simplify_max (e
);
3864 if (specific
->simplify
.f1
== NULL
)
3870 arg
= e
->value
.function
.actual
;
3874 result
= (*specific
->simplify
.f0
) ();
3881 if (specific
->simplify
.cc
== gfc_convert_constant
3882 || specific
->simplify
.cc
== gfc_convert_char_constant
)
3884 result
= specific
->simplify
.cc (a1
, specific
->ts
.type
, specific
->ts
.kind
);
3889 result
= (*specific
->simplify
.f1
) (a1
);
3896 result
= (*specific
->simplify
.f2
) (a1
, a2
);
3903 result
= (*specific
->simplify
.f3
) (a1
, a2
, a3
);
3910 result
= (*specific
->simplify
.f4
) (a1
, a2
, a3
, a4
);
3917 result
= (*specific
->simplify
.f5
) (a1
, a2
, a3
, a4
, a5
);
3920 ("do_simplify(): Too many args for intrinsic");
3927 if (result
== &gfc_bad_expr
)
3931 resolve_intrinsic (specific
, e
); /* Must call at run-time */
3934 result
->where
= e
->where
;
3935 gfc_replace_expr (e
, result
);
3942 /* Initialize the gfc_current_intrinsic_arg[] array for the benefit of
3943 error messages. This subroutine returns false if a subroutine
3944 has more than MAX_INTRINSIC_ARGS, in which case the actual argument
3945 list cannot match any intrinsic. */
3948 init_arglist (gfc_intrinsic_sym
*isym
)
3950 gfc_intrinsic_arg
*formal
;
3953 gfc_current_intrinsic
= isym
->name
;
3956 for (formal
= isym
->formal
; formal
; formal
= formal
->next
)
3958 if (i
>= MAX_INTRINSIC_ARGS
)
3959 gfc_internal_error ("init_arglist(): too many arguments");
3960 gfc_current_intrinsic_arg
[i
++] = formal
;
3965 /* Given a pointer to an intrinsic symbol and an expression consisting
3966 of a function call, see if the function call is consistent with the
3967 intrinsic's formal argument list. Return true if the expression
3968 and intrinsic match, false otherwise. */
3971 check_specific (gfc_intrinsic_sym
*specific
, gfc_expr
*expr
, int error_flag
)
3973 gfc_actual_arglist
*arg
, **ap
;
3976 ap
= &expr
->value
.function
.actual
;
3978 init_arglist (specific
);
3980 /* Don't attempt to sort the argument list for min or max. */
3981 if (specific
->check
.f1m
== gfc_check_min_max
3982 || specific
->check
.f1m
== gfc_check_min_max_integer
3983 || specific
->check
.f1m
== gfc_check_min_max_real
3984 || specific
->check
.f1m
== gfc_check_min_max_double
)
3985 return (*specific
->check
.f1m
) (*ap
);
3987 if (!sort_actual (specific
->name
, ap
, specific
->formal
, &expr
->where
))
3990 if (specific
->check
.f3ml
== gfc_check_minloc_maxloc
)
3991 /* This is special because we might have to reorder the argument list. */
3992 t
= gfc_check_minloc_maxloc (*ap
);
3993 else if (specific
->check
.f3red
== gfc_check_minval_maxval
)
3994 /* This is also special because we also might have to reorder the
3996 t
= gfc_check_minval_maxval (*ap
);
3997 else if (specific
->check
.f3red
== gfc_check_product_sum
)
3998 /* Same here. The difference to the previous case is that we allow a
3999 general numeric type. */
4000 t
= gfc_check_product_sum (*ap
);
4001 else if (specific
->check
.f3red
== gfc_check_transf_bit_intrins
)
4002 /* Same as for PRODUCT and SUM, but different checks. */
4003 t
= gfc_check_transf_bit_intrins (*ap
);
4006 if (specific
->check
.f1
== NULL
)
4008 t
= check_arglist (ap
, specific
, error_flag
);
4010 expr
->ts
= specific
->ts
;
4013 t
= do_check (specific
, *ap
);
4016 /* Check conformance of elemental intrinsics. */
4017 if (t
&& specific
->elemental
)
4020 gfc_expr
*first_expr
;
4021 arg
= expr
->value
.function
.actual
;
4023 /* There is no elemental intrinsic without arguments. */
4024 gcc_assert(arg
!= NULL
);
4025 first_expr
= arg
->expr
;
4027 for ( ; arg
&& arg
->expr
; arg
= arg
->next
, n
++)
4028 if (!gfc_check_conformance (first_expr
, arg
->expr
,
4029 "arguments '%s' and '%s' for "
4031 gfc_current_intrinsic_arg
[0]->name
,
4032 gfc_current_intrinsic_arg
[n
]->name
,
4033 gfc_current_intrinsic
))
4038 remove_nullargs (ap
);
4044 /* Check whether an intrinsic belongs to whatever standard the user
4045 has chosen, taking also into account -fall-intrinsics. Here, no
4046 warning/error is emitted; but if symstd is not NULL, it is pointed to a
4047 textual representation of the symbols standard status (like
4048 "new in Fortran 2008", "a GNU extension" or "obsolescent in Fortran 95") that
4049 can be used to construct a detailed warning/error message in case of
4053 gfc_check_intrinsic_standard (const gfc_intrinsic_sym
* isym
,
4054 const char** symstd
, bool silent
, locus where
)
4056 const char* symstd_msg
;
4058 /* For -fall-intrinsics, just succeed. */
4059 if (gfc_option
.flag_all_intrinsics
)
4062 /* Find the symbol's standard message for later usage. */
4063 switch (isym
->standard
)
4066 symstd_msg
= "available since Fortran 77";
4069 case GFC_STD_F95_OBS
:
4070 symstd_msg
= "obsolescent in Fortran 95";
4073 case GFC_STD_F95_DEL
:
4074 symstd_msg
= "deleted in Fortran 95";
4078 symstd_msg
= "new in Fortran 95";
4082 symstd_msg
= "new in Fortran 2003";
4086 symstd_msg
= "new in Fortran 2008";
4089 case GFC_STD_F2008_TS
:
4090 symstd_msg
= "new in TS 29113";
4094 symstd_msg
= "a GNU Fortran extension";
4097 case GFC_STD_LEGACY
:
4098 symstd_msg
= "for backward compatibility";
4102 gfc_internal_error ("Invalid standard code on intrinsic '%s' (%d)",
4103 isym
->name
, isym
->standard
);
4106 /* If warning about the standard, warn and succeed. */
4107 if (gfc_option
.warn_std
& isym
->standard
)
4109 /* Do only print a warning if not a GNU extension. */
4110 if (!silent
&& isym
->standard
!= GFC_STD_GNU
)
4111 gfc_warning ("Intrinsic '%s' (is %s) is used at %L",
4112 isym
->name
, _(symstd_msg
), &where
);
4117 /* If allowing the symbol's standard, succeed, too. */
4118 if (gfc_option
.allow_std
& isym
->standard
)
4121 /* Otherwise, fail. */
4123 *symstd
= _(symstd_msg
);
4128 /* See if a function call corresponds to an intrinsic function call.
4131 MATCH_YES if the call corresponds to an intrinsic, simplification
4132 is done if possible.
4134 MATCH_NO if the call does not correspond to an intrinsic
4136 MATCH_ERROR if the call corresponds to an intrinsic but there was an
4137 error during the simplification process.
4139 The error_flag parameter enables an error reporting. */
4142 gfc_intrinsic_func_interface (gfc_expr
*expr
, int error_flag
)
4144 gfc_intrinsic_sym
*isym
, *specific
;
4145 gfc_actual_arglist
*actual
;
4149 if (expr
->value
.function
.isym
!= NULL
)
4150 return (!do_simplify(expr
->value
.function
.isym
, expr
))
4151 ? MATCH_ERROR
: MATCH_YES
;
4154 gfc_push_suppress_errors ();
4157 for (actual
= expr
->value
.function
.actual
; actual
; actual
= actual
->next
)
4158 if (actual
->expr
!= NULL
)
4159 flag
|= (actual
->expr
->ts
.type
!= BT_INTEGER
4160 && actual
->expr
->ts
.type
!= BT_CHARACTER
);
4162 name
= expr
->symtree
->n
.sym
->name
;
4164 if (expr
->symtree
->n
.sym
->intmod_sym_id
)
4166 gfc_isym_id id
= gfc_isym_id_by_intmod_sym (expr
->symtree
->n
.sym
);
4167 isym
= specific
= gfc_intrinsic_function_by_id (id
);
4170 isym
= specific
= gfc_find_function (name
);
4175 gfc_pop_suppress_errors ();
4179 if ((isym
->id
== GFC_ISYM_REAL
|| isym
->id
== GFC_ISYM_DBLE
4180 || isym
->id
== GFC_ISYM_CMPLX
)
4181 && gfc_init_expr_flag
4182 && !gfc_notify_std (GFC_STD_F2003
, "Function '%s' as initialization "
4183 "expression at %L", name
, &expr
->where
))
4186 gfc_pop_suppress_errors ();
4190 gfc_current_intrinsic_where
= &expr
->where
;
4192 /* Bypass the generic list for min, max and ISO_C_Binding's c_loc. */
4193 if (isym
->check
.f1m
== gfc_check_min_max
)
4195 init_arglist (isym
);
4197 if (isym
->check
.f1m(expr
->value
.function
.actual
))
4201 gfc_pop_suppress_errors ();
4205 /* If the function is generic, check all of its specific
4206 incarnations. If the generic name is also a specific, we check
4207 that name last, so that any error message will correspond to the
4209 gfc_push_suppress_errors ();
4213 for (specific
= isym
->specific_head
; specific
;
4214 specific
= specific
->next
)
4216 if (specific
== isym
)
4218 if (check_specific (specific
, expr
, 0))
4220 gfc_pop_suppress_errors ();
4226 gfc_pop_suppress_errors ();
4228 if (!check_specific (isym
, expr
, error_flag
))
4231 gfc_pop_suppress_errors ();
4238 expr
->value
.function
.isym
= specific
;
4239 gfc_intrinsic_symbol (expr
->symtree
->n
.sym
);
4242 gfc_pop_suppress_errors ();
4244 if (!do_simplify (specific
, expr
))
4247 /* F95, 7.1.6.1, Initialization expressions
4248 (4) An elemental intrinsic function reference of type integer or
4249 character where each argument is an initialization expression
4250 of type integer or character
4252 F2003, 7.1.7 Initialization expression
4253 (4) A reference to an elemental standard intrinsic function,
4254 where each argument is an initialization expression */
4256 if (gfc_init_expr_flag
&& isym
->elemental
&& flag
4257 && !gfc_notify_std (GFC_STD_F2003
, "Elemental function as "
4258 "initialization expression with non-integer/non-"
4259 "character arguments at %L", &expr
->where
))
4266 /* See if a CALL statement corresponds to an intrinsic subroutine.
4267 Returns MATCH_YES if the subroutine corresponds to an intrinsic,
4268 MATCH_NO if not, and MATCH_ERROR if there was an error (but did
4272 gfc_intrinsic_sub_interface (gfc_code
*c
, int error_flag
)
4274 gfc_intrinsic_sym
*isym
;
4277 name
= c
->symtree
->n
.sym
->name
;
4279 if (c
->symtree
->n
.sym
->intmod_sym_id
)
4282 id
= gfc_isym_id_by_intmod_sym (c
->symtree
->n
.sym
);
4283 isym
= gfc_intrinsic_subroutine_by_id (id
);
4286 isym
= gfc_find_subroutine (name
);
4291 gfc_push_suppress_errors ();
4293 init_arglist (isym
);
4295 if (!sort_actual (name
, &c
->ext
.actual
, isym
->formal
, &c
->loc
))
4298 if (isym
->check
.f1
!= NULL
)
4300 if (!do_check (isym
, c
->ext
.actual
))
4305 if (!check_arglist (&c
->ext
.actual
, isym
, 1))
4309 /* The subroutine corresponds to an intrinsic. Allow errors to be
4310 seen at this point. */
4312 gfc_pop_suppress_errors ();
4314 c
->resolved_isym
= isym
;
4315 if (isym
->resolve
.s1
!= NULL
)
4316 isym
->resolve
.s1 (c
);
4319 c
->resolved_sym
= gfc_get_intrinsic_sub_symbol (isym
->lib_name
);
4320 c
->resolved_sym
->attr
.elemental
= isym
->elemental
;
4323 if (gfc_pure (NULL
) && !isym
->pure
)
4325 gfc_error ("Subroutine call to intrinsic '%s' at %L is not PURE", name
,
4330 c
->resolved_sym
->attr
.noreturn
= isym
->noreturn
;
4336 gfc_pop_suppress_errors ();
4341 /* Call gfc_convert_type() with warning enabled. */
4344 gfc_convert_type (gfc_expr
*expr
, gfc_typespec
*ts
, int eflag
)
4346 return gfc_convert_type_warn (expr
, ts
, eflag
, 1);
4350 /* Try to convert an expression (in place) from one type to another.
4351 'eflag' controls the behavior on error.
4353 The possible values are:
4355 1 Generate a gfc_error()
4356 2 Generate a gfc_internal_error().
4358 'wflag' controls the warning related to conversion. */
4361 gfc_convert_type_warn (gfc_expr
*expr
, gfc_typespec
*ts
, int eflag
, int wflag
)
4363 gfc_intrinsic_sym
*sym
;
4364 gfc_typespec from_ts
;
4370 from_ts
= expr
->ts
; /* expr->ts gets clobbered */
4372 if (ts
->type
== BT_UNKNOWN
)
4375 /* NULL and zero size arrays get their type here. */
4376 if (expr
->expr_type
== EXPR_NULL
4377 || (expr
->expr_type
== EXPR_ARRAY
&& expr
->value
.constructor
== NULL
))
4379 /* Sometimes the RHS acquire the type. */
4384 if (expr
->ts
.type
== BT_UNKNOWN
)
4387 if (expr
->ts
.type
== BT_DERIVED
&& ts
->type
== BT_DERIVED
4388 && gfc_compare_types (&expr
->ts
, ts
))
4391 sym
= find_conv (&expr
->ts
, ts
);
4395 /* At this point, a conversion is necessary. A warning may be needed. */
4396 if ((gfc_option
.warn_std
& sym
->standard
) != 0)
4398 gfc_warning_now ("Extension: Conversion from %s to %s at %L",
4399 gfc_typename (&from_ts
), gfc_typename (ts
),
4404 if (gfc_option
.flag_range_check
4405 && expr
->expr_type
== EXPR_CONSTANT
4406 && from_ts
.type
== ts
->type
)
4408 /* Do nothing. Constants of the same type are range-checked
4409 elsewhere. If a value too large for the target type is
4410 assigned, an error is generated. Not checking here avoids
4411 duplications of warnings/errors.
4412 If range checking was disabled, but -Wconversion enabled,
4413 a non range checked warning is generated below. */
4415 else if (from_ts
.type
== BT_LOGICAL
|| ts
->type
== BT_LOGICAL
)
4417 /* Do nothing. This block exists only to simplify the other
4418 else-if expressions.
4419 LOGICAL <> LOGICAL no warning, independent of kind values
4420 LOGICAL <> INTEGER extension, warned elsewhere
4421 LOGICAL <> REAL invalid, error generated elsewhere
4422 LOGICAL <> COMPLEX invalid, error generated elsewhere */
4424 else if (from_ts
.type
== ts
->type
4425 || (from_ts
.type
== BT_INTEGER
&& ts
->type
== BT_REAL
)
4426 || (from_ts
.type
== BT_INTEGER
&& ts
->type
== BT_COMPLEX
)
4427 || (from_ts
.type
== BT_REAL
&& ts
->type
== BT_COMPLEX
))
4429 /* Larger kinds can hold values of smaller kinds without problems.
4430 Hence, only warn if target kind is smaller than the source
4431 kind - or if -Wconversion-extra is specified. */
4432 if (gfc_option
.warn_conversion_extra
)
4433 gfc_warning_now ("Conversion from %s to %s at %L",
4434 gfc_typename (&from_ts
), gfc_typename (ts
),
4436 else if (gfc_option
.gfc_warn_conversion
4437 && from_ts
.kind
> ts
->kind
)
4438 gfc_warning_now ("Possible change of value in conversion "
4439 "from %s to %s at %L", gfc_typename (&from_ts
),
4440 gfc_typename (ts
), &expr
->where
);
4442 else if ((from_ts
.type
== BT_REAL
&& ts
->type
== BT_INTEGER
)
4443 || (from_ts
.type
== BT_COMPLEX
&& ts
->type
== BT_INTEGER
)
4444 || (from_ts
.type
== BT_COMPLEX
&& ts
->type
== BT_REAL
))
4446 /* Conversion from REAL/COMPLEX to INTEGER or COMPLEX to REAL
4447 usually comes with a loss of information, regardless of kinds. */
4448 if (gfc_option
.warn_conversion_extra
4449 || gfc_option
.gfc_warn_conversion
)
4450 gfc_warning_now ("Possible change of value in conversion "
4451 "from %s to %s at %L", gfc_typename (&from_ts
),
4452 gfc_typename (ts
), &expr
->where
);
4454 else if (from_ts
.type
== BT_HOLLERITH
|| ts
->type
== BT_HOLLERITH
)
4456 /* If HOLLERITH is involved, all bets are off. */
4457 if (gfc_option
.warn_conversion_extra
4458 || gfc_option
.gfc_warn_conversion
)
4459 gfc_warning_now ("Conversion from %s to %s at %L",
4460 gfc_typename (&from_ts
), gfc_typename (ts
),
4467 /* Insert a pre-resolved function call to the right function. */
4468 old_where
= expr
->where
;
4470 shape
= expr
->shape
;
4472 new_expr
= gfc_get_expr ();
4475 new_expr
= gfc_build_conversion (new_expr
);
4476 new_expr
->value
.function
.name
= sym
->lib_name
;
4477 new_expr
->value
.function
.isym
= sym
;
4478 new_expr
->where
= old_where
;
4479 new_expr
->rank
= rank
;
4480 new_expr
->shape
= gfc_copy_shape (shape
, rank
);
4482 gfc_get_ha_sym_tree (sym
->name
, &new_expr
->symtree
);
4483 new_expr
->symtree
->n
.sym
->result
= new_expr
->symtree
->n
.sym
;
4484 new_expr
->symtree
->n
.sym
->ts
= *ts
;
4485 new_expr
->symtree
->n
.sym
->attr
.flavor
= FL_PROCEDURE
;
4486 new_expr
->symtree
->n
.sym
->attr
.function
= 1;
4487 new_expr
->symtree
->n
.sym
->attr
.elemental
= 1;
4488 new_expr
->symtree
->n
.sym
->attr
.pure
= 1;
4489 new_expr
->symtree
->n
.sym
->attr
.referenced
= 1;
4490 gfc_intrinsic_symbol(new_expr
->symtree
->n
.sym
);
4491 gfc_commit_symbol (new_expr
->symtree
->n
.sym
);
4498 if (gfc_is_constant_expr (expr
->value
.function
.actual
->expr
)
4499 && !do_simplify (sym
, expr
))
4504 return false; /* Error already generated in do_simplify() */
4512 gfc_error ("Can't convert %s to %s at %L",
4513 gfc_typename (&from_ts
), gfc_typename (ts
), &expr
->where
);
4517 gfc_internal_error ("Can't convert %s to %s at %L",
4518 gfc_typename (&from_ts
), gfc_typename (ts
),
4525 gfc_convert_chartype (gfc_expr
*expr
, gfc_typespec
*ts
)
4527 gfc_intrinsic_sym
*sym
;
4533 gcc_assert (expr
->ts
.type
== BT_CHARACTER
&& ts
->type
== BT_CHARACTER
);
4535 sym
= find_char_conv (&expr
->ts
, ts
);
4538 /* Insert a pre-resolved function call to the right function. */
4539 old_where
= expr
->where
;
4541 shape
= expr
->shape
;
4543 new_expr
= gfc_get_expr ();
4546 new_expr
= gfc_build_conversion (new_expr
);
4547 new_expr
->value
.function
.name
= sym
->lib_name
;
4548 new_expr
->value
.function
.isym
= sym
;
4549 new_expr
->where
= old_where
;
4550 new_expr
->rank
= rank
;
4551 new_expr
->shape
= gfc_copy_shape (shape
, rank
);
4553 gfc_get_ha_sym_tree (sym
->name
, &new_expr
->symtree
);
4554 new_expr
->symtree
->n
.sym
->ts
= *ts
;
4555 new_expr
->symtree
->n
.sym
->attr
.flavor
= FL_PROCEDURE
;
4556 new_expr
->symtree
->n
.sym
->attr
.function
= 1;
4557 new_expr
->symtree
->n
.sym
->attr
.elemental
= 1;
4558 new_expr
->symtree
->n
.sym
->attr
.referenced
= 1;
4559 gfc_intrinsic_symbol(new_expr
->symtree
->n
.sym
);
4560 gfc_commit_symbol (new_expr
->symtree
->n
.sym
);
4567 if (gfc_is_constant_expr (expr
->value
.function
.actual
->expr
)
4568 && !do_simplify (sym
, expr
))
4570 /* Error already generated in do_simplify() */
4578 /* Check if the passed name is name of an intrinsic (taking into account the
4579 current -std=* and -fall-intrinsic settings). If it is, see if we should
4580 warn about this as a user-procedure having the same name as an intrinsic
4581 (-Wintrinsic-shadow enabled) and do so if we should. */
4584 gfc_warn_intrinsic_shadow (const gfc_symbol
* sym
, bool in_module
, bool func
)
4586 gfc_intrinsic_sym
* isym
;
4588 /* If the warning is disabled, do nothing at all. */
4589 if (!gfc_option
.warn_intrinsic_shadow
)
4592 /* Try to find an intrinsic of the same name. */
4594 isym
= gfc_find_function (sym
->name
);
4596 isym
= gfc_find_subroutine (sym
->name
);
4598 /* If no intrinsic was found with this name or it's not included in the
4599 selected standard, everything's fine. */
4600 if (!isym
|| !gfc_check_intrinsic_standard (isym
, NULL
, true,
4604 /* Emit the warning. */
4605 if (in_module
|| sym
->ns
->proc_name
)
4606 gfc_warning ("'%s' declared at %L may shadow the intrinsic of the same"
4607 " name. In order to call the intrinsic, explicit INTRINSIC"
4608 " declarations may be required.",
4609 sym
->name
, &sym
->declared_at
);
4611 gfc_warning ("'%s' declared at %L is also the name of an intrinsic. It can"
4612 " only be called via an explicit interface or if declared"
4613 " EXTERNAL.", sym
->name
, &sym
->declared_at
);