1 //===-- runtime/iostat.h ----------------------------------------*- 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-exception 6 // 7 //===----------------------------------------------------------------------===// 8 9 // Defines the values returned by the runtime for IOSTAT= specifiers 10 // on I/O statements. 11 12 #ifndef FORTRAN_RUNTIME_IOSTAT_H_ 13 #define FORTRAN_RUNTIME_IOSTAT_H_ 14 #include "magic-numbers.h" 15 namespace Fortran::runtime::io { 16 17 // The value of IOSTAT= is zero when no error, end-of-record, 18 // or end-of-file condition has arisen; errors are positive values. 19 // (See 12.11.5 in Fortran 2018 for the complete requirements; 20 // these constants must match the values of their corresponding 21 // named constants in the predefined module ISO_FORTRAN_ENV, so 22 // they're actually defined in another magic-numbers.h header file 23 // so that they can be included both here and there.) 24 enum Iostat { 25 IostatOk = 0, // no error, EOF, or EOR condition 26 27 // These error codes are required by Fortran (see 12.10.2.16-17) to be 28 // negative integer values 29 IostatEnd = FORTRAN_RUNTIME_IOSTAT_END, // end-of-file on input & no error 30 // End-of-record on non-advancing input, no EOF or error 31 IostatEor = FORTRAN_RUNTIME_IOSTAT_EOR, 32 33 // This value is also required to be negative (12.11.5 bullet 6). 34 // It signifies a FLUSH statement on an unflushable unit. 35 IostatUnflushable = FORTRAN_RUNTIME_IOSTAT_FLUSH, 36 37 // Other errors are positive. We use "errno" values unchanged. 38 // This error is exported in ISO_Fortran_env. 39 IostatInquireInternalUnit = FORTRAN_RUNTIME_IOSTAT_INQUIRE_INTERNAL_UNIT, 40 41 // The remaining error codes are not exported. 42 IostatGenericError = 1001, // see IOMSG= for details 43 IostatRecordWriteOverrun, 44 IostatRecordReadOverrun, 45 IostatInternalWriteOverrun, 46 IostatErrorInFormat, 47 IostatErrorInKeyword, 48 IostatEndfileNonSequential, 49 IostatEndfileUnwritable, 50 IostatOpenBadRecl, 51 IostatOpenUnknownSize, 52 IostatOpenBadAppend, 53 IostatWriteToReadOnly, 54 IostatReadFromWriteOnly, 55 IostatBackspaceNonSequential, 56 IostatBackspaceAtFirstRecord, 57 IostatRewindNonSequential, 58 }; 59 60 const char *IostatErrorString(int); 61 62 } // namespace Fortran::runtime::io 63 #endif // FORTRAN_RUNTIME_IOSTAT_H_ 64