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