Mercurial > hg > CbC > CbC_llvm
view lldb/unittests/Symbol/MangledTest.cpp @ 259:011663b4a808
remove duplicate setjmp in return continuation
author | Shinji KONO <kono@ie.u-ryukyu.ac.jp> |
---|---|
date | Thu, 12 Oct 2023 15:52:37 +0900 |
parents | c4bab56944e8 |
children |
line wrap: on
line source
//===-- SymbolTest.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 "lldb/Core/Mangled.h" #include "lldb/Core/DataFileCache.h" #include "lldb/Utility/DataEncoder.h" #include "lldb/Utility/DataExtractor.h" #include "gtest/gtest.h" using namespace lldb; using namespace lldb_private; static void EncodeDecode(const Mangled &object, ByteOrder byte_order) { const uint8_t addr_size = 8; DataEncoder file(byte_order, addr_size); DataEncoder strtab_encoder(byte_order, addr_size); ConstStringTable const_strtab; object.Encode(file, const_strtab); llvm::ArrayRef<uint8_t> bytes = file.GetData(); DataExtractor data(bytes.data(), bytes.size(), byte_order, addr_size); const_strtab.Encode(strtab_encoder); llvm::ArrayRef<uint8_t> strtab_bytes = strtab_encoder.GetData(); DataExtractor strtab_data(strtab_bytes.data(), strtab_bytes.size(), byte_order, addr_size); StringTableReader strtab_reader; offset_t strtab_data_offset = 0; ASSERT_EQ(strtab_reader.Decode(strtab_data, &strtab_data_offset), true); Mangled decoded_object; offset_t data_offset = 0; decoded_object.Decode(data, &data_offset, strtab_reader); EXPECT_EQ(object, decoded_object); } static void EncodeDecode(const Mangled &object) { EncodeDecode(object, eByteOrderLittle); EncodeDecode(object, eByteOrderBig); } TEST(MangledTest, EncodeDecodeMangled) { Mangled mangled; // Test encoding and decoding an empty mangled object. EncodeDecode(mangled); // Test encoding a mangled object that hasn't demangled its name yet. mangled.SetMangledName(ConstString("_Z3fooi")); EncodeDecode(mangled); // Test encoding a mangled object that has demangled its name by computing it. mangled.GetDemangledName(); // EncodeDecode(mangled); // Test encoding a mangled object that has just a demangled name mangled.SetMangledName(ConstString()); mangled.SetDemangledName(ConstString("hello")); EncodeDecode(mangled); // Test encoding a mangled name that has both a mangled and demangled name // that are not mangled/demangled counterparts of each other. mangled.SetMangledName(ConstString("world")); EncodeDecode(mangled); }