Mercurial > hg > CbC > CbC_llvm
view llvm/unittests/Demangle/ItaniumDemangleTest.cpp @ 230:9e61cd3a874d
MCDPP worked
author | Shinji KONO <kono@ie.u-ryukyu.ac.jp> |
---|---|
date | Mon, 19 Jul 2021 19:48:01 +0900 |
parents | 1d019706d866 |
children | c4bab56944e8 |
line wrap: on
line source
//===------------------ ItaniumDemangleTest.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/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')); }