1//===-- runtime/iostat.cpp ------------------------------------------------===//
2//
3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6//
7//===----------------------------------------------------------------------===//
8
9#include "flang/Runtime/iostat.h"
10
11namespace Fortran::runtime::io {
12RT_OFFLOAD_API_GROUP_BEGIN
13
14const char *IostatErrorString(int iostat) {
15 switch (iostat) {
16 case IostatOk:
17 return "No error";
18 case IostatEnd:
19 return "End of file during input";
20 case IostatEor:
21 return "End of record during non-advancing input";
22 case IostatUnflushable:
23 return "FLUSH not possible";
24 case IostatInquireInternalUnit:
25 return "INQUIRE on internal unit";
26 case IostatGenericError:
27 return "I/O error"; // dummy value, there's always a message
28 case IostatRecordWriteOverrun:
29 return "Excessive output to fixed-size record";
30 case IostatRecordReadOverrun:
31 return "Excessive input from fixed-size record";
32 case IostatInternalWriteOverrun:
33 return "Internal write overran available records";
34 case IostatErrorInFormat:
35 return "Bad FORMAT";
36 case IostatErrorInKeyword:
37 return "Bad keyword argument value";
38 case IostatEndfileDirect:
39 return "ENDFILE on direct-access file";
40 case IostatEndfileUnwritable:
41 return "ENDFILE on read-only file";
42 case IostatOpenBadRecl:
43 return "OPEN with bad RECL= value";
44 case IostatOpenUnknownSize:
45 return "OPEN of file of unknown size";
46 case IostatOpenBadAppend:
47 return "OPEN(POSITION='APPEND') of unpositionable file";
48 case IostatWriteToReadOnly:
49 return "Attempted output to read-only file";
50 case IostatReadFromWriteOnly:
51 return "Attempted input from write-only file";
52 case IostatBackspaceNonSequential:
53 return "BACKSPACE on non-sequential file";
54 case IostatBackspaceAtFirstRecord:
55 return "BACKSPACE at first record";
56 case IostatRewindNonSequential:
57 return "REWIND on non-sequential file";
58 case IostatWriteAfterEndfile:
59 return "WRITE after ENDFILE";
60 case IostatFormattedIoOnUnformattedUnit:
61 return "Formatted I/O on unformatted file";
62 case IostatUnformattedIoOnFormattedUnit:
63 return "Unformatted I/O on formatted file";
64 case IostatListIoOnDirectAccessUnit:
65 return "List-directed or NAMELIST I/O on direct-access file";
66 case IostatUnformattedChildOnFormattedParent:
67 return "Unformatted child I/O on formatted parent unit";
68 case IostatFormattedChildOnUnformattedParent:
69 return "Formatted child I/O on unformatted parent unit";
70 case IostatChildInputFromOutputParent:
71 return "Child input from output parent unit";
72 case IostatChildOutputToInputParent:
73 return "Child output to input parent unit";
74 case IostatShortRead:
75 return "Read from external unit returned insufficient data";
76 case IostatMissingTerminator:
77 return "Sequential record missing its terminator";
78 case IostatBadUnformattedRecord:
79 return "Erroneous unformatted sequential file record structure";
80 case IostatUTF8Decoding:
81 return "UTF-8 decoding error";
82 case IostatUnitOverflow:
83 return "UNIT number is out of range";
84 case IostatBadRealInput:
85 return "Bad REAL input value";
86 case IostatBadScaleFactor:
87 return "Bad REAL output scale factor (kP)";
88 case IostatBadAsynchronous:
89 return "READ/WRITE(ASYNCHRONOUS='YES') on unit without "
90 "OPEN(ASYNCHRONOUS='YES')";
91 case IostatBadWaitUnit:
92 return "WAIT(UNIT=) for a bad or unconnected unit number";
93 case IostatBOZInputOverflow:
94 return "B/O/Z input value overflows variable";
95 case IostatIntegerInputOverflow:
96 return "Integer input value overflows variable";
97 case IostatRealInputOverflow:
98 return "Real or complex input value overflows type";
99 case IostatCannotReposition:
100 return "Attempt to reposition a unit which is connected to a file that can "
101 "only be processed sequentially";
102 case IostatOpenAlreadyConnected:
103 return "OPEN of file already connected to another unit";
104 case IostatBadWaitId:
105 return "WAIT(ID=nonzero) for an ID value that is not a pending operation";
106 case IostatTooManyAsyncOps:
107 return "Too many asynchronous operations pending on unit";
108 case IostatBadBackspaceUnit:
109 return "BACKSPACE on unconnected unit";
110 case IostatBadUnitNumber:
111 return "Negative unit number is not allowed";
112 case IostatBadFlushUnit:
113 return "FLUSH attempted on a bad or unconnected unit number";
114 case IostatBadOpOnChildUnit:
115 return "Impermissible I/O statement on child I/O unit";
116 case IostatBadNewUnit:
117 return "NEWUNIT= without FILE= or STATUS='SCRATCH'";
118 case IostatBadListDirectedInputSeparator:
119 return "List-directed input value has trailing unused characters";
120 case IostatNonExternalDefinedUnformattedIo:
121 return "Defined unformatted I/O without an external unit";
122 default:
123 return nullptr;
124 }
125}
126
127RT_OFFLOAD_API_GROUP_END
128
129} // namespace Fortran::runtime::io
130

source code of flang/runtime/iostat.cpp