Revert "raw_ostream: add operator<< overload for std::error_code"
authorPavel Labath <pavel@labath.sk>
Wed, 14 Aug 2019 13:59:04 +0000 (13:59 +0000)
committerPavel Labath <pavel@labath.sk>
Wed, 14 Aug 2019 13:59:04 +0000 (13:59 +0000)
This reverts commit r368849, because it breaks some bots (e.g.
llvm-clang-x86_64-win-fast).

It turns out this is not as NFC as we had hoped, because operator== will
consider two std::error_codes to be distinct even though they both hold
"success" values if they have different categories.

llvm-svn: 368854

llvm/include/llvm/Support/raw_ostream.h
llvm/lib/Support/raw_ostream.cpp
llvm/unittests/BinaryFormat/TestFileMagic.cpp
llvm/unittests/Support/ErrorTest.cpp
llvm/unittests/Support/FileOutputBufferTest.cpp
llvm/unittests/Support/Host.cpp
llvm/unittests/Support/Path.cpp
llvm/unittests/Support/ProgramTest.cpp
llvm/unittests/Support/ReplaceFileTest.cpp
llvm/unittests/Support/raw_pwrite_stream_test.cpp

index 3ac70b8..4a6b51a 100644 (file)
@@ -223,8 +223,6 @@ 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);
 
index 4a2d6d2..b998937 100644 (file)
@@ -139,11 +139,6 @@ 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;
index 3c0fe27..9ed707b 100644 (file)
 using namespace llvm;
 namespace fs = llvm::sys::fs;
 
-#define ASSERT_NO_ERROR(x) ASSERT_EQ(x, std::error_code())
+#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 {                                                                     \
+  }
 
 class MagicTest : public testing::Test {
 protected:
index ec5c30b..c4a9f3e 100644 (file)
@@ -933,7 +933,7 @@ public:
 
 class TestErrorCategory : public std::error_category {
 public:
-  const char *name() const noexcept override { return "test_error"; }
+  const char *name() const noexcept override { return "error"; }
   std::string message(int Condition) const override {
     switch (static_cast<test_error_code>(Condition)) {
     case test_error_code::unspecified:
@@ -975,11 +975,4 @@ 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
index 24b6b0d..8afc212 100644 (file)
 using namespace llvm;
 using namespace llvm::sys;
 
-#define ASSERT_NO_ERROR(x) ASSERT_EQ(x, std::error_code())
+#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 {                                                                     \
+  }
 
 namespace {
 TEST(FileOutputBuffer, Test) {
index 287daba..ec9dd95 100644 (file)
 
 #include "gtest/gtest.h"
 
-#define ASSERT_NO_ERROR(x) ASSERT_EQ(x, std::error_code())
+#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 {                                                                     \
+  }
 
 using namespace llvm;
 
index 101f760..1802b00 100644 (file)
 using namespace llvm;
 using namespace llvm::sys;
 
-#define ASSERT_NO_ERROR(x) ASSERT_EQ(x, std::error_code())
-#define ASSERT_ERROR(x) ASSERT_NE(x, std::error_code())
+#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());                              \
+  }
 
 namespace {
 
@@ -1249,7 +1265,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()) {
index 6a1438b..85a1d53 100644 (file)
@@ -35,8 +35,16 @@ void sleep_for(unsigned int seconds) {
 #error sleep_for is not implemented on your platform.
 #endif
 
-#define ASSERT_NO_ERROR(x) ASSERT_EQ(x, std::error_code())
-
+#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 {                                                                     \
+  }
 // From TestMain.cpp.
 extern const char *TestMainArgv0;
 
index 9a870a7..d2273d7 100644 (file)
 using namespace llvm;
 using namespace llvm::sys;
 
-#define ASSERT_NO_ERROR(x) ASSERT_EQ(x, std::error_code())
+#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)
 
 namespace {
 std::error_code CreateFileWithContent(const SmallString<128> &FilePath,
index b2a7434..459eb94 100644 (file)
 
 using namespace llvm;
 
-#define ASSERT_NO_ERROR(x) ASSERT_EQ(x, std::error_code())
+#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 {                                                                     \
+  }
 
 namespace {