]> git.ipfire.org Git - thirdparty/gcc.git/blame - gcc/fortran/libgfortran.h
libstdc++: Refactor filesystem::path string conversions
[thirdparty/gcc.git] / gcc / fortran / libgfortran.h
CommitLineData
d74b97cc 1/* Header file to the Fortran front-end and runtime library
8d9254fc 2 Copyright (C) 2007-2020 Free Software Foundation, Inc.
d74b97cc
FXC
3
4This file is part of GCC.
5
6GCC is free software; you can redistribute it and/or modify it under
7the terms of the GNU General Public License as published by the Free
8Software Foundation; either version 3, or (at your option) any later
9version.
10
11GCC is distributed in the hope that it will be useful, but WITHOUT ANY
12WARRANTY; without even the implied warranty of MERCHANTABILITY or
13FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14for more details.
15
16You should have received a copy of the GNU General Public License
17along with GCC; see the file COPYING3. If not see
18<http://www.gnu.org/licenses/>. */
19
20
21/* Flags to specify which standard/extension contains a feature.
9e0667cd
TB
22 Note that no features were obsoleted nor deleted in F2003.
23 Please remember to keep those definitions in sync with
24 gfortran.texi. */
286f737c
JW
25#define GFC_STD_F2018_DEL (1<<11) /* Deleted in F2018. */
26#define GFC_STD_F2018_OBS (1<<10) /* Obsolescent in F2018. */
27#define GFC_STD_F2018 (1<<9) /* New in F2018. */
58fc89f6
TB
28#define GFC_STD_F2008_OBS (1<<8) /* Obsolescent in F2008. */
29#define GFC_STD_F2008 (1<<7) /* New in F2008. */
30#define GFC_STD_LEGACY (1<<6) /* Backward compatibility. */
31#define GFC_STD_GNU (1<<5) /* GNU Fortran extension. */
32#define GFC_STD_F2003 (1<<4) /* New in F2003. */
33#define GFC_STD_F95 (1<<3) /* New in F95. */
34#define GFC_STD_F95_DEL (1<<2) /* Deleted in F95. */
35#define GFC_STD_F95_OBS (1<<1) /* Obsolescent in F95. */
36#define GFC_STD_F77 (1<<0) /* Included in F77, but not deleted or
37 obsolescent in later standards. */
d74b97cc 38
67e9518e
JW
39/* Combinations of the above flags that specify which classes of features
40 * are allowed with a certain -std option. */
41#define GFC_STD_OPT_F95 (GFC_STD_F77 | GFC_STD_F95 | GFC_STD_F95_OBS \
42 | GFC_STD_F2008_OBS | GFC_STD_F2018_OBS \
43 | GFC_STD_F2018_DEL)
44#define GFC_STD_OPT_F03 (GFC_STD_OPT_F95 | GFC_STD_F2003)
45#define GFC_STD_OPT_F08 (GFC_STD_OPT_F03 | GFC_STD_F2008)
286f737c 46#define GFC_STD_OPT_F18 ((GFC_STD_OPT_F08 | GFC_STD_F2018) \
67e9518e 47 & (~GFC_STD_F2018_DEL))
d74b97cc 48
8b198102
FXC
49/* Bitmasks for the various FPE that can be enabled. These need to be straight integers
50 e.g., 8 instead of (1<<3), because they will be included in Fortran source. */
51#define GFC_FPE_INVALID 1
52#define GFC_FPE_DENORMAL 2
53#define GFC_FPE_ZERO 4
54#define GFC_FPE_OVERFLOW 8
55#define GFC_FPE_UNDERFLOW 16
56#define GFC_FPE_INEXACT 32
d74b97cc 57
82a4f54c
TB
58/* Defines for floating-point rounding modes. */
59#define GFC_FPE_DOWNWARD 1
60#define GFC_FPE_TONEAREST 2
61#define GFC_FPE_TOWARDZERO 3
62#define GFC_FPE_UPWARD 4
63
8b198102
FXC
64/* Size of the buffer required to store FPU state for any target.
65 In particular, this has to be larger than fenv_t on all glibc targets.
66 Currently, the winner is x86_64 with 32 bytes. */
67#define GFC_FPE_STATE_BUFFER_SIZE 32
d74b97cc 68
d3d3011f
FXC
69/* Bitmasks for the various runtime checks that can be enabled. */
70#define GFC_RTCHECK_BOUNDS (1<<0)
71#define GFC_RTCHECK_ARRAY_TEMPS (1<<1)
72#define GFC_RTCHECK_RECURSION (1<<2)
73#define GFC_RTCHECK_DO (1<<3)
20460eb9 74#define GFC_RTCHECK_POINTER (1<<4)
22bdbb0f 75#define GFC_RTCHECK_MEM (1<<5)
df1afcca 76#define GFC_RTCHECK_BITS (1<<6)
d3d3011f 77#define GFC_RTCHECK_ALL (GFC_RTCHECK_BOUNDS | GFC_RTCHECK_ARRAY_TEMPS \
20460eb9 78 | GFC_RTCHECK_RECURSION | GFC_RTCHECK_DO \
df1afcca
HA
79 | GFC_RTCHECK_POINTER | GFC_RTCHECK_MEM \
80 | GFC_RTCHECK_BITS)
d3d3011f 81
4a8d4422 82/* Special unit numbers used to convey certain conditions. Numbers -4
e344505c 83 thru -9 available. NEWUNIT values start at -10. */
13926b24
JD
84#define GFC_INTERNAL_UNIT -1 /* KIND=1 Internal Unit. */
85#define GFC_INTERNAL_UNIT4 -2 /* KIND=4 Internal Unit. */
4a8d4422 86#define GFC_INVALID_UNIT -3
d3d3011f 87
d74b97cc 88/* Possible values for the CONVERT I/O specifier. */
f19626cf 89/* Keep in sync with GFC_FLAG_CONVERT_* in gcc/flags.h. */
d74b97cc
FXC
90typedef enum
91{
92 GFC_CONVERT_NONE = -1,
93 GFC_CONVERT_NATIVE = 0,
94 GFC_CONVERT_SWAP,
95 GFC_CONVERT_BIG,
96 GFC_CONVERT_LITTLE
97}
98unit_convert;
99
100
101/* Runtime errors. */
102typedef enum
103{
104 LIBERROR_FIRST = -3, /* Marker for the first error. */
105 LIBERROR_EOR = -2, /* End of record, must be negative. */
106 LIBERROR_END = -1, /* End of file, must be negative. */
107 LIBERROR_OK = 0, /* Indicates success, must be zero. */
108 LIBERROR_OS = 5000, /* OS error, more info in errno. */
109 LIBERROR_OPTION_CONFLICT,
110 LIBERROR_BAD_OPTION,
111 LIBERROR_MISSING_OPTION,
112 LIBERROR_ALREADY_OPEN,
113 LIBERROR_BAD_UNIT,
114 LIBERROR_FORMAT,
115 LIBERROR_BAD_ACTION,
116 LIBERROR_ENDFILE,
117 LIBERROR_BAD_US,
118 LIBERROR_READ_VALUE,
119 LIBERROR_READ_OVERFLOW,
120 LIBERROR_INTERNAL,
121 LIBERROR_INTERNAL_UNIT,
122 LIBERROR_ALLOCATION,
123 LIBERROR_DIRECT_EOR,
124 LIBERROR_SHORT_RECORD,
125 LIBERROR_CORRUPT_FILE,
be1f1ed9 126 LIBERROR_INQUIRE_INTERNAL_UNIT, /* Must be different from STAT_STOPPED_IMAGE. */
d74b97cc
FXC
127 LIBERROR_LAST /* Not a real error, the last error # + 1. */
128}
129libgfortran_error_codes;
130
ef78bc3c 131/* Must kept in sync with libgfortran/caf/libcaf.h. */
385e8144
TB
132typedef enum
133{
134 GFC_STAT_UNLOCKED = 0,
135 GFC_STAT_LOCKED,
136 GFC_STAT_LOCKED_OTHER_IMAGE,
7f4aaf91 137 GFC_STAT_STOPPED_IMAGE = 6000, /* See LIBERROR_INQUIRE_INTERNAL_UNIT above. */
ef78bc3c 138 GFC_STAT_FAILED_IMAGE = 6001
385e8144
TB
139}
140libgfortran_stat_codes;
d74b97cc 141
42a8246d
TB
142typedef enum
143{
144 GFC_CAF_ATOMIC_ADD = 1,
145 GFC_CAF_ATOMIC_AND,
146 GFC_CAF_ATOMIC_OR,
147 GFC_CAF_ATOMIC_XOR
148} libcaf_atomic_codes;
149
229c5919
TB
150
151/* For CO_REDUCE. */
152#define GFC_CAF_BYREF (1<<0)
153#define GFC_CAF_HIDDENLEN (1<<1)
154#define GFC_CAF_ARG_VALUE (1<<2)
155#define GFC_CAF_ARG_DESC (1<<3)
156
157
d74b97cc
FXC
158/* Default unit number for preconnected standard input and output. */
159#define GFC_STDIN_UNIT_NUMBER 5
160#define GFC_STDOUT_UNIT_NUMBER 6
161#define GFC_STDERR_UNIT_NUMBER 0
162
7fb43006
PT
163/* F2003 onward. For std < F2003, error caught in array.c(gfc_match_array_ref). */
164#define GFC_MAX_DIMENSIONS 15
d74b97cc 165
7fb43006
PT
166#define GFC_DTYPE_RANK_MASK 0x0F
167#define GFC_DTYPE_TYPE_SHIFT 4
168#define GFC_DTYPE_TYPE_MASK 0x70
169#define GFC_DTYPE_SIZE_SHIFT 7
d74b97cc 170
a11930ba
JD
171/* Basic types. BT_VOID is used by ISO C Binding so funcs like c_f_pointer
172 can take any arg with the pointer attribute as a param. These are also
173 used in the run-time library for IO. */
ffa61a5e 174typedef enum
a11930ba 175{ BT_UNKNOWN = 0, BT_INTEGER, BT_LOGICAL, BT_REAL, BT_COMPLEX,
45a69325 176 BT_DERIVED, BT_CHARACTER, BT_CLASS, BT_PROCEDURE, BT_HOLLERITH, BT_VOID,
8dc63166 177 BT_ASSUMED, BT_UNION, BT_BOZ
ffa61a5e 178}
a11930ba 179bt;