15#ifndef FORTRAN_RUNTIME_IO_ERROR_H_
16#define FORTRAN_RUNTIME_IO_ERROR_H_
18#include "terminator.h"
19#include "flang/Runtime/iostat.h"
20#include "flang/Runtime/memory.h"
23namespace Fortran::runtime::io {
28 using Terminator::Terminator;
31 RT_API_ATTRS
void HasIoStat() { flags_ |= hasIoStat; }
32 RT_API_ATTRS
void HasErrLabel() { flags_ |= hasErr; }
33 RT_API_ATTRS
void HasEndLabel() { flags_ |= hasEnd; }
34 RT_API_ATTRS
void HasEorLabel() { flags_ |= hasEor; }
35 RT_API_ATTRS
void HasIoMsg() { flags_ |= hasIoMsg; }
36 RT_API_ATTRS
void HasRec() { flags_ |= hasRec; }
38 RT_API_ATTRS
bool InError()
const {
39 return ioStat_ != IostatOk || pendingError_ != IostatOk;
46 RT_API_ATTRS
void SetPendingError(
int iostat) { pendingError_ = iostat; }
48 RT_API_ATTRS
void SignalError(
int iostatOrErrno,
const char *msg, ...);
49 RT_API_ATTRS
void SignalError(
int iostatOrErrno);
50 template <
typename... X>
51 RT_API_ATTRS
void SignalError(
const char *msg, X &&...xs) {
52 SignalError(IostatGenericError, msg, std::forward<X>(xs)...);
55 RT_API_ATTRS
void Forward(
int iostatOrErrno,
const char *, std::size_t);
62 RT_API_ATTRS
void SignalPendingError();
64 RT_API_ATTRS
int GetIoStat()
const {
return ioStat_; }
65 RT_API_ATTRS
bool GetIoMsg(
char *, std::size_t);
68 enum Flag : std::uint8_t {
76 std::uint8_t flags_{0};
77 int ioStat_{IostatOk};
79 int pendingError_{IostatOk};
Definition: terminator.h:23
Definition: io-error.h:26