aboutsummaryrefslogtreecommitdiff
path: root/llvm/unittests/IR/DebugInfoTest.cpp
diff options
context:
space:
mode:
authorDuncan P. N. Exon Smith <dexonsmith@apple.com>2014-10-02 21:56:57 +0000
committerDuncan P. N. Exon Smith <dexonsmith@apple.com>2014-10-02 21:56:57 +0000
commit571f97bd9055738e88c982564c06ba6d48ac7f9f (patch)
tree8853f1ba2183cc4f7d5c8fb454188b705e445e1a /llvm/unittests/IR/DebugInfoTest.cpp
parent02b418a875b630be83fad340e3a213701904617c (diff)
downloadllvm-571f97bd9055738e88c982564c06ba6d48ac7f9f.zip
llvm-571f97bd9055738e88c982564c06ba6d48ac7f9f.tar.gz
llvm-571f97bd9055738e88c982564c06ba6d48ac7f9f.tar.bz2
DI: Fold constant arguments into a single MDString
This patch addresses the first stage of PR17891 by folding constant arguments together into a single MDString. Integers are stringified and a `\0` character is used as a separator. Part of PR17891. Note: I've attached my testcases upgrade scripts to the PR. If I've just broken your out-of-tree testcases, they might help. llvm-svn: 218914
Diffstat (limited to 'llvm/unittests/IR/DebugInfoTest.cpp')
-rw-r--r--llvm/unittests/IR/DebugInfoTest.cpp68
1 files changed, 68 insertions, 0 deletions
diff --git a/llvm/unittests/IR/DebugInfoTest.cpp b/llvm/unittests/IR/DebugInfoTest.cpp
new file mode 100644
index 0000000..e8bbe61
--- /dev/null
+++ b/llvm/unittests/IR/DebugInfoTest.cpp
@@ -0,0 +1,68 @@
+//===- llvm/unittest/IR/DebugInfo.cpp - DebugInfo tests -------------------===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+#include "llvm/IR/DebugInfo.h"
+#include "gtest/gtest.h"
+
+using namespace llvm;
+
+namespace llvm {
+
+static void PrintTo(const StringRef &S, ::std::ostream *os) {
+ *os << "(" << (void *)S.data() << "," << S.size() << ") = '";
+ for (auto C : S)
+ if (C)
+ *os << C;
+ else
+ *os << "\\00";
+ *os << "'";
+}
+static void PrintTo(const DIHeaderFieldIterator &I, ::std::ostream *os) {
+ PrintTo(I.getCurrent(), os);
+ *os << " in ";
+ PrintTo(I.getHeader(), os);
+}
+
+} // end namespace llvm
+
+namespace {
+
+#define MAKE_FIELD_ITERATOR(S) \
+ DIHeaderFieldIterator(StringRef(S, sizeof(S) - 1))
+TEST(DebugInfoTest, DIHeaderFieldIterator) {
+ ASSERT_EQ(DIHeaderFieldIterator(), DIHeaderFieldIterator());
+
+ ASSERT_NE(DIHeaderFieldIterator(), MAKE_FIELD_ITERATOR(""));
+ ASSERT_EQ(DIHeaderFieldIterator(), ++MAKE_FIELD_ITERATOR(""));
+ ASSERT_EQ("", *DIHeaderFieldIterator(""));
+
+ ASSERT_NE(DIHeaderFieldIterator(), MAKE_FIELD_ITERATOR("stuff"));
+ ASSERT_EQ(DIHeaderFieldIterator(), ++MAKE_FIELD_ITERATOR("stuff"));
+ ASSERT_EQ("stuff", *DIHeaderFieldIterator("stuff"));
+
+ ASSERT_NE(DIHeaderFieldIterator(), MAKE_FIELD_ITERATOR("st\0uff"));
+ ASSERT_NE(DIHeaderFieldIterator(), ++MAKE_FIELD_ITERATOR("st\0uff"));
+ ASSERT_EQ(DIHeaderFieldIterator(), ++++MAKE_FIELD_ITERATOR("st\0uff"));
+ ASSERT_EQ("st", *MAKE_FIELD_ITERATOR("st\0uff"));
+ ASSERT_EQ("uff", *++MAKE_FIELD_ITERATOR("st\0uff"));
+
+ ASSERT_NE(DIHeaderFieldIterator(), MAKE_FIELD_ITERATOR("stuff\0"));
+ ASSERT_NE(DIHeaderFieldIterator(), ++MAKE_FIELD_ITERATOR("stuff\0"));
+ ASSERT_EQ(DIHeaderFieldIterator(), ++++MAKE_FIELD_ITERATOR("stuff\0"));
+ ASSERT_EQ("stuff", *MAKE_FIELD_ITERATOR("stuff\0"));
+ ASSERT_EQ("", *++MAKE_FIELD_ITERATOR("stuff\0"));
+
+ ASSERT_NE(DIHeaderFieldIterator(), MAKE_FIELD_ITERATOR("\0stuff"));
+ ASSERT_NE(DIHeaderFieldIterator(), ++MAKE_FIELD_ITERATOR("\0stuff"));
+ ASSERT_EQ(DIHeaderFieldIterator(), ++++MAKE_FIELD_ITERATOR("\0stuff"));
+ ASSERT_EQ("", *MAKE_FIELD_ITERATOR("\0stuff"));
+ ASSERT_EQ("stuff", *++MAKE_FIELD_ITERATOR("\0stuff"));
+}
+
+} // end namespace