summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid Bozier <seifsta@gmail.com>2017-02-15 12:58:41 +0000
committerDavid Bozier <seifsta@gmail.com>2017-02-15 12:58:41 +0000
commit9bb9b311b27732c0c98300fd6faf5b2dd6accb6a (patch)
tree133046cc5abd9c071e4b1d94f611deb40956988b
parenta0d03b22c472023c20b42de39f796dc0db50494a (diff)
Fix incorrect formatting of DataRefImpl members in operator<< function
Changed format specifiers to use format macro constant for pointer type. Moved width part of format specifier in the correct place for formatting members a and b. Added a unit test to confirm the output. Differential Revision: https://reviews.llvm.org/D28957 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@295173 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--include/llvm/Object/SymbolicFile.h4
-rw-r--r--unittests/Object/CMakeLists.txt1
-rw-r--r--unittests/Object/SymbolicFileTest.cpp34
3 files changed, 38 insertions, 1 deletions
diff --git a/include/llvm/Object/SymbolicFile.h b/include/llvm/Object/SymbolicFile.h
index af62e62c51d8..ef0f96f7834a 100644
--- a/include/llvm/Object/SymbolicFile.h
+++ b/include/llvm/Object/SymbolicFile.h
@@ -16,6 +16,7 @@
#include "llvm/Object/Binary.h"
#include "llvm/Support/Format.h"
+#include <cinttypes>
#include <utility>
namespace llvm {
@@ -33,7 +34,8 @@ union DataRefImpl {
template <typename OStream>
OStream& operator<<(OStream &OS, const DataRefImpl &D) {
- OS << "(" << format("0x%x8", D.p) << " (" << format("0x%x8", D.d.a) << ", " << format("0x%x8", D.d.b) << "))";
+ OS << "(" << format("0x%08" PRIxPTR, D.p) << " (" << format("0x%08x", D.d.a)
+ << ", " << format("0x%08x", D.d.b) << "))";
return OS;
}
diff --git a/unittests/Object/CMakeLists.txt b/unittests/Object/CMakeLists.txt
index 7a63c167a30b..e1376bffbc0f 100644
--- a/unittests/Object/CMakeLists.txt
+++ b/unittests/Object/CMakeLists.txt
@@ -4,5 +4,6 @@ set(LLVM_LINK_COMPONENTS
add_llvm_unittest(ObjectTests
SymbolSizeTest.cpp
+ SymbolicFileTest.cpp
)
diff --git a/unittests/Object/SymbolicFileTest.cpp b/unittests/Object/SymbolicFileTest.cpp
new file mode 100644
index 000000000000..61859108ebd1
--- /dev/null
+++ b/unittests/Object/SymbolicFileTest.cpp
@@ -0,0 +1,34 @@
+//===- SymbolicFileTest.cpp - Tests for SymbolicFile.cpp ------------------===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+#include "llvm/Object/SymbolicFile.h"
+#include "llvm/Support/raw_ostream.h"
+#include "gtest/gtest.h"
+#include <sstream>
+
+TEST(Object, DataRefImplOstream) {
+ std::string s;
+ llvm::raw_string_ostream OS(s);
+ llvm::object::DataRefImpl Data;
+ Data.d.a = 0xeeee0000;
+ Data.d.b = 0x0000ffff;
+
+ static_assert(sizeof Data.p == sizeof(uint64_t) ||
+ sizeof Data.p == sizeof(uint32_t),
+ "Test expected pointer type to be 32 or 64-bit.");
+
+ char const *Expected = sizeof Data.p == sizeof(uint64_t)
+ ? "(0xffffeeee0000 (0xeeee0000, 0x0000ffff))"
+ : "(0xeeee0000 (0xeeee0000, 0x0000ffff))";
+
+ OS << Data;
+ OS.flush();
+
+ EXPECT_EQ(Expected, s);
+}