diff options
| -rw-r--r-- | llvm/include/llvm/Support/Error.h | 10 | ||||
| -rw-r--r-- | llvm/unittests/Support/ErrorTest.cpp | 3 |
2 files changed, 8 insertions, 5 deletions
diff --git a/llvm/include/llvm/Support/Error.h b/llvm/include/llvm/Support/Error.h index 3ee59b9309f..4e1619019bb 100644 --- a/llvm/include/llvm/Support/Error.h +++ b/llvm/include/llvm/Support/Error.h @@ -322,7 +322,7 @@ private: /// 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 /// compile time. -class ErrorSuccess : public Error {}; +class ErrorSuccess final : public Error {}; 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. class FileError final : public ErrorInfo<FileError> { - template <class Err> - friend Error createFileError(std::string, Err); + friend Error createFileError(std::string, Error); public: 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 /// Error is unchecked. -template <class Err> -inline Error createFileError(std::string F, Err E) { +inline Error createFileError(std::string F, Error E) { return FileError::build(F, std::move(E)); } +Error createFileError(std::string F, ErrorSuccess) = delete; + /// Helper for check-and-exit error handling. /// /// For tool use only. NOT FOR USE IN LIBRARY CODE. diff --git a/llvm/unittests/Support/ErrorTest.cpp b/llvm/unittests/Support/ErrorTest.cpp index 25102895d20..ed1e2bb458b 100644 --- a/llvm/unittests/Support/ErrorTest.cpp +++ b/llvm/unittests/Support/ErrorTest.cpp @@ -874,6 +874,9 @@ TEST(Error, FileErrorTest) { }, ""); #endif + // Not allowed, would fail at compile-time + //consumeError(createFileError("file.bin", ErrorSuccess())); + Error E1 = make_error<CustomError>(1); Error FE1 = createFileError("file.bin", std::move(E1)); EXPECT_EQ(toString(std::move(FE1)).compare("'file.bin': CustomError {1}"), 0); |

