diff options
author | Sam McCall <sam.mccall@gmail.com> | 2018-07-12 07:11:28 +0000 |
---|---|---|
committer | Sam McCall <sam.mccall@gmail.com> | 2018-07-12 07:11:28 +0000 |
commit | 907bde12403f582a1a04002ff265e846fc254fc1 (patch) | |
tree | 447ba0186ca15be034a98a9903b1e42fa34ad622 /llvm/unittests/Support/FormatVariadicTest.cpp | |
parent | d3b69c6be91a960f8cd86d745f3056fe622b4cff (diff) | |
download | bcm5719-llvm-907bde12403f582a1a04002ff265e846fc254fc1.tar.gz bcm5719-llvm-907bde12403f582a1a04002ff265e846fc254fc1.zip |
[Support] Require llvm::Error passed to formatv() to be wrapped in fmt_consume()
Summary:
Someone must be responsible for handling an Error. When formatv takes
ownership of an Error, the formatv_object destructor must take care of this.
Passing an error by value to formatv() is not considered explicit enough to mark
the error as handled (see D49013), so we require callers to use a format adapter
to confirm this intent.
Reviewers: zturner
Subscribers: llvm-commits, lhames
Differential Revision: https://reviews.llvm.org/D49170
llvm-svn: 336888
Diffstat (limited to 'llvm/unittests/Support/FormatVariadicTest.cpp')
-rw-r--r-- | llvm/unittests/Support/FormatVariadicTest.cpp | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/llvm/unittests/Support/FormatVariadicTest.cpp b/llvm/unittests/Support/FormatVariadicTest.cpp index 6d621464c0e..91a44bae3a9 100644 --- a/llvm/unittests/Support/FormatVariadicTest.cpp +++ b/llvm/unittests/Support/FormatVariadicTest.cpp @@ -8,6 +8,7 @@ //===----------------------------------------------------------------------===// #include "llvm/Support/FormatVariadic.h" +#include "llvm/Support/Error.h" #include "llvm/Support/FormatAdapters.h" #include "gtest/gtest.h" @@ -680,3 +681,11 @@ TEST(FormatVariadicTest, FormatStreamable) { adl::X X; EXPECT_EQ("X", formatv("{0}", X).str()); } + +TEST(FormatVariadicTest, FormatError) { + auto E1 = make_error<StringError>("X", inconvertibleErrorCode()); + EXPECT_EQ("X", formatv("{0}", E1).str()); + EXPECT_TRUE(E1.isA<StringError>()); // not consumed + EXPECT_EQ("X", formatv("{0}", fmt_consume(std::move(E1))).str()); + EXPECT_FALSE(E1.isA<StringError>()); // consumed +} |