summaryrefslogtreecommitdiffstats
path: root/llvm/unittests/Demangle/ItaniumDemangleTest.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/unittests/Demangle/ItaniumDemangleTest.cpp')
-rw-r--r--llvm/unittests/Demangle/ItaniumDemangleTest.cpp54
1 files changed, 54 insertions, 0 deletions
diff --git a/llvm/unittests/Demangle/ItaniumDemangleTest.cpp b/llvm/unittests/Demangle/ItaniumDemangleTest.cpp
new file mode 100644
index 00000000000..abb690c626a
--- /dev/null
+++ b/llvm/unittests/Demangle/ItaniumDemangleTest.cpp
@@ -0,0 +1,54 @@
+//===------------------ ItaniumDemangleTest.cpp ---------------------------===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois Open
+// Source Licenses. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+#include "llvm/Demangle/ItaniumDemangle.h"
+#include "llvm/Support/Allocator.h"
+#include "gmock/gmock.h"
+#include "gtest/gtest.h"
+#include <cstdlib>
+#include <vector>
+
+using namespace llvm;
+using namespace llvm::itanium_demangle;
+
+namespace {
+class TestAllocator {
+ BumpPtrAllocator Alloc;
+
+public:
+ void reset() { Alloc.Reset(); }
+
+ template <typename T, typename... Args> T *makeNode(Args &&... args) {
+ return new (Alloc.Allocate(sizeof(T), alignof(T)))
+ T(std::forward<Args>(args)...);
+ }
+
+ void *allocateNodeArray(size_t sz) {
+ return Alloc.Allocate(sizeof(Node *) * sz, alignof(Node *));
+ }
+};
+} // namespace
+
+TEST(ItaniumDemangle, MethodOverride) {
+ struct TestParser : AbstractManglingParser<TestParser, TestAllocator> {
+ std::vector<char> Types;
+
+ TestParser(const char *Str)
+ : AbstractManglingParser(Str, Str + strlen(Str)) {}
+
+ Node *parseType() {
+ Types.push_back(*First);
+ return AbstractManglingParser<TestParser, TestAllocator>::parseType();
+ }
+ };
+
+ TestParser Parser("_Z1fIiEjl");
+ ASSERT_NE(nullptr, Parser.parse());
+ EXPECT_THAT(Parser.Types, testing::ElementsAre('i', 'j', 'l'));
+}
OpenPOWER on IntegriCloud