]> git.ipfire.org Git - thirdparty/gcc.git/blame - libgfortran/libgfortran.h
Daily bump.
[thirdparty/gcc.git] / libgfortran / libgfortran.h
CommitLineData
4c4b3eb0 1/* Common declarations for all of libgfortran.
99dee823 2 Copyright (C) 2002-2021 Free Software Foundation, Inc.
6de9cd9a
DN
3 Contributed by Paul Brook <paul@nowt.org>, and
4 Andy Vaught <andy@xena.eas.asu.edu>
5
bb408e87 6This file is part of the GNU Fortran runtime library (libgfortran).
6de9cd9a 7
748086b7
JJ
8Libgfortran is free software; you can redistribute it and/or modify
9it under the terms of the GNU General Public License as published by
10the Free Software Foundation; either version 3, or (at your option)
11any later version.
6de9cd9a 12
57dea9f6 13Libgfortran is distributed in the hope that it will be useful,
6de9cd9a
DN
14but WITHOUT ANY WARRANTY; without even the implied warranty of
15MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
748086b7 16GNU General Public License for more details.
6de9cd9a 17
748086b7
JJ
18Under Section 7 of GPL version 3, you are granted additional
19permissions described in the GCC Runtime Library Exception, version
203.1, as published by the Free Software Foundation.
57dea9f6 21
748086b7
JJ
22You should have received a copy of the GNU General Public License and
23a copy of the GCC Runtime Library Exception along with this program;
24see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
25<http://www.gnu.org/licenses/>. */
6de9cd9a
DN
26
27#ifndef LIBGFOR_H
28#define LIBGFOR_H
29
196c8bc8
KT
30/* Ensure that ANSI conform stdio is used. This needs to be set before
31 any system header file is included. */
32#if defined __MINGW32__
33# define _POSIX 1
34# define gfc_printf gnu_printf
35#else
36# define gfc_printf __printf__
37#endif
38
200809cb
DE
39/* config.h MUST be first because it can affect system headers. */
40#include "config.h"
41
21423a1d 42#include <ctype.h>
d8163f5c 43#include <stdio.h>
887d9b8b 44#include <stdlib.h>
6de9cd9a 45#include <stddef.h>
cdc5524f 46#include <float.h>
7f763922 47#include <stdarg.h>
f5e3ed2d 48#include <stdbool.h>
6de9cd9a 49
62755fd5
TG
50#if HAVE_COMPLEX_H
51/* Must appear before math.h on VMS systems. */
52# include <complex.h>
53#else
54#define complex __complex__
55#endif
56
57#include <math.h>
58
1ec601bf
FXC
59/* If we're support quad-precision floating-point type, include the
60 header to our support library. */
61#ifdef HAVE_FLOAT128
62# include "quadmath_weak.h"
63#endif
64
196c8bc8
KT
65#ifdef __MINGW32__
66extern float __strtof (const char *, char **);
67#define gfc_strtof __strtof
68extern double __strtod (const char *, char **);
69#define gfc_strtod __strtod
70extern long double __strtold (const char *, char **);
71#define gfc_strtold __strtold
72#else
73#define gfc_strtof strtof
74#define gfc_strtod strtod
75#define gfc_strtold strtold
76#endif
77
d74b97cc
FXC
78#include "../gcc/fortran/libgfortran.h"
79
1409cd0b
FXC
80#include "c99_protos.h"
81
6e4d9244
EB
82#if HAVE_IEEEFP_H
83#include <ieeefp.h>
84#endif
85
4c4b3eb0 86#include "gstdint.h"
3969c39f 87
6de9cd9a
DN
88#if HAVE_SYS_TYPES_H
89#include <sys/types.h>
90#endif
a4384bad 91
edaaef60
JB
92#ifdef HAVE_SYS_UIO_H
93#include <sys/uio.h>
94#endif
95
a4384bad
JB
96#ifdef __MINGW32__
97typedef off64_t gfc_offset;
98#else
81f4be3c 99typedef off_t gfc_offset;
a4384bad 100#endif
6de9cd9a
DN
101
102#ifndef NULL
103#define NULL (void *) 0
104#endif
105
433d6b39 106
21423a1d
FXC
107/* These functions from <ctype.h> should only be used on values that can be
108 represented as unsigned char, otherwise the behavior is undefined.
109 Some targets have a char type that is signed, so we cast the argument
110 to unsigned char. See:
111 https://gcc.gnu.org/bugzilla/show_bug.cgi?id=95177
112 https://wiki.sei.cmu.edu/confluence/x/BNcxBQ
113 */
114
115#define safe_isalnum(x) isalnum((unsigned char) (x))
116#define safe_isdigit(x) isdigit((unsigned char) (x))
117#define safe_tolower(x) tolower((unsigned char) (x))
118#define safe_toupper(x) toupper((unsigned char) (x))
119
120
433d6b39
TB
121/* The following macros can be used to annotate conditions which are likely or
122 unlikely to be true. Avoid using them when a condition is only slightly
123 more likely/less unlikely than average to avoid the performance penalties of
124 branch misprediction. In addition, as __builtin_expect overrides the compiler
125 heuristic, do not use in conditions where one of the branches ends with a
126 call to a function with __attribute__((noreturn)): the compiler internal
127 heuristic will mark this branch as much less likely as unlikely() would
128 do. */
129
9731c4a3
TB
130#define likely(x) __builtin_expect(!!(x), 1)
131#define unlikely(x) __builtin_expect(!!(x), 0)
6de9cd9a 132
20305b50
TK
133/* This macro can be used to annotate conditions which we know to
134 be true, so that the compiler can optimize based on the condition. */
135
136#define GFC_ASSERT(EXPR) \
137 ((void)(__builtin_expect (!(EXPR), 0) ? __builtin_unreachable (), 0 : 0))
0dce3ca1 138
44720bef
JB
139/* Make sure we have ptrdiff_t. */
140#ifndef HAVE_PTRDIFF_T
141typedef intptr_t ptrdiff_t;
c7d0f4d5
TK
142#endif
143
db8092dc
FXC
144/* On mingw, work around the buggy Windows snprintf() by using the one
145 mingw provides, __mingw_snprintf(). We also provide a prototype for
146 __mingw_snprintf(), because the mingw headers currently don't have one. */
147#if HAVE_MINGW_SNPRINTF
9731c4a3 148extern int __mingw_snprintf (char *, size_t, const char *, ...)
6a21bcbe 149 __attribute__ ((format (gnu_printf, 3, 4)));
db8092dc
FXC
150#undef snprintf
151#define snprintf __mingw_snprintf
d30fe1c5
JB
152/* Fallback to sprintf if target does not have snprintf. */
153#elif !defined(HAVE_SNPRINTF)
154#undef snprintf
155#define snprintf(str, size, ...) sprintf (str, __VA_ARGS__)
db8092dc
FXC
156#endif
157
158
7d7b8bfe
RH
159/* For a library, a standard prefix is a requirement in order to partition
160 the namespace. IPREFIX is for symbols intended to be internal to the
161 library. */
162#define PREFIX(x) _gfortran_ ## x
163#define IPREFIX(x) _gfortrani_ ## x
164
165/* Magic to rename a symbol at the compiler level. You continue to refer
166 to the symbol as OLD in the source, but it'll be named NEW in the asm. */
167#define sym_rename(old, new) sym_rename1(old, __USER_LABEL_PREFIX__, new)
168#define sym_rename1(old, ulp, new) sym_rename2(old, ulp, new)
169#define sym_rename2(old, ulp, new) extern __typeof(old) old __asm__(#ulp #new)
170
171/* There are several classifications of routines:
172
173 (1) Symbols used only within the library,
174 (2) Symbols to be exported from the library,
175 (3) Symbols to be exported from the library, but
176 also used inside the library.
177
178 By telling the compiler about these different classifications we can
179 tightly control the interface seen by the user, and get better code
180 from the compiler at the same time.
181
182 One of the following should be used immediately after the declaration
183 of each symbol:
184
185 internal_proto Marks a symbol used only within the library,
186 and adds IPREFIX to the assembly-level symbol
187 name. The later is important for maintaining
188 the namespace partition for the static library.
189
190 export_proto Marks a symbol to be exported, and adds PREFIX
191 to the assembly-level symbol name.
192
193 export_proto_np Marks a symbol to be exported without adding PREFIX.
194
195 iexport_proto Marks a function to be exported, but with the
196 understanding that it can be used inside as well.
197
198 iexport_data_proto Similarly, marks a data symbol to be exported.
199 Unfortunately, some systems can't play the hidden
200 symbol renaming trick on data symbols, thanks to
201 the horribleness of COPY relocations.
202
203 If iexport_proto or iexport_data_proto is used, you must also use
204 iexport or iexport_data after the *definition* of the symbol. */
205
206#if defined(HAVE_ATTRIBUTE_VISIBILITY)
207# define internal_proto(x) \
208 sym_rename(x, IPREFIX (x)) __attribute__((__visibility__("hidden")))
209#else
210# define internal_proto(x) sym_rename(x, IPREFIX(x))
211#endif
212
213#if defined(HAVE_ATTRIBUTE_VISIBILITY) && defined(HAVE_ATTRIBUTE_ALIAS)
214# define export_proto(x) sym_rename(x, PREFIX(x))
215# define export_proto_np(x) extern char swallow_semicolon
216# define iexport_proto(x) internal_proto(x)
3075a4cd
FXC
217# define iexport(x) iexport1(x, IPREFIX(x))
218# define iexport1(x,y) iexport2(x,y)
219# define iexport2(x,y) \
29d24852 220 extern __typeof(x) PREFIX(x) __attribute__((__alias__(#y), __copy__ (x)))
7d7b8bfe
RH
221#else
222# define export_proto(x) sym_rename(x, PREFIX(x))
223# define export_proto_np(x) extern char swallow_semicolon
224# define iexport_proto(x) export_proto(x)
225# define iexport(x) extern char swallow_semicolon
226#endif
227
228/* TODO: detect the case when we *can* hide the symbol. */
229#define iexport_data_proto(x) export_proto(x)
230#define iexport_data(x) extern char swallow_semicolon
6de9cd9a
DN
231
232/* The only reliable way to get the offset of a field in a struct
233 in a system independent way is via this macro. */
234#ifndef offsetof
235#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *) 0)->MEMBER)
236#endif
237
b1012ca4
FXC
238/* The C99 classification macros isfinite, isinf, isnan, isnormal
239 and signbit are broken or inconsistent on quite a few targets.
240 So, we use GCC's builtins instead.
e88334a6 241
b1012ca4
FXC
242 Another advantage for GCC's builtins for these type-generic macros
243 is that it handles floating-point types that the system headers
244 may not support (like __float128). */
e88334a6 245
118ea208 246#undef isnan
b1012ca4
FXC
247#define isnan(x) __builtin_isnan(x)
248#undef isfinite
249#define isfinite(x) __builtin_isfinite(x)
250#undef isinf
251#define isinf(x) __builtin_isinf(x)
252#undef isnormal
253#define isnormal(x) __builtin_isnormal(x)
254#undef signbit
255#define signbit(x) __builtin_signbit(x)
69d3c9a4 256
32aa3bff 257#include "kinds.h"
6de9cd9a 258
566ffce8
JD
259/* Define the type used for the current record number for large file I/O.
260 The size must be consistent with the size defined on the compiler side. */
261#ifdef HAVE_GFC_INTEGER_8
91b30ee5 262typedef GFC_INTEGER_8 GFC_IO_INT;
566ffce8
JD
263#else
264#ifdef HAVE_GFC_INTEGER_4
91b30ee5 265typedef GFC_INTEGER_4 GFC_IO_INT;
566ffce8
JD
266#else
267#error "GFC_INTEGER_4 should be available for the library to compile".
268#endif
269#endif
270
da17f559
PB
271/* The following two definitions must be consistent with the types used
272 by the compiler. */
273/* The type used of array indices, amongst other things. */
44720bef 274typedef ptrdiff_t index_type;
4b267817 275
d7177ab2 276/* The type used for the lengths of character variables. */
f622221a 277typedef size_t gfc_charlen_type;
6de9cd9a 278
4b267817
FXC
279/* Definitions of CHARACTER data types:
280 - CHARACTER(KIND=1) corresponds to the C char type,
281 - CHARACTER(KIND=4) corresponds to an unsigned 32-bit integer. */
282typedef GFC_UINTEGER_4 gfc_char4_t;
283
284/* Byte size of character kinds. For the kinds currently supported, it's
285 simply equal to the kind parameter itself. */
286#define GFC_SIZE_OF_CHAR_KIND(kind) (kind)
287
28dc6b33 288#define GFOR_POINTER_TO_L1(p, kind) \
5675291d 289 ((__BYTE_ORDER__ == __ORDER_BIG_ENDIAN__ ? 1: 0) * (kind - 1) + (GFC_LOGICAL_1 *)(p))
6de9cd9a 290
567c915b
TK
291#define GFC_INTEGER_1_HUGE \
292 (GFC_INTEGER_1)((((GFC_UINTEGER_1)1) << 7) - 1)
293#define GFC_INTEGER_2_HUGE \
294 (GFC_INTEGER_2)((((GFC_UINTEGER_2)1) << 15) - 1)
6de9cd9a
DN
295#define GFC_INTEGER_4_HUGE \
296 (GFC_INTEGER_4)((((GFC_UINTEGER_4)1) << 31) - 1)
297#define GFC_INTEGER_8_HUGE \
298 (GFC_INTEGER_8)((((GFC_UINTEGER_8)1) << 63) - 1)
644cb69f
FXC
299#ifdef HAVE_GFC_INTEGER_16
300#define GFC_INTEGER_16_HUGE \
301 (GFC_INTEGER_16)((((GFC_UINTEGER_16)1) << 127) - 1)
302#endif
303
80927a56
JJ
304/* M{IN,AX}{LOC,VAL} need also infinities and NaNs if supported. */
305
c87cce5a 306#if __FLT_HAS_INFINITY__
80927a56
JJ
307# define GFC_REAL_4_INFINITY __builtin_inff ()
308#endif
c87cce5a 309#if __DBL_HAS_INFINITY__
80927a56
JJ
310# define GFC_REAL_8_INFINITY __builtin_inf ()
311#endif
c87cce5a 312#if __LDBL_HAS_INFINITY__
80927a56
JJ
313# ifdef HAVE_GFC_REAL_10
314# define GFC_REAL_10_INFINITY __builtin_infl ()
315# endif
316# ifdef HAVE_GFC_REAL_16
1ec601bf
FXC
317# ifdef GFC_REAL_16_IS_LONG_DOUBLE
318# define GFC_REAL_16_INFINITY __builtin_infl ()
319# else
320# define GFC_REAL_16_INFINITY __builtin_infq ()
321# endif
80927a56
JJ
322# endif
323#endif
c87cce5a 324#if __FLT_HAS_QUIET_NAN__
80927a56
JJ
325# define GFC_REAL_4_QUIET_NAN __builtin_nanf ("")
326#endif
c87cce5a 327#if __DBL_HAS_QUIET_NAN__
80927a56
JJ
328# define GFC_REAL_8_QUIET_NAN __builtin_nan ("")
329#endif
c87cce5a 330#if __LDBL_HAS_QUIET_NAN__
80927a56
JJ
331# ifdef HAVE_GFC_REAL_10
332# define GFC_REAL_10_QUIET_NAN __builtin_nanl ("")
333# endif
334# ifdef HAVE_GFC_REAL_16
1ec601bf
FXC
335# ifdef GFC_REAL_16_IS_LONG_DOUBLE
336# define GFC_REAL_16_QUIET_NAN __builtin_nanl ("")
337# else
338# define GFC_REAL_16_QUIET_NAN nanq ("")
339# endif
80927a56
JJ
340# endif
341#endif
6de9cd9a
DN
342
343typedef struct descriptor_dimension
344{
dfb55fdc 345 index_type _stride;
21d1335b 346 index_type lower_bound;
dfb55fdc 347 index_type _ubound;
6de9cd9a
DN
348}
349descriptor_dimension;
350
7fb43006
PT
351typedef struct dtype_type
352{
353 size_t elem_len;
354 int version;
355 signed char rank;
356 signed char type;
357 signed short attribute;
358}
359dtype_type;
360
e9bfdf18 361#define GFC_ARRAY_DESCRIPTOR(type) \
6de9cd9a 362struct {\
21d1335b 363 type *base_addr;\
efd4dc1a 364 size_t offset;\
7fb43006 365 dtype_type dtype;\
ff3598bc 366 index_type span;\
e9bfdf18 367 descriptor_dimension dim[];\
6de9cd9a
DN
368}
369
370/* Commonly used array descriptor types. */
e9bfdf18
TK
371typedef GFC_ARRAY_DESCRIPTOR (void) gfc_array_void;
372typedef GFC_ARRAY_DESCRIPTOR (char) gfc_array_char;
373typedef GFC_ARRAY_DESCRIPTOR (GFC_INTEGER_1) gfc_array_i1;
374typedef GFC_ARRAY_DESCRIPTOR (GFC_INTEGER_2) gfc_array_i2;
375typedef GFC_ARRAY_DESCRIPTOR (GFC_INTEGER_4) gfc_array_i4;
376typedef GFC_ARRAY_DESCRIPTOR (GFC_INTEGER_8) gfc_array_i8;
01ce9e31 377typedef GFC_ARRAY_DESCRIPTOR (index_type) gfc_array_index_type;
644cb69f 378#ifdef HAVE_GFC_INTEGER_16
e9bfdf18 379typedef GFC_ARRAY_DESCRIPTOR (GFC_INTEGER_16) gfc_array_i16;
644cb69f 380#endif
e9bfdf18
TK
381typedef GFC_ARRAY_DESCRIPTOR (GFC_REAL_4) gfc_array_r4;
382typedef GFC_ARRAY_DESCRIPTOR (GFC_REAL_8) gfc_array_r8;
644cb69f 383#ifdef HAVE_GFC_REAL_10
e9bfdf18 384typedef GFC_ARRAY_DESCRIPTOR (GFC_REAL_10) gfc_array_r10;
644cb69f
FXC
385#endif
386#ifdef HAVE_GFC_REAL_16
e9bfdf18 387typedef GFC_ARRAY_DESCRIPTOR (GFC_REAL_16) gfc_array_r16;
644cb69f 388#endif
e9bfdf18
TK
389typedef GFC_ARRAY_DESCRIPTOR (GFC_COMPLEX_4) gfc_array_c4;
390typedef GFC_ARRAY_DESCRIPTOR (GFC_COMPLEX_8) gfc_array_c8;
644cb69f 391#ifdef HAVE_GFC_COMPLEX_10
e9bfdf18 392typedef GFC_ARRAY_DESCRIPTOR (GFC_COMPLEX_10) gfc_array_c10;
644cb69f
FXC
393#endif
394#ifdef HAVE_GFC_COMPLEX_16
e9bfdf18 395typedef GFC_ARRAY_DESCRIPTOR (GFC_COMPLEX_16) gfc_array_c16;
644cb69f 396#endif
e9bfdf18
TK
397typedef GFC_ARRAY_DESCRIPTOR (GFC_LOGICAL_1) gfc_array_l1;
398typedef GFC_ARRAY_DESCRIPTOR (GFC_LOGICAL_2) gfc_array_l2;
399typedef GFC_ARRAY_DESCRIPTOR (GFC_LOGICAL_4) gfc_array_l4;
400typedef GFC_ARRAY_DESCRIPTOR (GFC_LOGICAL_8) gfc_array_l8;
644cb69f 401#ifdef HAVE_GFC_LOGICAL_16
e9bfdf18 402typedef GFC_ARRAY_DESCRIPTOR (GFC_LOGICAL_16) gfc_array_l16;
644cb69f 403#endif
01ce9e31
TK
404
405typedef GFC_ARRAY_DESCRIPTOR (GFC_UINTEGER_1) gfc_array_s1;
406typedef GFC_ARRAY_DESCRIPTOR (GFC_UINTEGER_4) gfc_array_s4;
6de9cd9a 407
e9bfdf18
TK
408/* These are for when you actually want to declare a descriptor, as
409 opposed to a pointer to it. */
410
411#define GFC_FULL_ARRAY_DESCRIPTOR(r, type) \
412struct {\
413 type *base_addr;\
414 size_t offset;\
415 dtype_type dtype;\
416 index_type span;\
417 descriptor_dimension dim[r];\
418}
419
420typedef GFC_FULL_ARRAY_DESCRIPTOR (GFC_MAX_DIMENSIONS, GFC_INTEGER_4) gfc_full_array_i4;
421
7fb43006
PT
422#define GFC_DESCRIPTOR_RANK(desc) ((desc)->dtype.rank)
423#define GFC_DESCRIPTOR_TYPE(desc) ((desc)->dtype.type)
424#define GFC_DESCRIPTOR_SIZE(desc) ((desc)->dtype.elem_len)
21d1335b 425#define GFC_DESCRIPTOR_DATA(desc) ((desc)->base_addr)
6de9cd9a 426#define GFC_DESCRIPTOR_DTYPE(desc) ((desc)->dtype)
d514626e 427#define GFC_DESCRIPTOR_SPAN(desc) ((desc)->span)
6de9cd9a 428
21d1335b 429#define GFC_DIMENSION_LBOUND(dim) ((dim).lower_bound)
dfb55fdc
TK
430#define GFC_DIMENSION_UBOUND(dim) ((dim)._ubound)
431#define GFC_DIMENSION_STRIDE(dim) ((dim)._stride)
21d1335b 432#define GFC_DIMENSION_EXTENT(dim) ((dim)._ubound + 1 - (dim).lower_bound)
dfb55fdc
TK
433#define GFC_DIMENSION_SET(dim,lb,ub,str) \
434 do \
435 { \
21d1335b 436 (dim).lower_bound = lb; \
dfb55fdc
TK
437 (dim)._ubound = ub; \
438 (dim)._stride = str; \
439 } while (0)
440
441
21d1335b 442#define GFC_DESCRIPTOR_LBOUND(desc,i) ((desc)->dim[i].lower_bound)
dfb55fdc
TK
443#define GFC_DESCRIPTOR_UBOUND(desc,i) ((desc)->dim[i]._ubound)
444#define GFC_DESCRIPTOR_EXTENT(desc,i) ((desc)->dim[i]._ubound + 1 \
21d1335b 445 - (desc)->dim[i].lower_bound)
dfb55fdc
TK
446#define GFC_DESCRIPTOR_EXTENT_BYTES(desc,i) \
447 (GFC_DESCRIPTOR_EXTENT(desc,i) * GFC_DESCRIPTOR_SIZE(desc))
448
449#define GFC_DESCRIPTOR_STRIDE(desc,i) ((desc)->dim[i]._stride)
450#define GFC_DESCRIPTOR_STRIDE_BYTES(desc,i) \
451 (GFC_DESCRIPTOR_STRIDE(desc,i) * GFC_DESCRIPTOR_SIZE(desc))
452
75f2543f
TK
453/* Macros to get both the size and the type with a single masking operation */
454
c276d605 455#define GFC_DTYPE_SIZE_MASK (-((index_type) 1 << GFC_DTYPE_SIZE_SHIFT))
75f2543f
TK
456#define GFC_DTYPE_TYPE_SIZE_MASK (GFC_DTYPE_SIZE_MASK | GFC_DTYPE_TYPE_MASK)
457
7fb43006
PT
458#define GFC_DTYPE_TYPE_SIZE(desc) (( ((desc)->dtype.type << GFC_DTYPE_TYPE_SHIFT) \
459 | ((desc)->dtype.elem_len << GFC_DTYPE_SIZE_SHIFT) ) & GFC_DTYPE_TYPE_SIZE_MASK)
75f2543f 460
fa3c4d47
TK
461/* Macros to set size and type information. */
462
463#define GFC_DTYPE_COPY(a,b) do { (a)->dtype = (b)->dtype; } while(0)
7fb43006
PT
464#define GFC_DTYPE_IS_UNSET(a) (unlikely((a)->dtype.elem_len == 0))
465#define GFC_DTYPE_CLEAR(a) do { (a)->dtype.elem_len = 0; \
466 (a)->dtype.version = 0; \
467 (a)->dtype.rank = 0; \
468 (a)->dtype.type = 0; \
469 (a)->dtype.attribute = 0; \
470} while(0)
fa3c4d47 471
a11930ba 472#define GFC_DTYPE_INTEGER_1 ((BT_INTEGER << GFC_DTYPE_TYPE_SHIFT) \
75f2543f 473 | (sizeof(GFC_INTEGER_1) << GFC_DTYPE_SIZE_SHIFT))
a11930ba 474#define GFC_DTYPE_INTEGER_2 ((BT_INTEGER << GFC_DTYPE_TYPE_SHIFT) \
75f2543f 475 | (sizeof(GFC_INTEGER_2) << GFC_DTYPE_SIZE_SHIFT))
a11930ba 476#define GFC_DTYPE_INTEGER_4 ((BT_INTEGER << GFC_DTYPE_TYPE_SHIFT) \
75f2543f 477 | (sizeof(GFC_INTEGER_4) << GFC_DTYPE_SIZE_SHIFT))
a11930ba 478#define GFC_DTYPE_INTEGER_8 ((BT_INTEGER << GFC_DTYPE_TYPE_SHIFT) \
75f2543f
TK
479 | (sizeof(GFC_INTEGER_8) << GFC_DTYPE_SIZE_SHIFT))
480#ifdef HAVE_GFC_INTEGER_16
a11930ba 481#define GFC_DTYPE_INTEGER_16 ((BT_INTEGER << GFC_DTYPE_TYPE_SHIFT) \
75f2543f
TK
482 | (sizeof(GFC_INTEGER_16) << GFC_DTYPE_SIZE_SHIFT))
483#endif
484
a11930ba 485#define GFC_DTYPE_LOGICAL_1 ((BT_LOGICAL << GFC_DTYPE_TYPE_SHIFT) \
75f2543f 486 | (sizeof(GFC_LOGICAL_1) << GFC_DTYPE_SIZE_SHIFT))
a11930ba 487#define GFC_DTYPE_LOGICAL_2 ((BT_LOGICAL << GFC_DTYPE_TYPE_SHIFT) \
75f2543f 488 | (sizeof(GFC_LOGICAL_2) << GFC_DTYPE_SIZE_SHIFT))
a11930ba 489#define GFC_DTYPE_LOGICAL_4 ((BT_LOGICAL << GFC_DTYPE_TYPE_SHIFT) \
75f2543f 490 | (sizeof(GFC_LOGICAL_4) << GFC_DTYPE_SIZE_SHIFT))
a11930ba 491#define GFC_DTYPE_LOGICAL_8 ((BT_LOGICAL << GFC_DTYPE_TYPE_SHIFT) \
75f2543f
TK
492 | (sizeof(GFC_LOGICAL_8) << GFC_DTYPE_SIZE_SHIFT))
493#ifdef HAVE_GFC_LOGICAL_16
a11930ba 494#define GFC_DTYPE_LOGICAL_16 ((BT_LOGICAL << GFC_DTYPE_TYPE_SHIFT) \
75f2543f
TK
495 | (sizeof(GFC_LOGICAL_16) << GFC_DTYPE_SIZE_SHIFT))
496#endif
497
a11930ba 498#define GFC_DTYPE_REAL_4 ((BT_REAL << GFC_DTYPE_TYPE_SHIFT) \
75f2543f 499 | (sizeof(GFC_REAL_4) << GFC_DTYPE_SIZE_SHIFT))
a11930ba 500#define GFC_DTYPE_REAL_8 ((BT_REAL << GFC_DTYPE_TYPE_SHIFT) \
75f2543f
TK
501 | (sizeof(GFC_REAL_8) << GFC_DTYPE_SIZE_SHIFT))
502#ifdef HAVE_GFC_REAL_10
a11930ba 503#define GFC_DTYPE_REAL_10 ((BT_REAL << GFC_DTYPE_TYPE_SHIFT) \
75f2543f
TK
504 | (sizeof(GFC_REAL_10) << GFC_DTYPE_SIZE_SHIFT))
505#endif
506#ifdef HAVE_GFC_REAL_16
a11930ba 507#define GFC_DTYPE_REAL_16 ((BT_REAL << GFC_DTYPE_TYPE_SHIFT) \
75f2543f
TK
508 | (sizeof(GFC_REAL_16) << GFC_DTYPE_SIZE_SHIFT))
509#endif
510
a11930ba 511#define GFC_DTYPE_COMPLEX_4 ((BT_COMPLEX << GFC_DTYPE_TYPE_SHIFT) \
75f2543f 512 | (sizeof(GFC_COMPLEX_4) << GFC_DTYPE_SIZE_SHIFT))
a11930ba 513#define GFC_DTYPE_COMPLEX_8 ((BT_COMPLEX << GFC_DTYPE_TYPE_SHIFT) \
75f2543f
TK
514 | (sizeof(GFC_COMPLEX_8) << GFC_DTYPE_SIZE_SHIFT))
515#ifdef HAVE_GFC_COMPLEX_10
a11930ba 516#define GFC_DTYPE_COMPLEX_10 ((BT_COMPLEX << GFC_DTYPE_TYPE_SHIFT) \
75f2543f
TK
517 | (sizeof(GFC_COMPLEX_10) << GFC_DTYPE_SIZE_SHIFT))
518#endif
519#ifdef HAVE_GFC_COMPLEX_16
a11930ba 520#define GFC_DTYPE_COMPLEX_16 ((BT_COMPLEX << GFC_DTYPE_TYPE_SHIFT) \
75f2543f
TK
521 | (sizeof(GFC_COMPLEX_16) << GFC_DTYPE_SIZE_SHIFT))
522#endif
523
c7d0f4d5
TK
524/* Macros to determine the alignment of pointers. */
525
526#define GFC_UNALIGNED_2(x) (((uintptr_t)(x)) & \
527 (__alignof__(GFC_INTEGER_2) - 1))
528#define GFC_UNALIGNED_4(x) (((uintptr_t)(x)) & \
529 (__alignof__(GFC_INTEGER_4) - 1))
530#define GFC_UNALIGNED_8(x) (((uintptr_t)(x)) & \
531 (__alignof__(GFC_INTEGER_8) - 1))
532#ifdef HAVE_GFC_INTEGER_16
533#define GFC_UNALIGNED_16(x) (((uintptr_t)(x)) & \
534 (__alignof__(GFC_INTEGER_16) - 1))
535#endif
536
c2b00cdc
TK
537#define GFC_UNALIGNED_C4(x) (((uintptr_t)(x)) & \
538 (__alignof__(GFC_COMPLEX_4) - 1))
539
540#define GFC_UNALIGNED_C8(x) (((uintptr_t)(x)) & \
541 (__alignof__(GFC_COMPLEX_8) - 1))
542
6de9cd9a
DN
543/* Runtime library include. */
544#define stringize(x) expand_macro(x)
545#define expand_macro(x) # x
546
547/* Runtime options structure. */
548
549typedef struct
550{
fbac3363 551 int stdin_unit, stdout_unit, stderr_unit, optional_plus;
6de9cd9a
DN
552 int locus;
553
554 int separator_len;
555 const char *separator;
556
67c24a8b 557 int all_unbuffered, unbuffered_preconnected;
de8bd142 558 int fpe, backtrace;
c37b0163 559 int unformatted_buffer_size, formatted_buffer_size;
6de9cd9a
DN
560}
561options_t;
562
6de9cd9a 563extern options_t options;
7d7b8bfe 564internal_proto(options);
6de9cd9a 565
de8bd142
JB
566extern void backtrace_handler (int);
567internal_proto(backtrace_handler);
2b840e50 568
6de9cd9a 569
8b67b708
FXC
570/* Compile-time options that will influence the library. */
571
572typedef struct
573{
574 int warn_std;
575 int allow_std;
5f8f5313 576 int pedantic;
eaa90d25 577 int convert;
868d75db 578 int backtrace;
2bb6de3a 579 int sign_zero;
d67ab5ee 580 size_t record_marker;
07b3bbf2 581 int max_subrecord_length;
bdcfceb4 582 int bounds_check;
fa86f4f9 583 int fpe_summary;
8b67b708
FXC
584}
585compile_options_t;
586
587extern compile_options_t compile_options;
588internal_proto(compile_options);
589
e55a7487
AJ
590extern void init_compile_options (void);
591internal_proto(init_compile_options);
8b67b708 592
07b3bbf2 593#define GFC_MAX_SUBRECORD_LENGTH 2147483639 /* 2**31 - 9 */
8b67b708 594
6de9cd9a
DN
595/* Structure for statement options. */
596
597typedef struct
598{
599 const char *name;
600 int value;
601}
602st_option;
603
8b67b708 604
8f0d39a8
FXC
605/* This is returned by notification_std to know if, given the flags
606 that were given (-std=, -pedantic) we should issue an error, a warning
607 or nothing. */
608typedef enum
b2ef02df 609{ NOTIFICATION_SILENT, NOTIFICATION_WARNING, NOTIFICATION_ERROR }
8f0d39a8
FXC
610notification;
611
2e444427 612
6de9cd9a
DN
613/* The filename and line number don't go inside the globals structure.
614 They are set by the rest of the program and must be linked to. */
615
7d7b8bfe
RH
616/* Location of the current library call (optional). */
617extern unsigned line;
618iexport_data_proto(line);
6de9cd9a 619
6de9cd9a 620extern char *filename;
7d7b8bfe 621iexport_data_proto(filename);
6de9cd9a
DN
622
623
0dce3ca1
FXC
624#define CHARACTER2(name) \
625 gfc_charlen_type name ## _len; \
626 char * name
627
628typedef struct st_parameter_common
629{
630 GFC_INTEGER_4 flags;
631 GFC_INTEGER_4 unit;
632 const char *filename;
633 GFC_INTEGER_4 line;
634 CHARACTER2 (iomsg);
635 GFC_INTEGER_4 *iostat;
636}
637st_parameter_common;
638
639#undef CHARACTER2
640
641#define IOPARM_LIBRETURN_MASK (3 << 0)
642#define IOPARM_LIBRETURN_OK (0 << 0)
643#define IOPARM_LIBRETURN_ERROR (1 << 0)
644#define IOPARM_LIBRETURN_END (2 << 0)
645#define IOPARM_LIBRETURN_EOR (3 << 0)
646#define IOPARM_ERR (1 << 2)
647#define IOPARM_END (1 << 3)
648#define IOPARM_EOR (1 << 4)
649#define IOPARM_HAS_IOSTAT (1 << 5)
650#define IOPARM_HAS_IOMSG (1 << 6)
651
652#define IOPARM_COMMON_MASK ((1 << 7) - 1)
653
0ef33d44 654/* Make sure to keep in sync with io/io.h (st_parameter_open). */
0dce3ca1
FXC
655#define IOPARM_OPEN_HAS_RECL_IN (1 << 7)
656#define IOPARM_OPEN_HAS_FILE (1 << 8)
657#define IOPARM_OPEN_HAS_STATUS (1 << 9)
658#define IOPARM_OPEN_HAS_ACCESS (1 << 10)
659#define IOPARM_OPEN_HAS_FORM (1 << 11)
660#define IOPARM_OPEN_HAS_BLANK (1 << 12)
661#define IOPARM_OPEN_HAS_POSITION (1 << 13)
662#define IOPARM_OPEN_HAS_ACTION (1 << 14)
663#define IOPARM_OPEN_HAS_DELIM (1 << 15)
664#define IOPARM_OPEN_HAS_PAD (1 << 16)
665#define IOPARM_OPEN_HAS_CONVERT (1 << 17)
10256cbe
JD
666#define IOPARM_OPEN_HAS_DECIMAL (1 << 18)
667#define IOPARM_OPEN_HAS_ENCODING (1 << 19)
668#define IOPARM_OPEN_HAS_ROUND (1 << 20)
669#define IOPARM_OPEN_HAS_SIGN (1 << 21)
670#define IOPARM_OPEN_HAS_ASYNCHRONOUS (1 << 22)
dcfddbd4 671#define IOPARM_OPEN_HAS_NEWUNIT (1 << 23)
0ef33d44
FR
672#define IOPARM_OPEN_HAS_READONLY (1 << 24)
673#define IOPARM_OPEN_HAS_CC (1 << 25)
674#define IOPARM_OPEN_HAS_SHARE (1 << 26)
0dce3ca1 675
cb13c288
JD
676/* library start function and end macro. These can be expanded if needed
677 in the future. cmp is st_parameter_common *cmp */
f2ae4b2b 678
0dce3ca1 679extern void library_start (st_parameter_common *);
7d7b8bfe 680internal_proto(library_start);
6de9cd9a 681
5e805e44 682#define library_end()
6de9cd9a 683
cb13c288
JD
684/* main.c */
685
686extern void stupid_function_name_for_static_linking (void);
687internal_proto(stupid_function_name_for_static_linking);
688
7d7b8bfe 689extern void set_args (int, char **);
fa10ccb2 690iexport_proto(set_args);
6de9cd9a 691
7d7b8bfe
RH
692extern void get_args (int *, char ***);
693internal_proto(get_args);
6de9cd9a 694
868d75db
FXC
695/* backtrace.c */
696
1b0b9fcb 697extern void show_backtrace (bool);
ad4f95e3
FXC
698internal_proto(show_backtrace);
699
868d75db 700
6de9cd9a 701/* error.c */
6de9cd9a 702
486024b1
JD
703#if defined(HAVE_GFC_REAL_16)
704#define GFC_LARGEST_BUF (sizeof (GFC_REAL_16))
b2ef02df
KT
705#elif defined(HAVE_GFC_INTEGER_16)
706#define GFC_LARGEST_BUF (sizeof (GFC_INTEGER_LARGEST))
486024b1
JD
707#elif defined(HAVE_GFC_REAL_10)
708#define GFC_LARGEST_BUF (sizeof (GFC_REAL_10))
709#else
710#define GFC_LARGEST_BUF (sizeof (GFC_INTEGER_LARGEST))
711#endif
712
1449b8cb 713#define GFC_ITOA_BUF_SIZE (sizeof (GFC_INTEGER_LARGEST) * 3 + 2)
486024b1
JD
714#define GFC_XTOA_BUF_SIZE (GFC_LARGEST_BUF * 2 + 1)
715#define GFC_OTOA_BUF_SIZE (GFC_LARGEST_BUF * 3 + 1)
716#define GFC_BTOA_BUF_SIZE (GFC_LARGEST_BUF * 8 + 1)
1449b8cb 717
77777b33 718extern _Noreturn void sys_abort (void);
de8bd142 719internal_proto(sys_abort);
eedeea04 720
71cda9ca
JB
721extern _Noreturn void exit_error (int);
722internal_proto(exit_error);
723
1028b2bd
JB
724extern ssize_t estr_write (const char *);
725internal_proto(estr_write);
726
edaaef60
JB
727#if !defined(HAVE_WRITEV) && !defined(HAVE_SYS_UIO_H)
728struct iovec {
729 void *iov_base; /* Starting address */
730 size_t iov_len; /* Number of bytes to transfer */
731};
732#endif
733
734extern ssize_t estr_writev (const struct iovec *iov, int iovcnt);
735internal_proto(estr_writev);
1028b2bd
JB
736
737extern int st_printf (const char *, ...)
738 __attribute__((format (gfc_printf, 1, 2)));
739internal_proto(st_printf);
740
f9bfed22
JB
741extern const char *gfc_xtoa (GFC_UINTEGER_LARGEST, char *, size_t);
742internal_proto(gfc_xtoa);
6de9cd9a 743
77777b33 744extern _Noreturn void os_error (const char *);
1529b8d9 745iexport_proto(os_error);
6de9cd9a 746
d74a8b05
JB
747extern _Noreturn void os_error_at (const char *, const char *, ...)
748 __attribute__ ((format (gfc_printf, 2, 3)));
749iexport_proto(os_error_at);
750
0dce3ca1 751extern void show_locus (st_parameter_common *);
7d7b8bfe 752internal_proto(show_locus);
6de9cd9a 753
77777b33
FXC
754extern _Noreturn void runtime_error (const char *, ...)
755 __attribute__ ((format (gfc_printf, 1, 2)));
7d7b8bfe 756iexport_proto(runtime_error);
6de9cd9a 757
77777b33
FXC
758extern _Noreturn void runtime_error_at (const char *, const char *, ...)
759 __attribute__ ((format (gfc_printf, 2, 3)));
cb13c288
JD
760iexport_proto(runtime_error_at);
761
9731c4a3 762extern void runtime_warning_at (const char *, const char *, ...)
196c8bc8 763 __attribute__ ((format (gfc_printf, 2, 3)));
0d52899f
TB
764iexport_proto(runtime_warning_at);
765
77777b33 766extern _Noreturn void internal_error (st_parameter_common *, const char *);
7d7b8bfe 767internal_proto(internal_error);
6de9cd9a 768
7d7b8bfe
RH
769extern const char *translate_error (int);
770internal_proto(translate_error);
6de9cd9a 771
0dce3ca1 772extern void generate_error (st_parameter_common *, int, const char *);
cb13c288 773iexport_proto(generate_error);
6de9cd9a 774
2b4c9065
NK
775extern bool generate_error_common (st_parameter_common *, int, const char *);
776iexport_proto(generate_error_common);
777
fc5f5bb7
JD
778extern void generate_warning (st_parameter_common *, const char *);
779internal_proto(generate_warning);
780
f5e3ed2d 781extern bool notify_std (st_parameter_common *, int, const char *);
2e444427
JD
782internal_proto(notify_std);
783
0dce3ca1
FXC
784extern notification notification_std(int);
785internal_proto(notification_std);
786
723553bd
JB
787extern char *gf_strerror (int, char *, size_t);
788internal_proto(gf_strerror);
789
944b8b35
FXC
790/* fpu.c */
791
792extern void set_fpu (void);
793internal_proto(set_fpu);
82a4f54c 794
8b198102
FXC
795extern int get_fpu_trap_exceptions (void);
796internal_proto(get_fpu_trap_exceptions);
797
798extern void set_fpu_trap_exceptions (int, int);
799internal_proto(set_fpu_trap_exceptions);
800
801extern int support_fpu_trap (int);
802internal_proto(support_fpu_trap);
803
fa86f4f9
TB
804extern int get_fpu_except_flags (void);
805internal_proto(get_fpu_except_flags);
944b8b35 806
8b198102
FXC
807extern void set_fpu_except_flags (int, int);
808internal_proto(set_fpu_except_flags);
809
810extern int support_fpu_flag (int);
811internal_proto(support_fpu_flag);
812
813extern void set_fpu_rounding_mode (int);
82a4f54c
TB
814internal_proto(set_fpu_rounding_mode);
815
816extern int get_fpu_rounding_mode (void);
817internal_proto(get_fpu_rounding_mode);
818
8b198102
FXC
819extern int support_fpu_rounding_mode (int);
820internal_proto(support_fpu_rounding_mode);
821
822extern void get_fpu_state (void *);
823internal_proto(get_fpu_state);
824
825extern void set_fpu_state (void *);
826internal_proto(set_fpu_state);
827
f5168e47
FXC
828extern int get_fpu_underflow_mode (void);
829internal_proto(get_fpu_underflow_mode);
830
831extern void set_fpu_underflow_mode (int);
832internal_proto(set_fpu_underflow_mode);
833
834extern int support_fpu_underflow_control (int);
835internal_proto(support_fpu_underflow_control);
836
6de9cd9a
DN
837/* memory.c */
838
1a0fd3d3
JB
839extern void *xmalloc (size_t) __attribute__ ((malloc));
840internal_proto(xmalloc);
6de9cd9a 841
92e6f3a4
JB
842extern void *xmallocarray (size_t, size_t) __attribute__ ((malloc));
843internal_proto(xmallocarray);
844
f4471acb
JB
845extern void *xcalloc (size_t, size_t) __attribute__ ((malloc));
846internal_proto(xcalloc);
847
d74fd3c7
JB
848extern void *xrealloc (void *, size_t);
849internal_proto(xrealloc);
f4471acb 850
6de9cd9a
DN
851/* environ.c */
852
7d7b8bfe
RH
853extern void init_variables (void);
854internal_proto(init_variables);
6de9cd9a 855
0dce3ca1
FXC
856unit_convert get_unformatted_convert (int);
857internal_proto(get_unformatted_convert);
858
68ee9c08 859/* Secure getenv() which returns NULL if running as SUID/SGID. */
227e441f 860#ifndef HAVE_SECURE_GETENV
d86e68e2 861#if defined(HAVE_GETUID) && defined(HAVE_GETEUID) \
68ee9c08
JB
862 && defined(HAVE_GETGID) && defined(HAVE_GETEGID)
863#define FALLBACK_SECURE_GETENV
864extern char *secure_getenv (const char *);
865internal_proto(secure_getenv);
866#else
867#define secure_getenv getenv
868#endif
227e441f 869#endif
68ee9c08 870
6de9cd9a
DN
871/* string.c */
872
88fdfd5a 873extern int find_option (st_parameter_common *, const char *, gfc_charlen_type,
5e805e44 874 const st_option *, const char *);
7d7b8bfe 875internal_proto(find_option);
6de9cd9a 876
88fdfd5a 877extern gfc_charlen_type fstrlen (const char *, gfc_charlen_type);
7d7b8bfe 878internal_proto(fstrlen);
6de9cd9a 879
88fdfd5a 880extern gfc_charlen_type fstrcpy (char *, gfc_charlen_type, const char *, gfc_charlen_type);
7d7b8bfe 881internal_proto(fstrcpy);
6de9cd9a 882
88fdfd5a 883extern gfc_charlen_type cf_strcpy (char *, gfc_charlen_type, const char *);
7d7b8bfe 884internal_proto(cf_strcpy);
6de9cd9a 885
79617d7e
TK
886extern gfc_charlen_type string_len_trim (gfc_charlen_type, const char *);
887export_proto(string_len_trim);
888
889extern gfc_charlen_type string_len_trim_char4 (gfc_charlen_type,
890 const gfc_char4_t *);
891export_proto(string_len_trim_char4);
892
4269f19c
JB
893extern char *fc_strdup(const char *, gfc_charlen_type);
894internal_proto(fc_strdup);
895
581d2326
JB
896extern char *fc_strdup_notrim(const char *, gfc_charlen_type);
897internal_proto(fc_strdup_notrim);
898
1b0b9fcb
JB
899extern const char *gfc_itoa(GFC_INTEGER_LARGEST, char *, size_t);
900internal_proto(gfc_itoa);
901
25a5e756
FXC
902/* io/intrinsics.c */
903
904extern void flush_all_units (void);
905internal_proto(flush_all_units);
906
6de9cd9a
DN
907/* io.c */
908
7d7b8bfe
RH
909extern void init_units (void);
910internal_proto(init_units);
6de9cd9a 911
7d7b8bfe
RH
912extern void close_units (void);
913internal_proto(close_units);
6de9cd9a 914
ee4ac5b0
FXC
915extern int unit_to_fd (int);
916internal_proto(unit_to_fd);
917
87557722
JD
918extern char * filename_from_unit (int);
919internal_proto(filename_from_unit);
920
6de9cd9a 921/* stop.c */
7d7b8bfe 922
dffb1e22 923extern _Noreturn void stop_string (const char *, size_t, bool);
6d1b0f92 924export_proto(stop_string);
6de9cd9a
DN
925
926/* reshape_packed.c */
6de9cd9a 927
7d7b8bfe
RH
928extern void reshape_packed (char *, index_type, const char *, index_type,
929 const char *, index_type);
930internal_proto(reshape_packed);
6de9cd9a 931
8e1d7686
TK
932/* Repacking functions. These are called internally by internal_pack
933 and internal_unpack. */
934
935GFC_INTEGER_1 *internal_pack_1 (gfc_array_i1 *);
936internal_proto(internal_pack_1);
937
938GFC_INTEGER_2 *internal_pack_2 (gfc_array_i2 *);
939internal_proto(internal_pack_2);
6de9cd9a 940
6de9cd9a 941GFC_INTEGER_4 *internal_pack_4 (gfc_array_i4 *);
7d7b8bfe 942internal_proto(internal_pack_4);
6de9cd9a 943
6de9cd9a 944GFC_INTEGER_8 *internal_pack_8 (gfc_array_i8 *);
7d7b8bfe 945internal_proto(internal_pack_8);
6de9cd9a 946
0618ee31 947#if defined HAVE_GFC_INTEGER_16
e82726f9
AJ
948GFC_INTEGER_16 *internal_pack_16 (gfc_array_i16 *);
949internal_proto(internal_pack_16);
0618ee31 950#endif
e82726f9 951
8e1d7686
TK
952GFC_REAL_4 *internal_pack_r4 (gfc_array_r4 *);
953internal_proto(internal_pack_r4);
954
955GFC_REAL_8 *internal_pack_r8 (gfc_array_r8 *);
956internal_proto(internal_pack_r8);
957
958#if defined HAVE_GFC_REAL_10
959GFC_REAL_10 *internal_pack_r10 (gfc_array_r10 *);
960internal_proto(internal_pack_r10);
961#endif
962
963#if defined HAVE_GFC_REAL_16
964GFC_REAL_16 *internal_pack_r16 (gfc_array_r16 *);
965internal_proto(internal_pack_r16);
966#endif
967
39328081
TK
968GFC_COMPLEX_4 *internal_pack_c4 (gfc_array_c4 *);
969internal_proto(internal_pack_c4);
970
971GFC_COMPLEX_8 *internal_pack_c8 (gfc_array_c8 *);
972internal_proto(internal_pack_c8);
973
0618ee31 974#if defined HAVE_GFC_COMPLEX_10
e82726f9
AJ
975GFC_COMPLEX_10 *internal_pack_c10 (gfc_array_c10 *);
976internal_proto(internal_pack_c10);
0618ee31 977#endif
e82726f9 978
8e1d7686
TK
979#if defined HAVE_GFC_COMPLEX_16
980GFC_COMPLEX_16 *internal_pack_c16 (gfc_array_c16 *);
981internal_proto(internal_pack_c16);
982#endif
983
984extern void internal_unpack_1 (gfc_array_i1 *, const GFC_INTEGER_1 *);
985internal_proto(internal_unpack_1);
986
987extern void internal_unpack_2 (gfc_array_i2 *, const GFC_INTEGER_2 *);
988internal_proto(internal_unpack_2);
989
7d7b8bfe
RH
990extern void internal_unpack_4 (gfc_array_i4 *, const GFC_INTEGER_4 *);
991internal_proto(internal_unpack_4);
6de9cd9a 992
7d7b8bfe
RH
993extern void internal_unpack_8 (gfc_array_i8 *, const GFC_INTEGER_8 *);
994internal_proto(internal_unpack_8);
f814193b 995
0618ee31 996#if defined HAVE_GFC_INTEGER_16
e82726f9
AJ
997extern void internal_unpack_16 (gfc_array_i16 *, const GFC_INTEGER_16 *);
998internal_proto(internal_unpack_16);
0618ee31 999#endif
e82726f9 1000
8e1d7686
TK
1001extern void internal_unpack_r4 (gfc_array_r4 *, const GFC_REAL_4 *);
1002internal_proto(internal_unpack_r4);
1003
1004extern void internal_unpack_r8 (gfc_array_r8 *, const GFC_REAL_8 *);
1005internal_proto(internal_unpack_r8);
1006
1007#if defined HAVE_GFC_REAL_10
1008extern void internal_unpack_r10 (gfc_array_r10 *, const GFC_REAL_10 *);
1009internal_proto(internal_unpack_r10);
1010#endif
1011
1012#if defined HAVE_GFC_REAL_16
1013extern void internal_unpack_r16 (gfc_array_r16 *, const GFC_REAL_16 *);
1014internal_proto(internal_unpack_r16);
1015#endif
1016
39328081
TK
1017extern void internal_unpack_c4 (gfc_array_c4 *, const GFC_COMPLEX_4 *);
1018internal_proto(internal_unpack_c4);
1019
1020extern void internal_unpack_c8 (gfc_array_c8 *, const GFC_COMPLEX_8 *);
1021internal_proto(internal_unpack_c8);
1022
0618ee31 1023#if defined HAVE_GFC_COMPLEX_10
e82726f9
AJ
1024extern void internal_unpack_c10 (gfc_array_c10 *, const GFC_COMPLEX_10 *);
1025internal_proto(internal_unpack_c10);
0618ee31 1026#endif
e82726f9 1027
f53c2bfa
FXC
1028#if defined HAVE_GFC_COMPLEX_16
1029extern void internal_unpack_c16 (gfc_array_c16 *, const GFC_COMPLEX_16 *);
1030internal_proto(internal_unpack_c16);
1031#endif
1032
3ef2513a
TK
1033/* Internal auxiliary functions for the pack intrinsic. */
1034
1035extern void pack_i1 (gfc_array_i1 *, const gfc_array_i1 *,
1036 const gfc_array_l1 *, const gfc_array_i1 *);
1037internal_proto(pack_i1);
1038
1039extern void pack_i2 (gfc_array_i2 *, const gfc_array_i2 *,
1040 const gfc_array_l1 *, const gfc_array_i2 *);
1041internal_proto(pack_i2);
1042
1043extern void pack_i4 (gfc_array_i4 *, const gfc_array_i4 *,
1044 const gfc_array_l1 *, const gfc_array_i4 *);
1045internal_proto(pack_i4);
1046
1047extern void pack_i8 (gfc_array_i8 *, const gfc_array_i8 *,
1048 const gfc_array_l1 *, const gfc_array_i8 *);
1049internal_proto(pack_i8);
1050
1051#ifdef HAVE_GFC_INTEGER_16
1052extern void pack_i16 (gfc_array_i16 *, const gfc_array_i16 *,
1053 const gfc_array_l1 *, const gfc_array_i16 *);
1054internal_proto(pack_i16);
1055#endif
1056
1057extern void pack_r4 (gfc_array_r4 *, const gfc_array_r4 *,
1058 const gfc_array_l1 *, const gfc_array_r4 *);
1059internal_proto(pack_r4);
1060
1061extern void pack_r8 (gfc_array_r8 *, const gfc_array_r8 *,
1062 const gfc_array_l1 *, const gfc_array_r8 *);
1063internal_proto(pack_r8);
1064
1065#ifdef HAVE_GFC_REAL_10
1066extern void pack_r10 (gfc_array_r10 *, const gfc_array_r10 *,
1067 const gfc_array_l1 *, const gfc_array_r10 *);
1068internal_proto(pack_r10);
1069#endif
1070
1071#ifdef HAVE_GFC_REAL_16
1072extern void pack_r16 (gfc_array_r16 *, const gfc_array_r16 *,
1073 const gfc_array_l1 *, const gfc_array_r16 *);
1074internal_proto(pack_r16);
1075#endif
1076
1077extern void pack_c4 (gfc_array_c4 *, const gfc_array_c4 *,
1078 const gfc_array_l1 *, const gfc_array_c4 *);
1079internal_proto(pack_c4);
1080
1081extern void pack_c8 (gfc_array_c8 *, const gfc_array_c8 *,
1082 const gfc_array_l1 *, const gfc_array_c8 *);
1083internal_proto(pack_c8);
1084
1085#ifdef HAVE_GFC_REAL_10
1086extern void pack_c10 (gfc_array_c10 *, const gfc_array_c10 *,
1087 const gfc_array_l1 *, const gfc_array_c10 *);
1088internal_proto(pack_c10);
1089#endif
1090
1091#ifdef HAVE_GFC_REAL_16
1092extern void pack_c16 (gfc_array_c16 *, const gfc_array_c16 *,
1093 const gfc_array_l1 *, const gfc_array_c16 *);
1094internal_proto(pack_c16);
1095#endif
1096
3478bba4
TK
1097/* Internal auxiliary functions for the unpack intrinsic. */
1098
1099extern void unpack0_i1 (gfc_array_i1 *, const gfc_array_i1 *,
1100 const gfc_array_l1 *, const GFC_INTEGER_1 *);
1101internal_proto(unpack0_i1);
1102
1103extern void unpack0_i2 (gfc_array_i2 *, const gfc_array_i2 *,
1104 const gfc_array_l1 *, const GFC_INTEGER_2 *);
1105internal_proto(unpack0_i2);
1106
1107extern void unpack0_i4 (gfc_array_i4 *, const gfc_array_i4 *,
1108 const gfc_array_l1 *, const GFC_INTEGER_4 *);
1109internal_proto(unpack0_i4);
1110
1111extern void unpack0_i8 (gfc_array_i8 *, const gfc_array_i8 *,
1112 const gfc_array_l1 *, const GFC_INTEGER_8 *);
1113internal_proto(unpack0_i8);
1114
1115#ifdef HAVE_GFC_INTEGER_16
1116
1117extern void unpack0_i16 (gfc_array_i16 *, const gfc_array_i16 *,
1118 const gfc_array_l1 *, const GFC_INTEGER_16 *);
1119internal_proto(unpack0_i16);
1120
1121#endif
1122
1123extern void unpack0_r4 (gfc_array_r4 *, const gfc_array_r4 *,
1124 const gfc_array_l1 *, const GFC_REAL_4 *);
1125internal_proto(unpack0_r4);
1126
1127extern void unpack0_r8 (gfc_array_r8 *, const gfc_array_r8 *,
1128 const gfc_array_l1 *, const GFC_REAL_8 *);
1129internal_proto(unpack0_r8);
1130
1131#ifdef HAVE_GFC_REAL_10
1132
1133extern void unpack0_r10 (gfc_array_r10 *, const gfc_array_r10 *,
1134 const gfc_array_l1 *, const GFC_REAL_10 *);
1135internal_proto(unpack0_r10);
1136
1137#endif
1138
1139#ifdef HAVE_GFC_REAL_16
1140
1141extern void unpack0_r16 (gfc_array_r16 *, const gfc_array_r16 *,
1142 const gfc_array_l1 *, const GFC_REAL_16 *);
1143internal_proto(unpack0_r16);
1144
1145#endif
1146
1147extern void unpack0_c4 (gfc_array_c4 *, const gfc_array_c4 *,
1148 const gfc_array_l1 *, const GFC_COMPLEX_4 *);
1149internal_proto(unpack0_c4);
1150
1151extern void unpack0_c8 (gfc_array_c8 *, const gfc_array_c8 *,
1152 const gfc_array_l1 *, const GFC_COMPLEX_8 *);
1153internal_proto(unpack0_c8);
1154
1155#ifdef HAVE_GFC_COMPLEX_10
1156
1157extern void unpack0_c10 (gfc_array_c10 *, const gfc_array_c10 *,
1158 const gfc_array_l1 *mask, const GFC_COMPLEX_10 *);
1159internal_proto(unpack0_c10);
1160
1161#endif
1162
1163#ifdef HAVE_GFC_COMPLEX_16
1164
1165extern void unpack0_c16 (gfc_array_c16 *, const gfc_array_c16 *,
1166 const gfc_array_l1 *, const GFC_COMPLEX_16 *);
1167internal_proto(unpack0_c16);
1168
1169#endif
1170
1171extern void unpack1_i1 (gfc_array_i1 *, const gfc_array_i1 *,
1172 const gfc_array_l1 *, const gfc_array_i1 *);
1173internal_proto(unpack1_i1);
1174
1175extern void unpack1_i2 (gfc_array_i2 *, const gfc_array_i2 *,
1176 const gfc_array_l1 *, const gfc_array_i2 *);
1177internal_proto(unpack1_i2);
1178
1179extern void unpack1_i4 (gfc_array_i4 *, const gfc_array_i4 *,
1180 const gfc_array_l1 *, const gfc_array_i4 *);
1181internal_proto(unpack1_i4);
1182
1183extern void unpack1_i8 (gfc_array_i8 *, const gfc_array_i8 *,
1184 const gfc_array_l1 *, const gfc_array_i8 *);
1185internal_proto(unpack1_i8);
1186
1187#ifdef HAVE_GFC_INTEGER_16
1188extern void unpack1_i16 (gfc_array_i16 *, const gfc_array_i16 *,
1189 const gfc_array_l1 *, const gfc_array_i16 *);
1190internal_proto(unpack1_i16);
1191#endif
1192
1193extern void unpack1_r4 (gfc_array_r4 *, const gfc_array_r4 *,
1194 const gfc_array_l1 *, const gfc_array_r4 *);
1195internal_proto(unpack1_r4);
1196
1197extern void unpack1_r8 (gfc_array_r8 *, const gfc_array_r8 *,
1198 const gfc_array_l1 *, const gfc_array_r8 *);
1199internal_proto(unpack1_r8);
1200
1201#ifdef HAVE_GFC_REAL_10
1202extern void unpack1_r10 (gfc_array_r10 *, const gfc_array_r10 *,
1203 const gfc_array_l1 *, const gfc_array_r10 *);
1204internal_proto(unpack1_r10);
1205#endif
1206
1207#ifdef HAVE_GFC_REAL_16
1208extern void unpack1_r16 (gfc_array_r16 *, const gfc_array_r16 *,
1209 const gfc_array_l1 *, const gfc_array_r16 *);
1210internal_proto(unpack1_r16);
1211#endif
1212
1213extern void unpack1_c4 (gfc_array_c4 *, const gfc_array_c4 *,
1214 const gfc_array_l1 *, const gfc_array_c4 *);
1215internal_proto(unpack1_c4);
1216
1217extern void unpack1_c8 (gfc_array_c8 *, const gfc_array_c8 *,
1218 const gfc_array_l1 *, const gfc_array_c8 *);
1219internal_proto(unpack1_c8);
1220
1221#ifdef HAVE_GFC_COMPLEX_10
1222extern void unpack1_c10 (gfc_array_c10 *, const gfc_array_c10 *,
1223 const gfc_array_l1 *, const gfc_array_c10 *);
1224internal_proto(unpack1_c10);
1225#endif
1226
1227#ifdef HAVE_GFC_COMPLEX_16
1228extern void unpack1_c16 (gfc_array_c16 *, const gfc_array_c16 *,
1229 const gfc_array_l1 *, const gfc_array_c16 *);
1230internal_proto(unpack1_c16);
1231#endif
1232
75f2543f
TK
1233/* Helper functions for spread. */
1234
1235extern void spread_i1 (gfc_array_i1 *, const gfc_array_i1 *,
1236 const index_type, const index_type);
1237internal_proto(spread_i1);
1238
1239extern void spread_i2 (gfc_array_i2 *, const gfc_array_i2 *,
1240 const index_type, const index_type);
1241internal_proto(spread_i2);
1242
1243extern void spread_i4 (gfc_array_i4 *, const gfc_array_i4 *,
1244 const index_type, const index_type);
1245internal_proto(spread_i4);
1246
1247extern void spread_i8 (gfc_array_i8 *, const gfc_array_i8 *,
1248 const index_type, const index_type);
1249internal_proto(spread_i8);
1250
1251#ifdef HAVE_GFC_INTEGER_16
1252extern void spread_i16 (gfc_array_i16 *, const gfc_array_i16 *,
1253 const index_type, const index_type);
1254internal_proto(spread_i16);
1255
1256#endif
1257
1258extern void spread_r4 (gfc_array_r4 *, const gfc_array_r4 *,
1259 const index_type, const index_type);
1260internal_proto(spread_r4);
1261
1262extern void spread_r8 (gfc_array_r8 *, const gfc_array_r8 *,
1263 const index_type, const index_type);
1264internal_proto(spread_r8);
1265
1266#ifdef HAVE_GFC_REAL_10
1267extern void spread_r10 (gfc_array_r10 *, const gfc_array_r10 *,
1268 const index_type, const index_type);
1269internal_proto(spread_r10);
1270
1271#endif
1272
1273#ifdef HAVE_GFC_REAL_16
1274extern void spread_r16 (gfc_array_r16 *, const gfc_array_r16 *,
1275 const index_type, const index_type);
1276internal_proto(spread_r16);
1277
1278#endif
1279
1280extern void spread_c4 (gfc_array_c4 *, const gfc_array_c4 *,
1281 const index_type, const index_type);
1282internal_proto(spread_c4);
1283
1284extern void spread_c8 (gfc_array_c8 *, const gfc_array_c8 *,
1285 const index_type, const index_type);
1286internal_proto(spread_c8);
1287
1288#ifdef HAVE_GFC_COMPLEX_10
1289extern void spread_c10 (gfc_array_c10 *, const gfc_array_c10 *,
1290 const index_type, const index_type);
1291internal_proto(spread_c10);
1292
1293#endif
1294
1295#ifdef HAVE_GFC_COMPLEX_16
1296extern void spread_c16 (gfc_array_c16 *, const gfc_array_c16 *,
1297 const index_type, const index_type);
1298internal_proto(spread_c16);
1299
1300#endif
1301
1302extern void spread_scalar_i1 (gfc_array_i1 *, const GFC_INTEGER_1 *,
1303 const index_type, const index_type);
1304internal_proto(spread_scalar_i1);
1305
1306extern void spread_scalar_i2 (gfc_array_i2 *, const GFC_INTEGER_2 *,
1307 const index_type, const index_type);
1308internal_proto(spread_scalar_i2);
1309
1310extern void spread_scalar_i4 (gfc_array_i4 *, const GFC_INTEGER_4 *,
1311 const index_type, const index_type);
1312internal_proto(spread_scalar_i4);
1313
1314extern void spread_scalar_i8 (gfc_array_i8 *, const GFC_INTEGER_8 *,
1315 const index_type, const index_type);
1316internal_proto(spread_scalar_i8);
1317
1318#ifdef HAVE_GFC_INTEGER_16
1319extern void spread_scalar_i16 (gfc_array_i16 *, const GFC_INTEGER_16 *,
1320 const index_type, const index_type);
1321internal_proto(spread_scalar_i16);
1322
1323#endif
1324
1325extern void spread_scalar_r4 (gfc_array_r4 *, const GFC_REAL_4 *,
1326 const index_type, const index_type);
1327internal_proto(spread_scalar_r4);
1328
1329extern void spread_scalar_r8 (gfc_array_r8 *, const GFC_REAL_8 *,
1330 const index_type, const index_type);
1331internal_proto(spread_scalar_r8);
1332
1333#ifdef HAVE_GFC_REAL_10
1334extern void spread_scalar_r10 (gfc_array_r10 *, const GFC_REAL_10 *,
1335 const index_type, const index_type);
1336internal_proto(spread_scalar_r10);
1337
1338#endif
1339
1340#ifdef HAVE_GFC_REAL_16
1341extern void spread_scalar_r16 (gfc_array_r16 *, const GFC_REAL_16 *,
1342 const index_type, const index_type);
1343internal_proto(spread_scalar_r16);
1344
1345#endif
1346
1347extern void spread_scalar_c4 (gfc_array_c4 *, const GFC_COMPLEX_4 *,
1348 const index_type, const index_type);
1349internal_proto(spread_scalar_c4);
1350
1351extern void spread_scalar_c8 (gfc_array_c8 *, const GFC_COMPLEX_8 *,
1352 const index_type, const index_type);
1353internal_proto(spread_scalar_c8);
1354
1355#ifdef HAVE_GFC_COMPLEX_10
1356extern void spread_scalar_c10 (gfc_array_c10 *, const GFC_COMPLEX_10 *,
1357 const index_type, const index_type);
1358internal_proto(spread_scalar_c10);
1359
1360#endif
1361
1362#ifdef HAVE_GFC_COMPLEX_16
1363extern void spread_scalar_c16 (gfc_array_c16 *, const GFC_COMPLEX_16 *,
1364 const index_type, const index_type);
1365internal_proto(spread_scalar_c16);
1366
1367#endif
1368
6de9cd9a
DN
1369/* string_intrinsics.c */
1370
4b267817
FXC
1371extern int compare_string (gfc_charlen_type, const char *,
1372 gfc_charlen_type, const char *);
7d7b8bfe 1373iexport_proto(compare_string);
6de9cd9a 1374
4b267817
FXC
1375extern int compare_string_char4 (gfc_charlen_type, const gfc_char4_t *,
1376 gfc_charlen_type, const gfc_char4_t *);
1377iexport_proto(compare_string_char4);
1378
e7898e54
TK
1379extern int memcmp_char4 (const void *, const void *, size_t);
1380internal_proto(memcmp_char4);
1381
1382
abdef811
BD
1383/* random.c */
1384
34b4bc5c
FXC
1385extern void random_seed_i4 (GFC_INTEGER_4 * size, gfc_array_i4 * put,
1386 gfc_array_i4 * get);
1387iexport_proto(random_seed_i4);
1388extern void random_seed_i8 (GFC_INTEGER_8 * size, gfc_array_i8 * put,
1389 gfc_array_i8 * get);
1390iexport_proto(random_seed_i8);
abdef811 1391
6c167c45
VL
1392/* size.c */
1393
e9bfdf18 1394typedef GFC_ARRAY_DESCRIPTOR (void) array_t;
6c167c45 1395
7d7b8bfe
RH
1396extern index_type size0 (const array_t * array);
1397iexport_proto(size0);
6c167c45 1398
419af57c
TK
1399/* is_contiguous.c */
1400
1401extern GFC_LOGICAL_4 is_contiguous0 (const array_t * const restrict array);
1402iexport_proto(is_contiguous0);
1403
16bff921
TK
1404/* bounds.c */
1405
1406extern void bounds_equal_extents (array_t *, array_t *, const char *,
1407 const char *);
1408internal_proto(bounds_equal_extents);
1409
1410extern void bounds_reduced_extents (array_t *, array_t *, int, const char *,
1411 const char *intrinsic);
1412internal_proto(bounds_reduced_extents);
1413
1414extern void bounds_iforeach_return (array_t *, array_t *, const char *);
1415internal_proto(bounds_iforeach_return);
1416
1417extern void bounds_ifunction_return (array_t *, const index_type *,
1418 const char *, const char *);
1419internal_proto(bounds_ifunction_return);
1420
8c39b987
TK
1421extern index_type count_0 (const gfc_array_l1 *);
1422
1423internal_proto(count_0);
1424
c2b00cdc
TK
1425/* Internal auxiliary functions for cshift */
1426
44720bef 1427void cshift0_i1 (gfc_array_i1 *, const gfc_array_i1 *, ptrdiff_t, int);
c2b00cdc
TK
1428internal_proto(cshift0_i1);
1429
44720bef 1430void cshift0_i2 (gfc_array_i2 *, const gfc_array_i2 *, ptrdiff_t, int);
c2b00cdc
TK
1431internal_proto(cshift0_i2);
1432
44720bef 1433void cshift0_i4 (gfc_array_i4 *, const gfc_array_i4 *, ptrdiff_t, int);
c2b00cdc
TK
1434internal_proto(cshift0_i4);
1435
44720bef 1436void cshift0_i8 (gfc_array_i8 *, const gfc_array_i8 *, ptrdiff_t, int);
c2b00cdc
TK
1437internal_proto(cshift0_i8);
1438
1439#ifdef HAVE_GFC_INTEGER_16
44720bef 1440void cshift0_i16 (gfc_array_i16 *, const gfc_array_i16 *, ptrdiff_t, int);
c2b00cdc
TK
1441internal_proto(cshift0_i16);
1442#endif
1443
44720bef 1444void cshift0_r4 (gfc_array_r4 *, const gfc_array_r4 *, ptrdiff_t, int);
c2b00cdc
TK
1445internal_proto(cshift0_r4);
1446
44720bef 1447void cshift0_r8 (gfc_array_r8 *, const gfc_array_r8 *, ptrdiff_t, int);
c2b00cdc
TK
1448internal_proto(cshift0_r8);
1449
1450#ifdef HAVE_GFC_REAL_10
44720bef 1451void cshift0_r10 (gfc_array_r10 *, const gfc_array_r10 *, ptrdiff_t, int);
c2b00cdc
TK
1452internal_proto(cshift0_r10);
1453#endif
1454
1455#ifdef HAVE_GFC_REAL_16
44720bef 1456void cshift0_r16 (gfc_array_r16 *, const gfc_array_r16 *, ptrdiff_t, int);
c2b00cdc
TK
1457internal_proto(cshift0_r16);
1458#endif
1459
44720bef 1460void cshift0_c4 (gfc_array_c4 *, const gfc_array_c4 *, ptrdiff_t, int);
c2b00cdc
TK
1461internal_proto(cshift0_c4);
1462
44720bef 1463void cshift0_c8 (gfc_array_c8 *, const gfc_array_c8 *, ptrdiff_t, int);
c2b00cdc
TK
1464internal_proto(cshift0_c8);
1465
1466#ifdef HAVE_GFC_COMPLEX_10
44720bef 1467void cshift0_c10 (gfc_array_c10 *, const gfc_array_c10 *, ptrdiff_t, int);
c2b00cdc
TK
1468internal_proto(cshift0_c10);
1469#endif
1470
1471#ifdef HAVE_GFC_COMPLEX_16
44720bef 1472void cshift0_c16 (gfc_array_c16 *, const gfc_array_c16 *, ptrdiff_t, int);
c2b00cdc
TK
1473internal_proto(cshift0_c16);
1474#endif
1475
e56e3fda
TK
1476#if defined (HAVE_GFC_INTEGER_4) && defined (HAVE_GFC_INTEGER_1)
1477void cshift1_4_i1 (gfc_array_i1 * const restrict,
1478 const gfc_array_i1 * const restrict,
1479 const gfc_array_i4 * const restrict,
1480 const GFC_INTEGER_4 * const restrict);
1481internal_proto(cshift1_4_i1);
1482#endif
1483
1484#if defined (HAVE_GFC_INTEGER_4) && defined (HAVE_GFC_INTEGER_2)
1485void cshift1_4_i2 (gfc_array_i2 * const restrict,
1486 const gfc_array_i2 * const restrict,
1487 const gfc_array_i4 * const restrict,
1488 const GFC_INTEGER_4 * const restrict);
1489internal_proto(cshift1_4_i2);
1490#endif
1491
1492#if defined (HAVE_GFC_INTEGER_4) && defined (HAVE_GFC_INTEGER_4)
1493void cshift1_4_i4 (gfc_array_i4 * const restrict,
1494 const gfc_array_i4 * const restrict,
1495 const gfc_array_i4 * const restrict,
1496 const GFC_INTEGER_4 * const restrict);
1497internal_proto(cshift1_4_i4);
1498#endif
1499
1500#if defined (HAVE_GFC_INTEGER_4) && defined (HAVE_GFC_INTEGER_8)
1501void cshift1_4_i8 (gfc_array_i8 * const restrict,
1502 const gfc_array_i8 * const restrict,
1503 const gfc_array_i4 * const restrict,
1504 const GFC_INTEGER_4 * const restrict);
1505internal_proto(cshift1_4_i8);
1506#endif
1507
1508#if defined (HAVE_GFC_INTEGER_4) && defined (HAVE_GFC_INTEGER_16)
1509void cshift1_4_i16 (gfc_array_i16 * const restrict,
1510 const gfc_array_i16 * const restrict,
1511 const gfc_array_i4 * const restrict,
1512 const GFC_INTEGER_4 * const restrict);
1513internal_proto(cshift1_4_i16);
1514#endif
1515
1516#if defined (HAVE_GFC_INTEGER_8) && defined (HAVE_GFC_INTEGER_1)
1517void cshift1_8_i1 (gfc_array_i1 * const restrict,
1518 const gfc_array_i1 * const restrict,
1519 const gfc_array_i8 * const restrict,
1520 const GFC_INTEGER_8 * const restrict);
1521internal_proto(cshift1_8_i1);
1522#endif
1523
1524#if defined (HAVE_GFC_INTEGER_8) && defined (HAVE_GFC_INTEGER_2)
1525void cshift1_8_i2 (gfc_array_i2 * const restrict,
1526 const gfc_array_i2 * const restrict,
1527 const gfc_array_i8 * const restrict,
1528 const GFC_INTEGER_8 * const restrict);
1529internal_proto(cshift1_8_i2);
1530#endif
1531
1532#if defined (HAVE_GFC_INTEGER_8) && defined (HAVE_GFC_INTEGER_4)
1533void cshift1_8_i4 (gfc_array_i4 * const restrict,
1534 const gfc_array_i4 * const restrict,
1535 const gfc_array_i8 * const restrict,
1536 const GFC_INTEGER_8 * const restrict);
1537internal_proto(cshift1_8_i4);
1538#endif
1539
1540#if defined (HAVE_GFC_INTEGER_8) && defined (HAVE_GFC_INTEGER_8)
1541void cshift1_8_i8 (gfc_array_i8 * const restrict,
1542 const gfc_array_i8 * const restrict,
1543 const gfc_array_i8 * const restrict,
1544 const GFC_INTEGER_8 * const restrict);
1545internal_proto(cshift1_8_i8);
1546#endif
1547
1548#if defined (HAVE_GFC_INTEGER_8) && defined (HAVE_GFC_INTEGER_16)
1549void cshift1_8_i16 (gfc_array_i16 * const restrict,
1550 const gfc_array_i16 * const restrict,
1551 const gfc_array_i8 * const restrict,
1552 const GFC_INTEGER_8 * const restrict);
1553internal_proto(cshift1_8_i16);
1554#endif
1555
1556#if defined (HAVE_GFC_INTEGER_16) && defined (HAVE_GFC_INTEGER_1)
1557void cshift1_16_i1 (gfc_array_i1 * const restrict,
1558 const gfc_array_i1 * const restrict,
1559 const gfc_array_i16 * const restrict,
1560 const GFC_INTEGER_16 * const restrict);
1561internal_proto(cshift1_16_i1);
1562#endif
1563
1564#if defined (HAVE_GFC_INTEGER_16) && defined (HAVE_GFC_INTEGER_2)
1565void cshift1_16_i2 (gfc_array_i2 * const restrict,
1566 const gfc_array_i2 * const restrict,
1567 const gfc_array_i16 * const restrict,
1568 const GFC_INTEGER_16 * const restrict);
1569internal_proto(cshift1_16_i2);
1570#endif
1571
1572#if defined (HAVE_GFC_INTEGER_16) && defined (HAVE_GFC_INTEGER_4)
1573void cshift1_16_i4 (gfc_array_i4 * const restrict,
1574 const gfc_array_i4 * const restrict,
1575 const gfc_array_i16 * const restrict,
1576 const GFC_INTEGER_16 * const restrict);
1577internal_proto(cshift1_16_i4);
1578#endif
1579
1580#if defined (HAVE_GFC_INTEGER_16) && defined (HAVE_GFC_INTEGER_8)
1581void cshift1_16_i8 (gfc_array_i8 * const restrict,
1582 const gfc_array_i8 * const restrict,
1583 const gfc_array_i16 * const restrict,
1584 const GFC_INTEGER_16 * const restrict);
1585internal_proto(cshift1_16_i8);
1586#endif
1587
1588#if defined (HAVE_GFC_INTEGER_16) && defined (HAVE_GFC_INTEGER_16)
1589void cshift1_16_i16 (gfc_array_i16 * const restrict,
1590 const gfc_array_i16 * const restrict,
1591 const gfc_array_i16 * const restrict,
1592 const GFC_INTEGER_16 * const restrict);
1593internal_proto(cshift1_16_i16);
1594#endif
1595
1596#if defined (HAVE_GFC_INTEGER_4) && defined (HAVE_GFC_REAL_4)
1597void cshift1_4_r4 (gfc_array_r4 * const restrict,
1598 const gfc_array_r4 * const restrict,
1599 const gfc_array_i4 * const restrict,
1600 const GFC_INTEGER_4 * const restrict);
1601internal_proto(cshift1_4_r4);
1602#endif
1603
1604#if defined (HAVE_GFC_INTEGER_4) && defined (HAVE_GFC_REAL_8)
1605void cshift1_4_r8 (gfc_array_r8 * const restrict,
1606 const gfc_array_r8 * const restrict,
1607 const gfc_array_i4 * const restrict,
1608 const GFC_INTEGER_4 * const restrict);
1609internal_proto(cshift1_4_r8);
1610#endif
1611
1612#if defined (HAVE_GFC_INTEGER_4) && defined (HAVE_GFC_REAL_10)
1613void cshift1_4_r10 (gfc_array_r10 * const restrict,
1614 const gfc_array_r10 * const restrict,
1615 const gfc_array_i4 * const restrict,
1616 const GFC_INTEGER_4 * const restrict);
1617internal_proto(cshift1_4_r10);
1618#endif
1619
1620#if defined (HAVE_GFC_INTEGER_4) && defined (HAVE_GFC_REAL_16)
1621void cshift1_4_r16 (gfc_array_r16 * const restrict,
1622 const gfc_array_r16 * const restrict,
1623 const gfc_array_i4 * const restrict,
1624 const GFC_INTEGER_4 * const restrict);
1625internal_proto(cshift1_4_r16);
1626#endif
1627
1628#if defined (HAVE_GFC_INTEGER_8) && defined (HAVE_GFC_REAL_4)
1629void cshift1_8_r4 (gfc_array_r4 * const restrict,
1630 const gfc_array_r4 * const restrict,
1631 const gfc_array_i8 * const restrict,
1632 const GFC_INTEGER_8 * const restrict);
1633internal_proto(cshift1_8_r4);
1634#endif
1635
1636#if defined (HAVE_GFC_INTEGER_8) && defined (HAVE_GFC_REAL_8)
1637void cshift1_8_r8 (gfc_array_r8 * const restrict,
1638 const gfc_array_r8 * const restrict,
1639 const gfc_array_i8 * const restrict,
1640 const GFC_INTEGER_8 * const restrict);
1641internal_proto(cshift1_8_r8);
1642#endif
1643
1644#if defined (HAVE_GFC_INTEGER_8) && defined (HAVE_GFC_REAL_10)
1645void cshift1_8_r10 (gfc_array_r10 * const restrict,
1646 const gfc_array_r10 * const restrict,
1647 const gfc_array_i8 * const restrict,
1648 const GFC_INTEGER_8 * const restrict);
1649internal_proto(cshift1_8_r10);
1650#endif
1651
1652#if defined (HAVE_GFC_INTEGER_8) && defined (HAVE_GFC_REAL_16)
1653void cshift1_8_r16 (gfc_array_r16 * const restrict,
1654 const gfc_array_r16 * const restrict,
1655 const gfc_array_i8 * const restrict,
1656 const GFC_INTEGER_8 * const restrict);
1657internal_proto(cshift1_8_r16);
1658#endif
1659
1660#if defined (HAVE_GFC_INTEGER_16) && defined (HAVE_GFC_REAL_4)
1661void cshift1_16_r4 (gfc_array_r4 * const restrict,
1662 const gfc_array_r4 * const restrict,
1663 const gfc_array_i16 * const restrict,
1664 const GFC_INTEGER_16 * const restrict);
1665internal_proto(cshift1_16_r4);
1666#endif
1667
1668#if defined (HAVE_GFC_INTEGER_16) && defined (HAVE_GFC_REAL_8)
1669void cshift1_16_r8 (gfc_array_r8 * const restrict,
1670 const gfc_array_r8 * const restrict,
1671 const gfc_array_i16 * const restrict,
1672 const GFC_INTEGER_16 * const restrict);
1673internal_proto(cshift1_16_r8);
1674#endif
1675
1676#if defined (HAVE_GFC_INTEGER_16) && defined (HAVE_GFC_REAL_10)
1677void cshift1_16_r10 (gfc_array_r10 * const restrict,
1678 const gfc_array_r10 * const restrict,
1679 const gfc_array_i16 * const restrict,
1680 const GFC_INTEGER_16 * const restrict);
1681internal_proto(cshift1_16_r10);
1682#endif
1683
1684#if defined (HAVE_GFC_INTEGER_16) && defined (HAVE_GFC_REAL_16)
1685void cshift1_16_r16 (gfc_array_r16 * const restrict,
1686 const gfc_array_r16 * const restrict,
1687 const gfc_array_i16 * const restrict,
1688 const GFC_INTEGER_16 * const restrict);
1689internal_proto(cshift1_16_r16);
1690#endif
1691
1692#if defined (HAVE_GFC_INTEGER_4) && defined (HAVE_GFC_COMPLEX_4)
1693void cshift1_4_c4 (gfc_array_c4 * const restrict,
1694 const gfc_array_c4 * const restrict,
1695 const gfc_array_i4 * const restrict,
1696 const GFC_INTEGER_4 * const restrict);
1697internal_proto(cshift1_4_c4);
1698#endif
1699
1700#if defined (HAVE_GFC_INTEGER_4) && defined (HAVE_GFC_COMPLEX_8)
1701void cshift1_4_c8 (gfc_array_c8 * const restrict,
1702 const gfc_array_c8 * const restrict,
1703 const gfc_array_i4 * const restrict,
1704 const GFC_INTEGER_4 * const restrict);
1705internal_proto(cshift1_4_c8);
1706#endif
1707
1708#if defined (HAVE_GFC_INTEGER_4) && defined (HAVE_GFC_COMPLEX_10)
1709void cshift1_4_c10 (gfc_array_c10 * const restrict,
1710 const gfc_array_c10 * const restrict,
1711 const gfc_array_i4 * const restrict,
1712 const GFC_INTEGER_4 * const restrict);
1713internal_proto(cshift1_4_c10);
1714#endif
1715
1716#if defined (HAVE_GFC_INTEGER_4) && defined (HAVE_GFC_COMPLEX_16)
1717void cshift1_4_c16 (gfc_array_c16 * const restrict,
1718 const gfc_array_c16 * const restrict,
1719 const gfc_array_i4 * const restrict,
1720 const GFC_INTEGER_4 * const restrict);
1721internal_proto(cshift1_4_c16);
1722#endif
1723
1724#if defined (HAVE_GFC_INTEGER_8) && defined (HAVE_GFC_COMPLEX_4)
1725void cshift1_8_c4 (gfc_array_c4 * const restrict,
1726 const gfc_array_c4 * const restrict,
1727 const gfc_array_i8 * const restrict,
1728 const GFC_INTEGER_8 * const restrict);
1729internal_proto(cshift1_8_c4);
1730#endif
1731
1732#if defined (HAVE_GFC_INTEGER_8) && defined (HAVE_GFC_COMPLEX_8)
1733void cshift1_8_c8 (gfc_array_c8 * const restrict,
1734 const gfc_array_c8 * const restrict,
1735 const gfc_array_i8 * const restrict,
1736 const GFC_INTEGER_8 * const restrict);
1737internal_proto(cshift1_8_c8);
1738#endif
1739
1740#if defined (HAVE_GFC_INTEGER_8) && defined (HAVE_GFC_COMPLEX_10)
1741void cshift1_8_c10 (gfc_array_c10 * const restrict,
1742 const gfc_array_c10 * const restrict,
1743 const gfc_array_i8 * const restrict,
1744 const GFC_INTEGER_8 * const restrict);
1745internal_proto(cshift1_8_c10);
1746#endif
1747
1748#if defined (HAVE_GFC_INTEGER_8) && defined (HAVE_GFC_COMPLEX_16)
1749void cshift1_8_c16 (gfc_array_c16 * const restrict,
1750 const gfc_array_c16 * const restrict,
1751 const gfc_array_i8 * const restrict,
1752 const GFC_INTEGER_8 * const restrict);
1753internal_proto(cshift1_8_c16);
1754#endif
1755
1756#if defined (HAVE_GFC_INTEGER_16) && defined (HAVE_GFC_COMPLEX_4)
1757void cshift1_16_c4 (gfc_array_c4 * const restrict,
1758 const gfc_array_c4 * const restrict,
1759 const gfc_array_i16 * const restrict,
1760 const GFC_INTEGER_16 * const restrict);
1761internal_proto(cshift1_16_c4);
1762#endif
1763
1764#if defined (HAVE_GFC_INTEGER_16) && defined (HAVE_GFC_COMPLEX_8)
1765void cshift1_16_c8 (gfc_array_c8 * const restrict,
1766 const gfc_array_c8 * const restrict,
1767 const gfc_array_i16 * const restrict,
1768 const GFC_INTEGER_16 * const restrict);
1769internal_proto(cshift1_16_c8);
1770#endif
1771
1772#if defined (HAVE_GFC_INTEGER_16) && defined (HAVE_GFC_COMPLEX_10)
1773void cshift1_16_c10 (gfc_array_c10 * const restrict,
1774 const gfc_array_c10 * const restrict,
1775 const gfc_array_i16 * const restrict,
1776 const GFC_INTEGER_16 * const restrict);
1777internal_proto(cshift1_16_c10);
1778#endif
1779
1780#if defined (HAVE_GFC_INTEGER_16) && defined (HAVE_GFC_COMPLEX_16)
1781void cshift1_16_c16 (gfc_array_c16 * const restrict,
1782 const gfc_array_c16 * const restrict,
1783 const gfc_array_i16 * const restrict,
1784 const GFC_INTEGER_16 * const restrict);
1785internal_proto(cshift1_16_c16);
1786#endif
1787
01ce9e31
TK
1788/* We always have these. */
1789
1790#define HAVE_GFC_UINTEGER_1 1
1791#define HAVE_GFC_UINTEGER_4 1
e56e3fda 1792
69d3c9a4 1793#endif /* LIBGFOR_H */