130 lines · cpp
1//===-- lib/runtime/iostat.cpp ----------------------------------*- C++ -*-===//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-exception6//7//===----------------------------------------------------------------------===//8 9#include "flang-rt/runtime/iostat.h"10 11namespace Fortran::runtime::io {12RT_OFFLOAD_API_GROUP_BEGIN13 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 message28 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_END128 129} // namespace Fortran::runtime::io130