[PATCH] D51490: [Error] Fix template deduction in createFileError
Zachary Turner via llvm-commits
llvm-commits at lists.llvm.org
Fri Sep 7 07:07:45 PDT 2018
That works, I agree it doesn’t make sense to have descendants of
ErrorSuccess.
Lgtm
On Fri, Sep 7, 2018 at 6:55 AM Alexandre Ganea via Phabricator <
reviews at reviews.llvm.org> wrote:
> aganea updated this revision to Diff 164412.
> aganea added a reviewer: lhames.
> aganea added a comment.
>
> Updated diff. I made `ErrorSuccess` a `final` class. That makes things
> simpler and solves the issue for `Expected` as well.
>
> Please let me know if that sounds better.
>
>
> https://reviews.llvm.org/D51490
>
> Files:
> include/llvm/Support/Error.h
> unittests/Support/ErrorTest.cpp
>
>
> Index: unittests/Support/ErrorTest.cpp
> ===================================================================
> --- unittests/Support/ErrorTest.cpp
> +++ unittests/Support/ErrorTest.cpp
> @@ -874,6 +874,9 @@
> },
> "");
> #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);
> Index: include/llvm/Support/Error.h
> ===================================================================
> --- include/llvm/Support/Error.h
> +++ include/llvm/Support/Error.h
> @@ -322,7 +322,7 @@
> /// 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 @@
> /// 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 @@
>
> /// 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.
>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20180907/c3fa8fca/attachment.html>
More information about the llvm-commits
mailing list