forked from OSchip/llvm-project
[Error] Reintroduce type validation in createFileError()
This prevents from using ErrorSuccess as an argument to createFileError(). Differential Revision: https://reviews.llvm.org/D51490 llvm-svn: 341689
This commit is contained in:
parent
91c95a35c1
commit
960324471b
|
@ -322,7 +322,7 @@ private:
|
||||||
/// Subclass of Error for the sole purpose of identifying the success path in
|
/// Subclass of Error for the sole purpose of identifying the success path in
|
||||||
/// the type system. This allows to catch invalid conversion to Expected<T> at
|
/// the type system. This allows to catch invalid conversion to Expected<T> at
|
||||||
/// compile time.
|
/// compile time.
|
||||||
class ErrorSuccess : public Error {};
|
class ErrorSuccess final : public Error {};
|
||||||
|
|
||||||
inline ErrorSuccess Error::success() { return ErrorSuccess(); }
|
inline ErrorSuccess Error::success() { return ErrorSuccess(); }
|
||||||
|
|
||||||
|
@ -1171,8 +1171,7 @@ Error createStringError(std::error_code EC, char const *Msg);
|
||||||
/// show more detailed information to the user.
|
/// show more detailed information to the user.
|
||||||
class FileError final : public ErrorInfo<FileError> {
|
class FileError final : public ErrorInfo<FileError> {
|
||||||
|
|
||||||
template <class Err>
|
friend Error createFileError(std::string, Error);
|
||||||
friend Error createFileError(std::string, Err);
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
void log(raw_ostream &OS) const override {
|
void log(raw_ostream &OS) const override {
|
||||||
|
@ -1207,11 +1206,12 @@ private:
|
||||||
|
|
||||||
/// Concatenate a source file path and/or name with an Error. The resulting
|
/// Concatenate a source file path and/or name with an Error. The resulting
|
||||||
/// Error is unchecked.
|
/// Error is unchecked.
|
||||||
template <class Err>
|
inline Error createFileError(std::string F, Error E) {
|
||||||
inline Error createFileError(std::string F, Err E) {
|
|
||||||
return FileError::build(F, std::move(E));
|
return FileError::build(F, std::move(E));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Error createFileError(std::string F, ErrorSuccess) = delete;
|
||||||
|
|
||||||
/// Helper for check-and-exit error handling.
|
/// Helper for check-and-exit error handling.
|
||||||
///
|
///
|
||||||
/// For tool use only. NOT FOR USE IN LIBRARY CODE.
|
/// For tool use only. NOT FOR USE IN LIBRARY CODE.
|
||||||
|
|
|
@ -874,6 +874,9 @@ TEST(Error, FileErrorTest) {
|
||||||
},
|
},
|
||||||
"");
|
"");
|
||||||
#endif
|
#endif
|
||||||
|
// Not allowed, would fail at compile-time
|
||||||
|
//consumeError(createFileError("file.bin", ErrorSuccess()));
|
||||||
|
|
||||||
Error E1 = make_error<CustomError>(1);
|
Error E1 = make_error<CustomError>(1);
|
||||||
Error FE1 = createFileError("file.bin", std::move(E1));
|
Error FE1 = createFileError("file.bin", std::move(E1));
|
||||||
EXPECT_EQ(toString(std::move(FE1)).compare("'file.bin': CustomError {1}"), 0);
|
EXPECT_EQ(toString(std::move(FE1)).compare("'file.bin': CustomError {1}"), 0);
|
||||||
|
|
Loading…
Reference in New Issue