1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495 |
- //===- 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"));
- }
|