1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-11-25 04:02:41 +01:00

raw_ostream: add operator<< overload for std::error_code

Summary:
The main motivation for this is unit tests, which contain a large macro
for pretty-printing std::error_code, and this macro is duplicated in
every file that needs to do this. However, the functionality may be
useful elsewhere too.

In this patch I have reimplemented the existing ASSERT_NO_ERROR macros
to reuse the new functionality, but I have kept the macro (as a
one-liner) as it is slightly more readable than ASSERT_EQ(...,
std::error_code()).

Reviewers: sammccall, ilya-biryukov

Subscribers: zturner, llvm-commits

Tags: #llvm

Differential Revision: https://reviews.llvm.org/D65643

llvm-svn: 368849
This commit is contained in:
Pavel Labath 2019-08-14 13:33:28 +00:00
parent 6b4958f0a3
commit 2c377876d9
10 changed files with 25 additions and 78 deletions

View File

@ -223,6 +223,8 @@ public:
raw_ostream &operator<<(double N);
raw_ostream &operator<<(std::error_code EC);
/// Output \p N in hexadecimal, without any prefix or padding.
raw_ostream &write_hex(unsigned long long N);

View File

@ -139,6 +139,11 @@ raw_ostream &raw_ostream::operator<<(long long N) {
return *this;
}
raw_ostream &raw_ostream::operator<<(std::error_code EC) {
return *this << EC.message() << " (" << EC.category().name() << ':'
<< EC.value() << ')';
}
raw_ostream &raw_ostream::write_hex(unsigned long long N) {
llvm::write_hex(*this, N, HexPrintStyle::Lower);
return *this;

View File

@ -17,16 +17,7 @@
using namespace llvm;
namespace fs = llvm::sys::fs;
#define ASSERT_NO_ERROR(x) \
if (std::error_code ASSERT_NO_ERROR_ec = x) { \
SmallString<128> MessageStorage; \
raw_svector_ostream Message(MessageStorage); \
Message << #x ": did not return errc::success.\n" \
<< "error number: " << ASSERT_NO_ERROR_ec.value() << "\n" \
<< "error message: " << ASSERT_NO_ERROR_ec.message() << "\n"; \
GTEST_FATAL_FAILURE_(MessageStorage.c_str()); \
} else { \
}
#define ASSERT_NO_ERROR(x) ASSERT_EQ(x, std::error_code())
class MagicTest : public testing::Test {
protected:

View File

@ -933,7 +933,7 @@ public:
class TestErrorCategory : public std::error_category {
public:
const char *name() const noexcept override { return "error"; }
const char *name() const noexcept override { return "test_error"; }
std::string message(int Condition) const override {
switch (static_cast<test_error_code>(Condition)) {
case test_error_code::unspecified:
@ -975,4 +975,11 @@ TEST(Error, SubtypeStringErrorTest) {
0);
}
TEST(Error, error_codeErrorMessageTest) {
EXPECT_NONFATAL_FAILURE(
EXPECT_EQ(make_error_code(test_error_code::unspecified),
make_error_code(test_error_code::error_2)),
"Which is: An unknown error has occurred. (test_error:1)");
}
} // namespace

View File

@ -18,16 +18,7 @@
using namespace llvm;
using namespace llvm::sys;
#define ASSERT_NO_ERROR(x) \
if (std::error_code ASSERT_NO_ERROR_ec = x) { \
SmallString<128> MessageStorage; \
raw_svector_ostream Message(MessageStorage); \
Message << #x ": did not return errc::success.\n" \
<< "error number: " << ASSERT_NO_ERROR_ec.value() << "\n" \
<< "error message: " << ASSERT_NO_ERROR_ec.message() << "\n"; \
GTEST_FATAL_FAILURE_(MessageStorage.c_str()); \
} else { \
}
#define ASSERT_NO_ERROR(x) ASSERT_EQ(x, std::error_code())
namespace {
TEST(FileOutputBuffer, Test) {

View File

@ -16,16 +16,7 @@
#include "gtest/gtest.h"
#define ASSERT_NO_ERROR(x) \
if (std::error_code ASSERT_NO_ERROR_ec = x) { \
SmallString<128> MessageStorage; \
raw_svector_ostream Message(MessageStorage); \
Message << #x ": did not return errc::success.\n" \
<< "error number: " << ASSERT_NO_ERROR_ec.value() << "\n" \
<< "error message: " << ASSERT_NO_ERROR_ec.message() << "\n"; \
GTEST_FATAL_FAILURE_(MessageStorage.c_str()); \
} else { \
}
#define ASSERT_NO_ERROR(x) ASSERT_EQ(x, std::error_code())
using namespace llvm;

View File

@ -38,24 +38,8 @@
using namespace llvm;
using namespace llvm::sys;
#define ASSERT_NO_ERROR(x) \
if (std::error_code ASSERT_NO_ERROR_ec = x) { \
SmallString<128> MessageStorage; \
raw_svector_ostream Message(MessageStorage); \
Message << #x ": did not return errc::success.\n" \
<< "error number: " << ASSERT_NO_ERROR_ec.value() << "\n" \
<< "error message: " << ASSERT_NO_ERROR_ec.message() << "\n"; \
GTEST_FATAL_FAILURE_(MessageStorage.c_str()); \
} else { \
}
#define ASSERT_ERROR(x) \
if (!x) { \
SmallString<128> MessageStorage; \
raw_svector_ostream Message(MessageStorage); \
Message << #x ": did not return a failure error code.\n"; \
GTEST_FATAL_FAILURE_(MessageStorage.c_str()); \
}
#define ASSERT_NO_ERROR(x) ASSERT_EQ(x, std::error_code())
#define ASSERT_ERROR(x) ASSERT_NE(x, std::error_code())
namespace {
@ -1265,7 +1249,7 @@ TEST_F(FileSystemTest, OpenFileForRead) {
int FileDescriptor2;
SmallString<64> ResultPath;
ASSERT_NO_ERROR(fs::openFileForRead(Twine(TempPath), FileDescriptor2,
fs::OF_None, &ResultPath))
fs::OF_None, &ResultPath));
// If we succeeded, check that the paths are the same (modulo case):
if (!ResultPath.empty()) {

View File

@ -35,16 +35,8 @@ void sleep_for(unsigned int seconds) {
#error sleep_for is not implemented on your platform.
#endif
#define ASSERT_NO_ERROR(x) \
if (std::error_code ASSERT_NO_ERROR_ec = x) { \
SmallString<128> MessageStorage; \
raw_svector_ostream Message(MessageStorage); \
Message << #x ": did not return errc::success.\n" \
<< "error number: " << ASSERT_NO_ERROR_ec.value() << "\n" \
<< "error message: " << ASSERT_NO_ERROR_ec.message() << "\n"; \
GTEST_FATAL_FAILURE_(MessageStorage.c_str()); \
} else { \
}
#define ASSERT_NO_ERROR(x) ASSERT_EQ(x, std::error_code())
// From TestMain.cpp.
extern const char *TestMainArgv0;

View File

@ -17,14 +17,7 @@
using namespace llvm;
using namespace llvm::sys;
#define ASSERT_NO_ERROR(x) \
do { \
if (std::error_code ASSERT_NO_ERROR_ec = x) { \
errs() << #x ": did not return errc::success.\n" \
<< "error number: " << ASSERT_NO_ERROR_ec.value() << "\n" \
<< "error message: " << ASSERT_NO_ERROR_ec.message() << "\n"; \
} \
} while (false)
#define ASSERT_NO_ERROR(x) ASSERT_EQ(x, std::error_code())
namespace {
std::error_code CreateFileWithContent(const SmallString<128> &FilePath,

View File

@ -15,16 +15,7 @@
using namespace llvm;
#define ASSERT_NO_ERROR(x) \
if (std::error_code ASSERT_NO_ERROR_ec = x) { \
SmallString<128> MessageStorage; \
raw_svector_ostream Message(MessageStorage); \
Message << #x ": did not return errc::success.\n" \
<< "error number: " << ASSERT_NO_ERROR_ec.value() << "\n" \
<< "error message: " << ASSERT_NO_ERROR_ec.message() << "\n"; \
GTEST_FATAL_FAILURE_(MessageStorage.c_str()); \
} else { \
}
#define ASSERT_NO_ERROR(x) ASSERT_EQ(x, std::error_code())
namespace {