xref: /llvm-project/flang/runtime/iostat.cpp (revision 8ebf741136c66f51053315bf4f0ef828c6f66094)
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 
11 namespace Fortran::runtime::io {
12 RT_OFFLOAD_API_GROUP_BEGIN
13 
IostatErrorString(int iostat)14 const 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 
127 RT_OFFLOAD_API_GROUP_END
128 
129 } // namespace Fortran::runtime::io
130