Mercurial > hg > CbC > CbC_llvm
view unittests/Support/SymbolRemappingReaderTest.cpp @ 148:63bd29f05246
merged
author | Shinji KONO <kono@ie.u-ryukyu.ac.jp> |
---|---|
date | Wed, 14 Aug 2019 19:46:37 +0900 |
parents | c2174574ed3a |
children |
line wrap: on
line source
//===- unittests/Support/SymbolRemappingReaderTest.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/Support/SymbolRemappingReader.h" #include "llvm/Support/MemoryBuffer.h" #include "gtest/gtest.h" using namespace llvm; namespace { class SymbolRemappingReaderTest : public testing::Test { public: std::unique_ptr<MemoryBuffer> Buffer; SymbolRemappingReader Reader; std::string readWithErrors(StringRef Text, StringRef BufferName) { Buffer = MemoryBuffer::getMemBuffer(Text, BufferName); Error E = Reader.read(*Buffer); EXPECT_TRUE((bool)E); return toString(std::move(E)); } void read(StringRef Text, StringRef BufferName) { Buffer = MemoryBuffer::getMemBuffer(Text, BufferName); Error E = Reader.read(*Buffer); EXPECT_FALSE((bool)E); } }; } // unnamed namespace TEST_F(SymbolRemappingReaderTest, ParseErrors) { EXPECT_EQ(readWithErrors("error", "foo.map"), "foo.map:1: Expected 'kind mangled_name mangled_name', " "found 'error'"); EXPECT_EQ(readWithErrors("error m1 m2", "foo.map"), "foo.map:1: Invalid kind, expected 'name', 'type', or 'encoding', " "found 'error'"); } TEST_F(SymbolRemappingReaderTest, DemanglingErrors) { EXPECT_EQ(readWithErrors("type i banana", "foo.map"), "foo.map:1: Could not demangle 'banana' as a <type>; " "invalid mangling?"); EXPECT_EQ(readWithErrors("name i 1X", "foo.map"), "foo.map:1: Could not demangle 'i' as a <name>; " "invalid mangling?"); EXPECT_EQ(readWithErrors("name 1X 1fv", "foo.map"), "foo.map:1: Could not demangle '1fv' as a <name>; " "invalid mangling?"); EXPECT_EQ(readWithErrors("encoding 1fv 1f1gE", "foo.map"), "foo.map:1: Could not demangle '1f1gE' as a <encoding>; " "invalid mangling?"); } TEST_F(SymbolRemappingReaderTest, BadMappingOrder) { StringRef Map = R"( # N::foo == M::bar name N1N3fooE N1M3barE # N:: == M:: name 1N 1M )"; EXPECT_EQ(readWithErrors(Map, "foo.map"), "foo.map:6: Manglings '1N' and '1M' have both been used in prior " "remappings. Move this remapping earlier in the file."); } TEST_F(SymbolRemappingReaderTest, RemappingsAdded) { StringRef Map = R"( # A::foo == B::bar name N1A3fooE N1B3barE # int == long type i l # void f<int>() = void g<int>() encoding 1fIiEvv 1gIiEvv )"; read(Map, "foo.map"); auto Key = Reader.insert("_ZN1B3bar3bazIiEEvv"); EXPECT_NE(Key, SymbolRemappingReader::Key()); EXPECT_EQ(Key, Reader.lookup("_ZN1A3foo3bazIlEEvv")); EXPECT_NE(Key, Reader.lookup("_ZN1C3foo3bazIlEEvv")); Key = Reader.insert("_Z1fIiEvv"); EXPECT_NE(Key, SymbolRemappingReader::Key()); EXPECT_EQ(Key, Reader.lookup("_Z1gIlEvv")); }