[llvm] c0fc29c - Add operator<< for object::SectionedAddress

Pavel Labath via llvm-commits llvm-commits at lists.llvm.org
Tue Nov 19 01:39:19 PST 2019


Author: Pavel Labath
Date: 2019-11-19T10:34:30+01:00
New Revision: c0fc29c4684a997d282bfed71eb4d903ad16ee25

URL: https://github.com/llvm/llvm-project/commit/c0fc29c4684a997d282bfed71eb4d903ad16ee25
DIFF: https://github.com/llvm/llvm-project/commit/c0fc29c4684a997d282bfed71eb4d903ad16ee25.diff

LOG: Add operator<< for object::SectionedAddress

The main motivation for this is better failure messages in unit tests.

Split off from D70394.

Added: 
    llvm/unittests/Object/ObjectFileTest.cpp

Modified: 
    llvm/include/llvm/Object/ObjectFile.h
    llvm/lib/Object/ObjectFile.cpp
    llvm/unittests/Object/CMakeLists.txt

Removed: 
    


################################################################################
diff  --git a/llvm/include/llvm/Object/ObjectFile.h b/llvm/include/llvm/Object/ObjectFile.h
index adc9dbc189af..2f1493457605 100644
--- a/llvm/include/llvm/Object/ObjectFile.h
+++ b/llvm/include/llvm/Object/ObjectFile.h
@@ -155,6 +155,8 @@ inline bool operator==(const SectionedAddress &LHS,
          std::tie(RHS.SectionIndex, RHS.Address);
 }
 
+raw_ostream &operator<<(raw_ostream &OS, const SectionedAddress &Addr);
+
 /// This is a value type class that represents a single symbol in the list of
 /// symbols in the object file.
 class SymbolRef : public BasicSymbolRef {

diff  --git a/llvm/lib/Object/ObjectFile.cpp b/llvm/lib/Object/ObjectFile.cpp
index e0e63a5a7d76..098b3d8f8dd0 100644
--- a/llvm/lib/Object/ObjectFile.cpp
+++ b/llvm/lib/Object/ObjectFile.cpp
@@ -32,6 +32,13 @@
 using namespace llvm;
 using namespace object;
 
+raw_ostream &object::operator<<(raw_ostream &OS, const SectionedAddress &Addr) {
+  OS << "SectionedAddress{" << format_hex(Addr.Address, 10);
+  if (Addr.SectionIndex != SectionedAddress::UndefSection)
+    OS << ", " << Addr.SectionIndex;
+  return OS << "}";
+}
+
 void ObjectFile::anchor() {}
 
 ObjectFile::ObjectFile(unsigned int Type, MemoryBufferRef Source)

diff  --git a/llvm/unittests/Object/CMakeLists.txt b/llvm/unittests/Object/CMakeLists.txt
index e0be1ba2b2fd..809515a2e78a 100644
--- a/llvm/unittests/Object/CMakeLists.txt
+++ b/llvm/unittests/Object/CMakeLists.txt
@@ -5,6 +5,7 @@ set(LLVM_LINK_COMPONENTS
 
 add_llvm_unittest(ObjectTests
   MinidumpTest.cpp
+  ObjectFileTest.cpp
   SymbolSizeTest.cpp
   SymbolicFileTest.cpp
   )

diff  --git a/llvm/unittests/Object/ObjectFileTest.cpp b/llvm/unittests/Object/ObjectFileTest.cpp
new file mode 100644
index 000000000000..7309c2c25287
--- /dev/null
+++ b/llvm/unittests/Object/ObjectFileTest.cpp
@@ -0,0 +1,20 @@
+//===- ObjectFileTest.cpp - Tests for ObjectFile.cpp ----------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#include "llvm/Object/ObjectFile.h"
+#include "llvm/Support/ScopedPrinter.h"
+#include "gtest/gtest.h"
+
+using namespace llvm;
+using namespace llvm::object;
+
+TEST(SectionedAddress, StreamingOperator) {
+  EXPECT_EQ("SectionedAddress{0x00000047}", to_string(SectionedAddress{0x47}));
+  EXPECT_EQ("SectionedAddress{0x00000047, 42}",
+            to_string(SectionedAddress{0x47, 42}));
+}


        


More information about the llvm-commits mailing list