Files
gps/tools/local/circt/include/llvm/Support/VirtualOutputError.h
T
2026-07-12 11:01:51 +03:00

133 lines
4.1 KiB
C++

//===----------------------------------------------------------------------===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
///
/// \file
/// This file contains the declarations of the OutputError class.
///
//===----------------------------------------------------------------------===//
#ifndef LLVM_SUPPORT_VIRTUALOUTPUTERROR_H
#define LLVM_SUPPORT_VIRTUALOUTPUTERROR_H
#include "llvm/Support/Error.h"
#include "llvm/Support/VirtualOutputConfig.h"
namespace llvm::vfs {
LLVM_ABI const std::error_category &output_category();
enum class OutputErrorCode {
// Error code 0 is absent. Use std::error_code() instead.
not_closed = 1,
invalid_config,
already_closed,
has_open_proxy,
};
inline std::error_code make_error_code(OutputErrorCode EV) {
return std::error_code(static_cast<int>(EV), output_category());
}
/// Error related to an \a OutputFile. Derives from \a ECError and adds \a
/// getOutputPath().
class LLVM_ABI OutputError : public ErrorInfo<OutputError, ECError> {
void anchor() override;
public:
StringRef getOutputPath() const { return OutputPath; }
void log(raw_ostream &OS) const override;
// Used by ErrorInfo::classID.
static char ID;
OutputError(const Twine &OutputPath, std::error_code EC)
: ErrorInfo<OutputError, ECError>(EC), OutputPath(OutputPath.str()) {
assert(EC && "Cannot create OutputError from success EC");
}
OutputError(const Twine &OutputPath, OutputErrorCode EV)
: ErrorInfo<OutputError, ECError>(make_error_code(EV)),
OutputPath(OutputPath.str()) {
assert(EC && "Cannot create OutputError from success EC");
}
private:
std::string OutputPath;
};
/// Return \a Error::success() or use \p OutputPath to create an \a
/// OutputError, depending on \p EC.
inline Error convertToOutputError(const Twine &OutputPath, std::error_code EC) {
if (EC)
return make_error<OutputError>(OutputPath, EC);
return Error::success();
}
/// Error related to an OutputConfig for an \a OutputFile. Derives from \a
/// OutputError and adds \a getConfig().
class LLVM_ABI OutputConfigError
: public ErrorInfo<OutputConfigError, OutputError> {
void anchor() override;
public:
OutputConfig getConfig() const { return Config; }
void log(raw_ostream &OS) const override;
// Used by ErrorInfo::classID.
static char ID;
OutputConfigError(OutputConfig Config, const Twine &OutputPath)
: ErrorInfo<OutputConfigError, OutputError>(
OutputPath, OutputErrorCode::invalid_config),
Config(Config) {}
private:
OutputConfig Config;
};
/// Error related to a temporary file for an \a OutputFile. Derives from \a
/// OutputError and adds \a getTempPath().
class LLVM_ABI TempFileOutputError
: public ErrorInfo<TempFileOutputError, OutputError> {
void anchor() override;
public:
StringRef getTempPath() const { return TempPath; }
void log(raw_ostream &OS) const override;
// Used by ErrorInfo::classID.
static char ID;
TempFileOutputError(const Twine &TempPath, const Twine &OutputPath,
std::error_code EC)
: ErrorInfo<TempFileOutputError, OutputError>(OutputPath, EC),
TempPath(TempPath.str()) {}
TempFileOutputError(const Twine &TempPath, const Twine &OutputPath,
OutputErrorCode EV)
: ErrorInfo<TempFileOutputError, OutputError>(OutputPath, EV),
TempPath(TempPath.str()) {}
private:
std::string TempPath;
};
/// Return \a Error::success() or use \p TempPath and \p OutputPath to create a
/// \a TempFileOutputError, depending on \p EC.
inline Error convertToTempFileOutputError(const Twine &TempPath,
const Twine &OutputPath,
std::error_code EC) {
if (EC)
return make_error<TempFileOutputError>(TempPath, OutputPath, EC);
return Error::success();
}
} // namespace llvm::vfs
#endif // LLVM_SUPPORT_VIRTUALOUTPUTERROR_H