[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