Mercurial > hg > CbC > CbC_llvm
diff unittests/CodeGen/DIEHashTest.cpp @ 95:afa8332a0e37 LLVM3.8
LLVM 3.8
author | Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp> |
---|---|
date | Tue, 13 Oct 2015 17:48:58 +0900 |
parents | 60c9769439b8 |
children | 1172e4bd9c6f |
line wrap: on
line diff
--- a/unittests/CodeGen/DIEHashTest.cpp Wed Feb 18 14:56:07 2015 +0900 +++ b/unittests/CodeGen/DIEHashTest.cpp Tue Oct 13 17:48:58 2015 +0900 @@ -10,6 +10,7 @@ #include "llvm/CodeGen/DIE.h" #include "../lib/CodeGen/AsmPrinter/DIEHash.h" #include "llvm/ADT/STLExtras.h" +#include "llvm/CodeGen/DwarfStringPoolEntry.h" #include "llvm/Support/Debug.h" #include "llvm/Support/Dwarf.h" #include "llvm/Support/Format.h" @@ -18,24 +19,41 @@ using namespace llvm; namespace { -TEST(DIEHashTest, Data1) { + +// Test fixture +class DIEHashTest : public testing::Test { +public: + BumpPtrAllocator Alloc; + +private: + StringMap<DwarfStringPoolEntry> Pool; + +public: + DIEString getString(StringRef S) { + DwarfStringPoolEntry Entry = {nullptr, 1, 1}; + return DIEString( + DwarfStringPoolEntryRef(*Pool.insert(std::make_pair(S, Entry)).first)); + } +}; + +TEST_F(DIEHashTest, Data1) { DIEHash Hash; - DIE Die(dwarf::DW_TAG_base_type); + DIE &Die = *DIE::get(Alloc, dwarf::DW_TAG_base_type); DIEInteger Size(4); - Die.addValue(dwarf::DW_AT_byte_size, dwarf::DW_FORM_data1, &Size); + Die.addValue(Alloc, dwarf::DW_AT_byte_size, dwarf::DW_FORM_data1, Size); uint64_t MD5Res = Hash.computeTypeSignature(Die); ASSERT_EQ(0x1AFE116E83701108ULL, MD5Res); } // struct {}; -TEST(DIEHashTest, TrivialType) { - DIE Unnamed(dwarf::DW_TAG_structure_type); +TEST_F(DIEHashTest, TrivialType) { + DIE &Unnamed = *DIE::get(Alloc, dwarf::DW_TAG_structure_type); DIEInteger One(1); - Unnamed.addValue(dwarf::DW_AT_byte_size, dwarf::DW_FORM_data1, &One); + Unnamed.addValue(Alloc, dwarf::DW_AT_byte_size, dwarf::DW_FORM_data1, One); // Line and file number are ignored. - Unnamed.addValue(dwarf::DW_AT_decl_file, dwarf::DW_FORM_data1, &One); - Unnamed.addValue(dwarf::DW_AT_decl_line, dwarf::DW_FORM_data1, &One); + Unnamed.addValue(Alloc, dwarf::DW_AT_decl_file, dwarf::DW_FORM_data1, One); + Unnamed.addValue(Alloc, dwarf::DW_AT_decl_line, dwarf::DW_FORM_data1, One); uint64_t MD5Res = DIEHash().computeTypeSignature(Unnamed); // The exact same hash GCC produces for this DIE. @@ -43,12 +61,12 @@ } // struct foo { }; -TEST(DIEHashTest, NamedType) { - DIE Foo(dwarf::DW_TAG_structure_type); +TEST_F(DIEHashTest, NamedType) { + DIE &Foo = *DIE::get(Alloc, dwarf::DW_TAG_structure_type); DIEInteger One(1); - DIEString FooStr(&One, "foo"); - Foo.addValue(dwarf::DW_AT_name, dwarf::DW_FORM_strp, &FooStr); - Foo.addValue(dwarf::DW_AT_byte_size, dwarf::DW_FORM_data1, &One); + DIEString FooStr = getString("foo"); + Foo.addValue(Alloc, dwarf::DW_AT_name, dwarf::DW_FORM_strp, FooStr); + Foo.addValue(Alloc, dwarf::DW_AT_byte_size, dwarf::DW_FORM_data1, One); uint64_t MD5Res = DIEHash().computeTypeSignature(Foo); @@ -57,21 +75,22 @@ } // namespace space { struct foo { }; } -TEST(DIEHashTest, NamespacedType) { - DIE CU(dwarf::DW_TAG_compile_unit); +TEST_F(DIEHashTest, NamespacedType) { + DIE &CU = *DIE::get(Alloc, dwarf::DW_TAG_compile_unit); - auto Space = make_unique<DIE>(dwarf::DW_TAG_namespace); + auto Space = DIE::get(Alloc, dwarf::DW_TAG_namespace); DIEInteger One(1); - DIEString SpaceStr(&One, "space"); - Space->addValue(dwarf::DW_AT_name, dwarf::DW_FORM_strp, &SpaceStr); + DIEString SpaceStr = getString("space"); + Space->addValue(Alloc, dwarf::DW_AT_name, dwarf::DW_FORM_strp, SpaceStr); // DW_AT_declaration is ignored. - Space->addValue(dwarf::DW_AT_declaration, dwarf::DW_FORM_flag_present, &One); + Space->addValue(Alloc, dwarf::DW_AT_declaration, dwarf::DW_FORM_flag_present, + One); // sibling? - auto Foo = make_unique<DIE>(dwarf::DW_TAG_structure_type); - DIEString FooStr(&One, "foo"); - Foo->addValue(dwarf::DW_AT_name, dwarf::DW_FORM_strp, &FooStr); - Foo->addValue(dwarf::DW_AT_byte_size, dwarf::DW_FORM_data1, &One); + auto Foo = DIE::get(Alloc, dwarf::DW_TAG_structure_type); + DIEString FooStr = getString("foo"); + Foo->addValue(Alloc, dwarf::DW_AT_name, dwarf::DW_FORM_strp, FooStr); + Foo->addValue(Alloc, dwarf::DW_AT_byte_size, dwarf::DW_FORM_data1, One); DIE &N = *Foo; Space->addChild(std::move(Foo)); @@ -84,27 +103,27 @@ } // struct { int member; }; -TEST(DIEHashTest, TypeWithMember) { - DIE Unnamed(dwarf::DW_TAG_structure_type); +TEST_F(DIEHashTest, TypeWithMember) { + DIE &Unnamed = *DIE::get(Alloc, dwarf::DW_TAG_structure_type); DIEInteger Four(4); - Unnamed.addValue(dwarf::DW_AT_byte_size, dwarf::DW_FORM_data1, &Four); + Unnamed.addValue(Alloc, dwarf::DW_AT_byte_size, dwarf::DW_FORM_data1, Four); - DIE Int(dwarf::DW_TAG_base_type); - DIEString IntStr(&Four, "int"); - Int.addValue(dwarf::DW_AT_name, dwarf::DW_FORM_strp, &IntStr); - Int.addValue(dwarf::DW_AT_byte_size, dwarf::DW_FORM_data1, &Four); + DIE &Int = *DIE::get(Alloc, dwarf::DW_TAG_base_type); + DIEString IntStr = getString("int"); + Int.addValue(Alloc, dwarf::DW_AT_name, dwarf::DW_FORM_strp, IntStr); + Int.addValue(Alloc, dwarf::DW_AT_byte_size, dwarf::DW_FORM_data1, Four); DIEInteger Five(5); - Int.addValue(dwarf::DW_AT_encoding, dwarf::DW_FORM_data1, &Five); + Int.addValue(Alloc, dwarf::DW_AT_encoding, dwarf::DW_FORM_data1, Five); DIEEntry IntRef(Int); - auto Member = make_unique<DIE>(dwarf::DW_TAG_member); - DIEString MemberStr(&Four, "member"); - Member->addValue(dwarf::DW_AT_name, dwarf::DW_FORM_strp, &MemberStr); + auto Member = DIE::get(Alloc, dwarf::DW_TAG_member); + DIEString MemberStr = getString("member"); + Member->addValue(Alloc, dwarf::DW_AT_name, dwarf::DW_FORM_strp, MemberStr); DIEInteger Zero(0); - Member->addValue(dwarf::DW_AT_data_member_location, dwarf::DW_FORM_data1, - &Zero); - Member->addValue(dwarf::DW_AT_type, dwarf::DW_FORM_ref4, &IntRef); + Member->addValue(Alloc, dwarf::DW_AT_data_member_location, + dwarf::DW_FORM_data1, Zero); + Member->addValue(Alloc, dwarf::DW_AT_type, dwarf::DW_FORM_ref4, IntRef); Unnamed.addChild(std::move(Member)); @@ -114,37 +133,37 @@ } // struct foo { int mem1, mem2; }; -TEST(DIEHashTest, ReusedType) { - DIE Unnamed(dwarf::DW_TAG_structure_type); +TEST_F(DIEHashTest, ReusedType) { + DIE &Unnamed = *DIE::get(Alloc, dwarf::DW_TAG_structure_type); DIEInteger Eight(8); - Unnamed.addValue(dwarf::DW_AT_byte_size, dwarf::DW_FORM_data1, &Eight); + Unnamed.addValue(Alloc, dwarf::DW_AT_byte_size, dwarf::DW_FORM_data1, Eight); DIEInteger Four(4); - DIE Int(dwarf::DW_TAG_base_type); - DIEString IntStr(&Four, "int"); - Int.addValue(dwarf::DW_AT_name, dwarf::DW_FORM_strp, &IntStr); - Int.addValue(dwarf::DW_AT_byte_size, dwarf::DW_FORM_data1, &Four); + DIE &Int = *DIE::get(Alloc, dwarf::DW_TAG_base_type); + DIEString IntStr = getString("int"); + Int.addValue(Alloc, dwarf::DW_AT_name, dwarf::DW_FORM_strp, IntStr); + Int.addValue(Alloc, dwarf::DW_AT_byte_size, dwarf::DW_FORM_data1, Four); DIEInteger Five(5); - Int.addValue(dwarf::DW_AT_encoding, dwarf::DW_FORM_data1, &Five); + Int.addValue(Alloc, dwarf::DW_AT_encoding, dwarf::DW_FORM_data1, Five); DIEEntry IntRef(Int); - auto Mem1 = make_unique<DIE>(dwarf::DW_TAG_member); - DIEString Mem1Str(&Four, "mem1"); - Mem1->addValue(dwarf::DW_AT_name, dwarf::DW_FORM_strp, &Mem1Str); + auto Mem1 = DIE::get(Alloc, dwarf::DW_TAG_member); + DIEString Mem1Str = getString("mem1"); + Mem1->addValue(Alloc, dwarf::DW_AT_name, dwarf::DW_FORM_strp, Mem1Str); DIEInteger Zero(0); - Mem1->addValue(dwarf::DW_AT_data_member_location, dwarf::DW_FORM_data1, - &Zero); - Mem1->addValue(dwarf::DW_AT_type, dwarf::DW_FORM_ref4, &IntRef); + Mem1->addValue(Alloc, dwarf::DW_AT_data_member_location, dwarf::DW_FORM_data1, + Zero); + Mem1->addValue(Alloc, dwarf::DW_AT_type, dwarf::DW_FORM_ref4, IntRef); Unnamed.addChild(std::move(Mem1)); - auto Mem2 = make_unique<DIE>(dwarf::DW_TAG_member); - DIEString Mem2Str(&Four, "mem2"); - Mem2->addValue(dwarf::DW_AT_name, dwarf::DW_FORM_strp, &Mem2Str); - Mem2->addValue(dwarf::DW_AT_data_member_location, dwarf::DW_FORM_data1, - &Four); - Mem2->addValue(dwarf::DW_AT_type, dwarf::DW_FORM_ref4, &IntRef); + auto Mem2 = DIE::get(Alloc, dwarf::DW_TAG_member); + DIEString Mem2Str = getString("mem2"); + Mem2->addValue(Alloc, dwarf::DW_AT_name, dwarf::DW_FORM_strp, Mem2Str); + Mem2->addValue(Alloc, dwarf::DW_AT_data_member_location, dwarf::DW_FORM_data1, + Four); + Mem2->addValue(Alloc, dwarf::DW_AT_type, dwarf::DW_FORM_ref4, IntRef); Unnamed.addChild(std::move(Mem2)); @@ -154,18 +173,18 @@ } // struct foo { static foo f; }; -TEST(DIEHashTest, RecursiveType) { - DIE Foo(dwarf::DW_TAG_structure_type); +TEST_F(DIEHashTest, RecursiveType) { + DIE &Foo = *DIE::get(Alloc, dwarf::DW_TAG_structure_type); DIEInteger One(1); - Foo.addValue(dwarf::DW_AT_byte_size, dwarf::DW_FORM_data1, &One); - DIEString FooStr(&One, "foo"); - Foo.addValue(dwarf::DW_AT_name, dwarf::DW_FORM_strp, &FooStr); + Foo.addValue(Alloc, dwarf::DW_AT_byte_size, dwarf::DW_FORM_data1, One); + DIEString FooStr = getString("foo"); + Foo.addValue(Alloc, dwarf::DW_AT_name, dwarf::DW_FORM_strp, FooStr); - auto Mem = make_unique<DIE>(dwarf::DW_TAG_member); - DIEString MemStr(&One, "mem"); - Mem->addValue(dwarf::DW_AT_name, dwarf::DW_FORM_strp, &MemStr); + auto Mem = DIE::get(Alloc, dwarf::DW_TAG_member); + DIEString MemStr = getString("mem"); + Mem->addValue(Alloc, dwarf::DW_AT_name, dwarf::DW_FORM_strp, MemStr); DIEEntry FooRef(Foo); - Mem->addValue(dwarf::DW_AT_type, dwarf::DW_FORM_ref4, &FooRef); + Mem->addValue(Alloc, dwarf::DW_AT_type, dwarf::DW_FORM_ref4, FooRef); // DW_AT_external and DW_AT_declaration are ignored anyway, so skip them. Foo.addChild(std::move(Mem)); @@ -176,26 +195,27 @@ } // struct foo { foo *mem; }; -TEST(DIEHashTest, Pointer) { - DIE Foo(dwarf::DW_TAG_structure_type); +TEST_F(DIEHashTest, Pointer) { + DIE &Foo = *DIE::get(Alloc, dwarf::DW_TAG_structure_type); DIEInteger Eight(8); - Foo.addValue(dwarf::DW_AT_byte_size, dwarf::DW_FORM_data1, &Eight); - DIEString FooStr(&Eight, "foo"); - Foo.addValue(dwarf::DW_AT_name, dwarf::DW_FORM_strp, &FooStr); + Foo.addValue(Alloc, dwarf::DW_AT_byte_size, dwarf::DW_FORM_data1, Eight); + DIEString FooStr = getString("foo"); + Foo.addValue(Alloc, dwarf::DW_AT_name, dwarf::DW_FORM_strp, FooStr); - auto Mem = make_unique<DIE>(dwarf::DW_TAG_member); - DIEString MemStr(&Eight, "mem"); - Mem->addValue(dwarf::DW_AT_name, dwarf::DW_FORM_strp, &MemStr); + auto Mem = DIE::get(Alloc, dwarf::DW_TAG_member); + DIEString MemStr = getString("mem"); + Mem->addValue(Alloc, dwarf::DW_AT_name, dwarf::DW_FORM_strp, MemStr); DIEInteger Zero(0); - Mem->addValue(dwarf::DW_AT_data_member_location, dwarf::DW_FORM_data1, &Zero); + Mem->addValue(Alloc, dwarf::DW_AT_data_member_location, dwarf::DW_FORM_data1, + Zero); - DIE FooPtr(dwarf::DW_TAG_pointer_type); - FooPtr.addValue(dwarf::DW_AT_byte_size, dwarf::DW_FORM_data1, &Eight); + DIE &FooPtr = *DIE::get(Alloc, dwarf::DW_TAG_pointer_type); + FooPtr.addValue(Alloc, dwarf::DW_AT_byte_size, dwarf::DW_FORM_data1, Eight); DIEEntry FooRef(Foo); - FooPtr.addValue(dwarf::DW_AT_type, dwarf::DW_FORM_ref4, &FooRef); + FooPtr.addValue(Alloc, dwarf::DW_AT_type, dwarf::DW_FORM_ref4, FooRef); DIEEntry FooPtrRef(FooPtr); - Mem->addValue(dwarf::DW_AT_type, dwarf::DW_FORM_ref4, &FooPtrRef); + Mem->addValue(Alloc, dwarf::DW_AT_type, dwarf::DW_FORM_ref4, FooPtrRef); Foo.addChild(std::move(Mem)); @@ -205,30 +225,32 @@ } // struct foo { foo &mem; }; -TEST(DIEHashTest, Reference) { - DIE Foo(dwarf::DW_TAG_structure_type); +TEST_F(DIEHashTest, Reference) { + DIE &Foo = *DIE::get(Alloc, dwarf::DW_TAG_structure_type); DIEInteger Eight(8); - Foo.addValue(dwarf::DW_AT_byte_size, dwarf::DW_FORM_data1, &Eight); - DIEString FooStr(&Eight, "foo"); - Foo.addValue(dwarf::DW_AT_name, dwarf::DW_FORM_strp, &FooStr); + Foo.addValue(Alloc, dwarf::DW_AT_byte_size, dwarf::DW_FORM_data1, Eight); + DIEString FooStr = getString("foo"); + Foo.addValue(Alloc, dwarf::DW_AT_name, dwarf::DW_FORM_strp, FooStr); - auto Mem = make_unique<DIE>(dwarf::DW_TAG_member); - DIEString MemStr(&Eight, "mem"); - Mem->addValue(dwarf::DW_AT_name, dwarf::DW_FORM_strp, &MemStr); + auto Mem = DIE::get(Alloc, dwarf::DW_TAG_member); + DIEString MemStr = getString("mem"); + Mem->addValue(Alloc, dwarf::DW_AT_name, dwarf::DW_FORM_strp, MemStr); DIEInteger Zero(0); - Mem->addValue(dwarf::DW_AT_data_member_location, dwarf::DW_FORM_data1, &Zero); + Mem->addValue(Alloc, dwarf::DW_AT_data_member_location, dwarf::DW_FORM_data1, + Zero); - DIE FooRef(dwarf::DW_TAG_reference_type); - FooRef.addValue(dwarf::DW_AT_byte_size, dwarf::DW_FORM_data1, &Eight); + DIE &FooRef = *DIE::get(Alloc, dwarf::DW_TAG_reference_type); + FooRef.addValue(Alloc, dwarf::DW_AT_byte_size, dwarf::DW_FORM_data1, Eight); DIEEntry FooEntry(Foo); - FooRef.addValue(dwarf::DW_AT_type, dwarf::DW_FORM_ref4, &FooEntry); + FooRef.addValue(Alloc, dwarf::DW_AT_type, dwarf::DW_FORM_ref4, FooEntry); - DIE FooRefConst(dwarf::DW_TAG_const_type); + DIE &FooRefConst = *DIE::get(Alloc, dwarf::DW_TAG_const_type); DIEEntry FooRefRef(FooRef); - FooRefConst.addValue(dwarf::DW_AT_type, dwarf::DW_FORM_ref4, &FooRefRef); + FooRefConst.addValue(Alloc, dwarf::DW_AT_type, dwarf::DW_FORM_ref4, + FooRefRef); DIEEntry FooRefConstRef(FooRefConst); - Mem->addValue(dwarf::DW_AT_type, dwarf::DW_FORM_ref4, &FooRefConstRef); + Mem->addValue(Alloc, dwarf::DW_AT_type, dwarf::DW_FORM_ref4, FooRefConstRef); Foo.addChild(std::move(Mem)); @@ -238,30 +260,32 @@ } // struct foo { foo &&mem; }; -TEST(DIEHashTest, RValueReference) { - DIE Foo(dwarf::DW_TAG_structure_type); +TEST_F(DIEHashTest, RValueReference) { + DIE &Foo = *DIE::get(Alloc, dwarf::DW_TAG_structure_type); DIEInteger Eight(8); - Foo.addValue(dwarf::DW_AT_byte_size, dwarf::DW_FORM_data1, &Eight); - DIEString FooStr(&Eight, "foo"); - Foo.addValue(dwarf::DW_AT_name, dwarf::DW_FORM_strp, &FooStr); + Foo.addValue(Alloc, dwarf::DW_AT_byte_size, dwarf::DW_FORM_data1, Eight); + DIEString FooStr = getString("foo"); + Foo.addValue(Alloc, dwarf::DW_AT_name, dwarf::DW_FORM_strp, FooStr); - auto Mem = make_unique<DIE>(dwarf::DW_TAG_member); - DIEString MemStr(&Eight, "mem"); - Mem->addValue(dwarf::DW_AT_name, dwarf::DW_FORM_strp, &MemStr); + auto Mem = DIE::get(Alloc, dwarf::DW_TAG_member); + DIEString MemStr = getString("mem"); + Mem->addValue(Alloc, dwarf::DW_AT_name, dwarf::DW_FORM_strp, MemStr); DIEInteger Zero(0); - Mem->addValue(dwarf::DW_AT_data_member_location, dwarf::DW_FORM_data1, &Zero); + Mem->addValue(Alloc, dwarf::DW_AT_data_member_location, dwarf::DW_FORM_data1, + Zero); - DIE FooRef(dwarf::DW_TAG_rvalue_reference_type); - FooRef.addValue(dwarf::DW_AT_byte_size, dwarf::DW_FORM_data1, &Eight); + DIE &FooRef = *DIE::get(Alloc, dwarf::DW_TAG_rvalue_reference_type); + FooRef.addValue(Alloc, dwarf::DW_AT_byte_size, dwarf::DW_FORM_data1, Eight); DIEEntry FooEntry(Foo); - FooRef.addValue(dwarf::DW_AT_type, dwarf::DW_FORM_ref4, &FooEntry); + FooRef.addValue(Alloc, dwarf::DW_AT_type, dwarf::DW_FORM_ref4, FooEntry); - DIE FooRefConst(dwarf::DW_TAG_const_type); + DIE &FooRefConst = *DIE::get(Alloc, dwarf::DW_TAG_const_type); DIEEntry FooRefRef(FooRef); - FooRefConst.addValue(dwarf::DW_AT_type, dwarf::DW_FORM_ref4, &FooRefRef); + FooRefConst.addValue(Alloc, dwarf::DW_AT_type, dwarf::DW_FORM_ref4, + FooRefRef); DIEEntry FooRefConstRef(FooRefConst); - Mem->addValue(dwarf::DW_AT_type, dwarf::DW_FORM_ref4, &FooRefConstRef); + Mem->addValue(Alloc, dwarf::DW_AT_type, dwarf::DW_FORM_ref4, FooRefConstRef); Foo.addChild(std::move(Mem)); @@ -271,27 +295,28 @@ } // struct foo { foo foo::*mem; }; -TEST(DIEHashTest, PtrToMember) { - DIE Foo(dwarf::DW_TAG_structure_type); +TEST_F(DIEHashTest, PtrToMember) { + DIE &Foo = *DIE::get(Alloc, dwarf::DW_TAG_structure_type); DIEInteger Eight(8); - Foo.addValue(dwarf::DW_AT_byte_size, dwarf::DW_FORM_data1, &Eight); - DIEString FooStr(&Eight, "foo"); - Foo.addValue(dwarf::DW_AT_name, dwarf::DW_FORM_strp, &FooStr); + Foo.addValue(Alloc, dwarf::DW_AT_byte_size, dwarf::DW_FORM_data1, Eight); + DIEString FooStr = getString("foo"); + Foo.addValue(Alloc, dwarf::DW_AT_name, dwarf::DW_FORM_strp, FooStr); - auto Mem = make_unique<DIE>(dwarf::DW_TAG_member); - DIEString MemStr(&Eight, "mem"); - Mem->addValue(dwarf::DW_AT_name, dwarf::DW_FORM_strp, &MemStr); + auto Mem = DIE::get(Alloc, dwarf::DW_TAG_member); + DIEString MemStr = getString("mem"); + Mem->addValue(Alloc, dwarf::DW_AT_name, dwarf::DW_FORM_strp, MemStr); DIEInteger Zero(0); - Mem->addValue(dwarf::DW_AT_data_member_location, dwarf::DW_FORM_data1, &Zero); + Mem->addValue(Alloc, dwarf::DW_AT_data_member_location, dwarf::DW_FORM_data1, + Zero); - DIE PtrToFooMem(dwarf::DW_TAG_ptr_to_member_type); + DIE &PtrToFooMem = *DIE::get(Alloc, dwarf::DW_TAG_ptr_to_member_type); DIEEntry FooEntry(Foo); - PtrToFooMem.addValue(dwarf::DW_AT_type, dwarf::DW_FORM_ref4, &FooEntry); - PtrToFooMem.addValue(dwarf::DW_AT_containing_type, dwarf::DW_FORM_ref4, - &FooEntry); + PtrToFooMem.addValue(Alloc, dwarf::DW_AT_type, dwarf::DW_FORM_ref4, FooEntry); + PtrToFooMem.addValue(Alloc, dwarf::DW_AT_containing_type, dwarf::DW_FORM_ref4, + FooEntry); DIEEntry PtrToFooMemRef(PtrToFooMem); - Mem->addValue(dwarf::DW_AT_type, dwarf::DW_FORM_ref4, &PtrToFooMemRef); + Mem->addValue(Alloc, dwarf::DW_AT_type, dwarf::DW_FORM_ref4, PtrToFooMemRef); Foo.addChild(std::move(Mem)); @@ -305,37 +330,40 @@ // // struct bar; // { }; // struct foo { bar foo::*mem; }; -TEST(DIEHashTest, PtrToMemberDeclDefMatch) { +TEST_F(DIEHashTest, PtrToMemberDeclDefMatch) { DIEInteger Zero(0); DIEInteger One(1); DIEInteger Eight(8); - DIEString FooStr(&Eight, "foo"); - DIEString BarStr(&Eight, "bar"); - DIEString MemStr(&Eight, "mem"); + DIEString FooStr = getString("foo"); + DIEString BarStr = getString("bar"); + DIEString MemStr = getString("mem"); uint64_t MD5ResDecl; { - DIE Bar(dwarf::DW_TAG_structure_type); - Bar.addValue(dwarf::DW_AT_name, dwarf::DW_FORM_strp, &BarStr); - Bar.addValue(dwarf::DW_AT_declaration, dwarf::DW_FORM_flag_present, &One); + DIE &Bar = *DIE::get(Alloc, dwarf::DW_TAG_structure_type); + Bar.addValue(Alloc, dwarf::DW_AT_name, dwarf::DW_FORM_strp, BarStr); + Bar.addValue(Alloc, dwarf::DW_AT_declaration, dwarf::DW_FORM_flag_present, + One); - DIE Foo(dwarf::DW_TAG_structure_type); - Foo.addValue(dwarf::DW_AT_byte_size, dwarf::DW_FORM_data1, &Eight); - Foo.addValue(dwarf::DW_AT_name, dwarf::DW_FORM_strp, &FooStr); + DIE &Foo = *DIE::get(Alloc, dwarf::DW_TAG_structure_type); + Foo.addValue(Alloc, dwarf::DW_AT_byte_size, dwarf::DW_FORM_data1, Eight); + Foo.addValue(Alloc, dwarf::DW_AT_name, dwarf::DW_FORM_strp, FooStr); - auto Mem = make_unique<DIE>(dwarf::DW_TAG_member); - Mem->addValue(dwarf::DW_AT_name, dwarf::DW_FORM_strp, &MemStr); - Mem->addValue(dwarf::DW_AT_data_member_location, dwarf::DW_FORM_data1, - &Zero); + auto Mem = DIE::get(Alloc, dwarf::DW_TAG_member); + Mem->addValue(Alloc, dwarf::DW_AT_name, dwarf::DW_FORM_strp, MemStr); + Mem->addValue(Alloc, dwarf::DW_AT_data_member_location, + dwarf::DW_FORM_data1, Zero); - DIE PtrToFooMem(dwarf::DW_TAG_ptr_to_member_type); + DIE &PtrToFooMem = *DIE::get(Alloc, dwarf::DW_TAG_ptr_to_member_type); DIEEntry BarEntry(Bar); - PtrToFooMem.addValue(dwarf::DW_AT_type, dwarf::DW_FORM_ref4, &BarEntry); + PtrToFooMem.addValue(Alloc, dwarf::DW_AT_type, dwarf::DW_FORM_ref4, + BarEntry); DIEEntry FooEntry(Foo); - PtrToFooMem.addValue(dwarf::DW_AT_containing_type, dwarf::DW_FORM_ref4, - &FooEntry); + PtrToFooMem.addValue(Alloc, dwarf::DW_AT_containing_type, + dwarf::DW_FORM_ref4, FooEntry); DIEEntry PtrToFooMemRef(PtrToFooMem); - Mem->addValue(dwarf::DW_AT_type, dwarf::DW_FORM_ref4, &PtrToFooMemRef); + Mem->addValue(Alloc, dwarf::DW_AT_type, dwarf::DW_FORM_ref4, + PtrToFooMemRef); Foo.addChild(std::move(Mem)); @@ -343,28 +371,30 @@ } uint64_t MD5ResDef; { - DIE Bar(dwarf::DW_TAG_structure_type); - Bar.addValue(dwarf::DW_AT_name, dwarf::DW_FORM_strp, &BarStr); - Bar.addValue(dwarf::DW_AT_byte_size, dwarf::DW_FORM_data1, &One); + DIE &Bar = *DIE::get(Alloc, dwarf::DW_TAG_structure_type); + Bar.addValue(Alloc, dwarf::DW_AT_name, dwarf::DW_FORM_strp, BarStr); + Bar.addValue(Alloc, dwarf::DW_AT_byte_size, dwarf::DW_FORM_data1, One); - DIE Foo(dwarf::DW_TAG_structure_type); - Foo.addValue(dwarf::DW_AT_byte_size, dwarf::DW_FORM_data1, &Eight); - Foo.addValue(dwarf::DW_AT_name, dwarf::DW_FORM_strp, &FooStr); + DIE &Foo = *DIE::get(Alloc, dwarf::DW_TAG_structure_type); + Foo.addValue(Alloc, dwarf::DW_AT_byte_size, dwarf::DW_FORM_data1, Eight); + Foo.addValue(Alloc, dwarf::DW_AT_name, dwarf::DW_FORM_strp, FooStr); - auto Mem = make_unique<DIE>(dwarf::DW_TAG_member); - Mem->addValue(dwarf::DW_AT_name, dwarf::DW_FORM_strp, &MemStr); - Mem->addValue(dwarf::DW_AT_data_member_location, dwarf::DW_FORM_data1, - &Zero); + auto Mem = DIE::get(Alloc, dwarf::DW_TAG_member); + Mem->addValue(Alloc, dwarf::DW_AT_name, dwarf::DW_FORM_strp, MemStr); + Mem->addValue(Alloc, dwarf::DW_AT_data_member_location, + dwarf::DW_FORM_data1, Zero); - DIE PtrToFooMem(dwarf::DW_TAG_ptr_to_member_type); + DIE &PtrToFooMem = *DIE::get(Alloc, dwarf::DW_TAG_ptr_to_member_type); DIEEntry BarEntry(Bar); - PtrToFooMem.addValue(dwarf::DW_AT_type, dwarf::DW_FORM_ref4, &BarEntry); + PtrToFooMem.addValue(Alloc, dwarf::DW_AT_type, dwarf::DW_FORM_ref4, + BarEntry); DIEEntry FooEntry(Foo); - PtrToFooMem.addValue(dwarf::DW_AT_containing_type, dwarf::DW_FORM_ref4, - &FooEntry); + PtrToFooMem.addValue(Alloc, dwarf::DW_AT_containing_type, + dwarf::DW_FORM_ref4, FooEntry); DIEEntry PtrToFooMemRef(PtrToFooMem); - Mem->addValue(dwarf::DW_AT_type, dwarf::DW_FORM_ref4, &PtrToFooMemRef); + Mem->addValue(Alloc, dwarf::DW_AT_type, dwarf::DW_FORM_ref4, + PtrToFooMemRef); Foo.addChild(std::move(Mem)); @@ -378,36 +408,39 @@ // // struct bar; // { }; // struct foo { bar bar::*mem; }; -TEST(DIEHashTest, PtrToMemberDeclDefMisMatch) { +TEST_F(DIEHashTest, PtrToMemberDeclDefMisMatch) { DIEInteger Zero(0); DIEInteger One(1); DIEInteger Eight(8); - DIEString FooStr(&Eight, "foo"); - DIEString BarStr(&Eight, "bar"); - DIEString MemStr(&Eight, "mem"); + DIEString FooStr = getString("foo"); + DIEString BarStr = getString("bar"); + DIEString MemStr = getString("mem"); uint64_t MD5ResDecl; { - DIE Bar(dwarf::DW_TAG_structure_type); - Bar.addValue(dwarf::DW_AT_name, dwarf::DW_FORM_strp, &BarStr); - Bar.addValue(dwarf::DW_AT_declaration, dwarf::DW_FORM_flag_present, &One); + DIE &Bar = *DIE::get(Alloc, dwarf::DW_TAG_structure_type); + Bar.addValue(Alloc, dwarf::DW_AT_name, dwarf::DW_FORM_strp, BarStr); + Bar.addValue(Alloc, dwarf::DW_AT_declaration, dwarf::DW_FORM_flag_present, + One); - DIE Foo(dwarf::DW_TAG_structure_type); - Foo.addValue(dwarf::DW_AT_byte_size, dwarf::DW_FORM_data1, &Eight); - Foo.addValue(dwarf::DW_AT_name, dwarf::DW_FORM_strp, &FooStr); + DIE &Foo = *DIE::get(Alloc, dwarf::DW_TAG_structure_type); + Foo.addValue(Alloc, dwarf::DW_AT_byte_size, dwarf::DW_FORM_data1, Eight); + Foo.addValue(Alloc, dwarf::DW_AT_name, dwarf::DW_FORM_strp, FooStr); - auto Mem = make_unique<DIE>(dwarf::DW_TAG_member); - Mem->addValue(dwarf::DW_AT_name, dwarf::DW_FORM_strp, &MemStr); - Mem->addValue(dwarf::DW_AT_data_member_location, dwarf::DW_FORM_data1, - &Zero); + auto Mem = DIE::get(Alloc, dwarf::DW_TAG_member); + Mem->addValue(Alloc, dwarf::DW_AT_name, dwarf::DW_FORM_strp, MemStr); + Mem->addValue(Alloc, dwarf::DW_AT_data_member_location, + dwarf::DW_FORM_data1, Zero); - DIE PtrToFooMem(dwarf::DW_TAG_ptr_to_member_type); + DIE &PtrToFooMem = *DIE::get(Alloc, dwarf::DW_TAG_ptr_to_member_type); DIEEntry BarEntry(Bar); - PtrToFooMem.addValue(dwarf::DW_AT_type, dwarf::DW_FORM_ref4, &BarEntry); - PtrToFooMem.addValue(dwarf::DW_AT_containing_type, dwarf::DW_FORM_ref4, - &BarEntry); + PtrToFooMem.addValue(Alloc, dwarf::DW_AT_type, dwarf::DW_FORM_ref4, + BarEntry); + PtrToFooMem.addValue(Alloc, dwarf::DW_AT_containing_type, + dwarf::DW_FORM_ref4, BarEntry); DIEEntry PtrToFooMemRef(PtrToFooMem); - Mem->addValue(dwarf::DW_AT_type, dwarf::DW_FORM_ref4, &PtrToFooMemRef); + Mem->addValue(Alloc, dwarf::DW_AT_type, dwarf::DW_FORM_ref4, + PtrToFooMemRef); Foo.addChild(std::move(Mem)); @@ -415,27 +448,29 @@ } uint64_t MD5ResDef; { - DIE Bar(dwarf::DW_TAG_structure_type); - Bar.addValue(dwarf::DW_AT_name, dwarf::DW_FORM_strp, &BarStr); - Bar.addValue(dwarf::DW_AT_byte_size, dwarf::DW_FORM_data1, &One); + DIE &Bar = *DIE::get(Alloc, dwarf::DW_TAG_structure_type); + Bar.addValue(Alloc, dwarf::DW_AT_name, dwarf::DW_FORM_strp, BarStr); + Bar.addValue(Alloc, dwarf::DW_AT_byte_size, dwarf::DW_FORM_data1, One); - DIE Foo(dwarf::DW_TAG_structure_type); - Foo.addValue(dwarf::DW_AT_byte_size, dwarf::DW_FORM_data1, &Eight); - Foo.addValue(dwarf::DW_AT_name, dwarf::DW_FORM_strp, &FooStr); + DIE &Foo = *DIE::get(Alloc, dwarf::DW_TAG_structure_type); + Foo.addValue(Alloc, dwarf::DW_AT_byte_size, dwarf::DW_FORM_data1, Eight); + Foo.addValue(Alloc, dwarf::DW_AT_name, dwarf::DW_FORM_strp, FooStr); - auto Mem = make_unique<DIE>(dwarf::DW_TAG_member); - Mem->addValue(dwarf::DW_AT_name, dwarf::DW_FORM_strp, &MemStr); - Mem->addValue(dwarf::DW_AT_data_member_location, dwarf::DW_FORM_data1, - &Zero); + auto Mem = DIE::get(Alloc, dwarf::DW_TAG_member); + Mem->addValue(Alloc, dwarf::DW_AT_name, dwarf::DW_FORM_strp, MemStr); + Mem->addValue(Alloc, dwarf::DW_AT_data_member_location, + dwarf::DW_FORM_data1, Zero); - DIE PtrToFooMem(dwarf::DW_TAG_ptr_to_member_type); + DIE &PtrToFooMem = *DIE::get(Alloc, dwarf::DW_TAG_ptr_to_member_type); DIEEntry BarEntry(Bar); - PtrToFooMem.addValue(dwarf::DW_AT_type, dwarf::DW_FORM_ref4, &BarEntry); - PtrToFooMem.addValue(dwarf::DW_AT_containing_type, dwarf::DW_FORM_ref4, - &BarEntry); + PtrToFooMem.addValue(Alloc, dwarf::DW_AT_type, dwarf::DW_FORM_ref4, + BarEntry); + PtrToFooMem.addValue(Alloc, dwarf::DW_AT_containing_type, + dwarf::DW_FORM_ref4, BarEntry); DIEEntry PtrToFooMemRef(PtrToFooMem); - Mem->addValue(dwarf::DW_AT_type, dwarf::DW_FORM_ref4, &PtrToFooMemRef); + Mem->addValue(Alloc, dwarf::DW_AT_type, dwarf::DW_FORM_ref4, + PtrToFooMemRef); Foo.addChild(std::move(Mem)); @@ -451,31 +486,34 @@ // struct { } a; // struct foo { decltype(a) mem; }; -TEST(DIEHashTest, RefUnnamedType) { +TEST_F(DIEHashTest, RefUnnamedType) { DIEInteger Zero(0); DIEInteger One(1); DIEInteger Eight(8); - DIEString FooStr(&Zero, "foo"); - DIEString MemStr(&Zero, "mem"); + DIEString FooStr = getString("foo"); + DIEString MemStr = getString("mem"); - DIE Unnamed(dwarf::DW_TAG_structure_type); - Unnamed.addValue(dwarf::DW_AT_byte_size, dwarf::DW_FORM_data1, &One); + DIE &Unnamed = *DIE::get(Alloc, dwarf::DW_TAG_structure_type); + Unnamed.addValue(Alloc, dwarf::DW_AT_byte_size, dwarf::DW_FORM_data1, One); + + DIE &Foo = *DIE::get(Alloc, dwarf::DW_TAG_structure_type); + Foo.addValue(Alloc, dwarf::DW_AT_byte_size, dwarf::DW_FORM_data1, Eight); + Foo.addValue(Alloc, dwarf::DW_AT_name, dwarf::DW_FORM_strp, FooStr); - DIE Foo(dwarf::DW_TAG_structure_type); - Foo.addValue(dwarf::DW_AT_byte_size, dwarf::DW_FORM_data1, &Eight); - Foo.addValue(dwarf::DW_AT_name, dwarf::DW_FORM_strp, &FooStr); + auto Mem = DIE::get(Alloc, dwarf::DW_TAG_member); + Mem->addValue(Alloc, dwarf::DW_AT_name, dwarf::DW_FORM_strp, MemStr); + Mem->addValue(Alloc, dwarf::DW_AT_data_member_location, dwarf::DW_FORM_data1, + Zero); - auto Mem = make_unique<DIE>(dwarf::DW_TAG_member); - Mem->addValue(dwarf::DW_AT_name, dwarf::DW_FORM_strp, &MemStr); - Mem->addValue(dwarf::DW_AT_data_member_location, dwarf::DW_FORM_data1, &Zero); - - DIE UnnamedPtr(dwarf::DW_TAG_pointer_type); - UnnamedPtr.addValue(dwarf::DW_AT_byte_size, dwarf::DW_FORM_data1, &Eight); + DIE &UnnamedPtr = *DIE::get(Alloc, dwarf::DW_TAG_pointer_type); + UnnamedPtr.addValue(Alloc, dwarf::DW_AT_byte_size, dwarf::DW_FORM_data1, + Eight); DIEEntry UnnamedRef(Unnamed); - UnnamedPtr.addValue(dwarf::DW_AT_type, dwarf::DW_FORM_ref4, &UnnamedRef); + UnnamedPtr.addValue(Alloc, dwarf::DW_AT_type, dwarf::DW_FORM_ref4, + UnnamedRef); DIEEntry UnnamedPtrRef(UnnamedPtr); - Mem->addValue(dwarf::DW_AT_type, dwarf::DW_FORM_ref4, &UnnamedPtrRef); + Mem->addValue(Alloc, dwarf::DW_AT_type, dwarf::DW_FORM_ref4, UnnamedPtrRef); Foo.addChild(std::move(Mem)); @@ -485,15 +523,15 @@ } // struct { struct foo { }; }; -TEST(DIEHashTest, NestedType) { - DIE Unnamed(dwarf::DW_TAG_structure_type); +TEST_F(DIEHashTest, NestedType) { + DIE &Unnamed = *DIE::get(Alloc, dwarf::DW_TAG_structure_type); DIEInteger One(1); - Unnamed.addValue(dwarf::DW_AT_byte_size, dwarf::DW_FORM_data1, &One); + Unnamed.addValue(Alloc, dwarf::DW_AT_byte_size, dwarf::DW_FORM_data1, One); - auto Foo = make_unique<DIE>(dwarf::DW_TAG_structure_type); - DIEString FooStr(&One, "foo"); - Foo->addValue(dwarf::DW_AT_name, dwarf::DW_FORM_strp, &FooStr); - Foo->addValue(dwarf::DW_AT_byte_size, dwarf::DW_FORM_data1, &One); + auto Foo = DIE::get(Alloc, dwarf::DW_TAG_structure_type); + DIEString FooStr = getString("foo"); + Foo->addValue(Alloc, dwarf::DW_AT_name, dwarf::DW_FORM_strp, FooStr); + Foo->addValue(Alloc, dwarf::DW_AT_byte_size, dwarf::DW_FORM_data1, One); Unnamed.addChild(std::move(Foo)); @@ -504,14 +542,14 @@ } // struct { static void func(); }; -TEST(DIEHashTest, MemberFunc) { - DIE Unnamed(dwarf::DW_TAG_structure_type); +TEST_F(DIEHashTest, MemberFunc) { + DIE &Unnamed = *DIE::get(Alloc, dwarf::DW_TAG_structure_type); DIEInteger One(1); - Unnamed.addValue(dwarf::DW_AT_byte_size, dwarf::DW_FORM_data1, &One); + Unnamed.addValue(Alloc, dwarf::DW_AT_byte_size, dwarf::DW_FORM_data1, One); - auto Func = make_unique<DIE>(dwarf::DW_TAG_subprogram); - DIEString FuncStr(&One, "func"); - Func->addValue(dwarf::DW_AT_name, dwarf::DW_FORM_strp, &FuncStr); + auto Func = DIE::get(Alloc, dwarf::DW_TAG_subprogram); + DIEString FuncStr = getString("func"); + Func->addValue(Alloc, dwarf::DW_AT_name, dwarf::DW_FORM_strp, FuncStr); Unnamed.addChild(std::move(Func)); @@ -524,25 +562,28 @@ // struct A { // static void func(); // }; -TEST(DIEHashTest, MemberFuncFlag) { - DIE A(dwarf::DW_TAG_structure_type); +TEST_F(DIEHashTest, MemberFuncFlag) { + DIE &A = *DIE::get(Alloc, dwarf::DW_TAG_structure_type); DIEInteger One(1); - DIEString AStr(&One, "A"); - A.addValue(dwarf::DW_AT_name, dwarf::DW_FORM_strp, &AStr); - A.addValue(dwarf::DW_AT_byte_size, dwarf::DW_FORM_data1, &One); - A.addValue(dwarf::DW_AT_decl_file, dwarf::DW_FORM_data1, &One); - A.addValue(dwarf::DW_AT_decl_line, dwarf::DW_FORM_data1, &One); + DIEString AStr = getString("A"); + A.addValue(Alloc, dwarf::DW_AT_name, dwarf::DW_FORM_strp, AStr); + A.addValue(Alloc, dwarf::DW_AT_byte_size, dwarf::DW_FORM_data1, One); + A.addValue(Alloc, dwarf::DW_AT_decl_file, dwarf::DW_FORM_data1, One); + A.addValue(Alloc, dwarf::DW_AT_decl_line, dwarf::DW_FORM_data1, One); - auto Func = make_unique<DIE>(dwarf::DW_TAG_subprogram); - DIEString FuncStr(&One, "func"); - DIEString FuncLinkage(&One, "_ZN1A4funcEv"); + auto Func = DIE::get(Alloc, dwarf::DW_TAG_subprogram); + DIEString FuncStr = getString("func"); + DIEString FuncLinkage = getString("_ZN1A4funcEv"); DIEInteger Two(2); - Func->addValue(dwarf::DW_AT_external, dwarf::DW_FORM_flag_present, &One); - Func->addValue(dwarf::DW_AT_name, dwarf::DW_FORM_strp, &FuncStr); - Func->addValue(dwarf::DW_AT_decl_file, dwarf::DW_FORM_data1, &One); - Func->addValue(dwarf::DW_AT_decl_line, dwarf::DW_FORM_data1, &Two); - Func->addValue(dwarf::DW_AT_linkage_name, dwarf::DW_FORM_strp, &FuncLinkage); - Func->addValue(dwarf::DW_AT_declaration, dwarf::DW_FORM_flag_present, &One); + Func->addValue(Alloc, dwarf::DW_AT_external, dwarf::DW_FORM_flag_present, + One); + Func->addValue(Alloc, dwarf::DW_AT_name, dwarf::DW_FORM_strp, FuncStr); + Func->addValue(Alloc, dwarf::DW_AT_decl_file, dwarf::DW_FORM_data1, One); + Func->addValue(Alloc, dwarf::DW_AT_decl_line, dwarf::DW_FORM_data1, Two); + Func->addValue(Alloc, dwarf::DW_AT_linkage_name, dwarf::DW_FORM_strp, + FuncLinkage); + Func->addValue(Alloc, dwarf::DW_AT_declaration, dwarf::DW_FORM_flag_present, + One); A.addChild(std::move(Func)); @@ -557,39 +598,40 @@ // const static int PI = -3; // }; // A a; -TEST(DIEHashTest, MemberSdata) { - DIE A(dwarf::DW_TAG_structure_type); +TEST_F(DIEHashTest, MemberSdata) { + DIE &A = *DIE::get(Alloc, dwarf::DW_TAG_structure_type); DIEInteger One(1); - DIEString AStr(&One, "A"); - A.addValue(dwarf::DW_AT_name, dwarf::DW_FORM_strp, &AStr); - A.addValue(dwarf::DW_AT_byte_size, dwarf::DW_FORM_data1, &One); - A.addValue(dwarf::DW_AT_decl_file, dwarf::DW_FORM_data1, &One); - A.addValue(dwarf::DW_AT_decl_line, dwarf::DW_FORM_data1, &One); + DIEString AStr = getString("A"); + A.addValue(Alloc, dwarf::DW_AT_name, dwarf::DW_FORM_strp, AStr); + A.addValue(Alloc, dwarf::DW_AT_byte_size, dwarf::DW_FORM_data1, One); + A.addValue(Alloc, dwarf::DW_AT_decl_file, dwarf::DW_FORM_data1, One); + A.addValue(Alloc, dwarf::DW_AT_decl_line, dwarf::DW_FORM_data1, One); DIEInteger Four(4); DIEInteger Five(5); - DIEString FStr(&One, "int"); - DIE IntTyDIE(dwarf::DW_TAG_base_type); - IntTyDIE.addValue(dwarf::DW_AT_byte_size, dwarf::DW_FORM_data1, &Four); - IntTyDIE.addValue(dwarf::DW_AT_encoding, dwarf::DW_FORM_data1, &Five); - IntTyDIE.addValue(dwarf::DW_AT_name, dwarf::DW_FORM_strp, &FStr); + DIEString FStr = getString("int"); + DIE &IntTyDIE = *DIE::get(Alloc, dwarf::DW_TAG_base_type); + IntTyDIE.addValue(Alloc, dwarf::DW_AT_byte_size, dwarf::DW_FORM_data1, Four); + IntTyDIE.addValue(Alloc, dwarf::DW_AT_encoding, dwarf::DW_FORM_data1, Five); + IntTyDIE.addValue(Alloc, dwarf::DW_AT_name, dwarf::DW_FORM_strp, FStr); DIEEntry IntTy(IntTyDIE); - auto PITyDIE = make_unique<DIE>(dwarf::DW_TAG_const_type); - PITyDIE->addValue(dwarf::DW_AT_type, dwarf::DW_FORM_ref4, &IntTy); + auto PITyDIE = DIE::get(Alloc, dwarf::DW_TAG_const_type); + PITyDIE->addValue(Alloc, dwarf::DW_AT_type, dwarf::DW_FORM_ref4, IntTy); DIEEntry PITy(*PITyDIE); - auto PI = make_unique<DIE>(dwarf::DW_TAG_member); - DIEString PIStr(&One, "PI"); + auto PI = DIE::get(Alloc, dwarf::DW_TAG_member); + DIEString PIStr = getString("PI"); DIEInteger Two(2); DIEInteger NegThree(-3); - PI->addValue(dwarf::DW_AT_name, dwarf::DW_FORM_strp, &PIStr); - PI->addValue(dwarf::DW_AT_decl_file, dwarf::DW_FORM_data1, &One); - PI->addValue(dwarf::DW_AT_decl_line, dwarf::DW_FORM_data1, &Two); - PI->addValue(dwarf::DW_AT_type, dwarf::DW_FORM_ref4, &PITy); - PI->addValue(dwarf::DW_AT_external, dwarf::DW_FORM_flag_present, &One); - PI->addValue(dwarf::DW_AT_declaration, dwarf::DW_FORM_flag_present, &One); - PI->addValue(dwarf::DW_AT_const_value, dwarf::DW_FORM_sdata, &NegThree); + PI->addValue(Alloc, dwarf::DW_AT_name, dwarf::DW_FORM_strp, PIStr); + PI->addValue(Alloc, dwarf::DW_AT_decl_file, dwarf::DW_FORM_data1, One); + PI->addValue(Alloc, dwarf::DW_AT_decl_line, dwarf::DW_FORM_data1, Two); + PI->addValue(Alloc, dwarf::DW_AT_type, dwarf::DW_FORM_ref4, PITy); + PI->addValue(Alloc, dwarf::DW_AT_external, dwarf::DW_FORM_flag_present, One); + PI->addValue(Alloc, dwarf::DW_AT_declaration, dwarf::DW_FORM_flag_present, + One); + PI->addValue(Alloc, dwarf::DW_AT_const_value, dwarf::DW_FORM_sdata, NegThree); A.addChild(std::move(PI)); @@ -602,36 +644,38 @@ // const static float PI = 3.14; // }; // A a; -TEST(DIEHashTest, MemberBlock) { - DIE A(dwarf::DW_TAG_structure_type); +TEST_F(DIEHashTest, MemberBlock) { + DIE &A = *DIE::get(Alloc, dwarf::DW_TAG_structure_type); DIEInteger One(1); - DIEString AStr(&One, "A"); - A.addValue(dwarf::DW_AT_name, dwarf::DW_FORM_strp, &AStr); - A.addValue(dwarf::DW_AT_byte_size, dwarf::DW_FORM_data1, &One); - A.addValue(dwarf::DW_AT_decl_file, dwarf::DW_FORM_data1, &One); - A.addValue(dwarf::DW_AT_decl_line, dwarf::DW_FORM_data1, &One); + DIEString AStr = getString("A"); + A.addValue(Alloc, dwarf::DW_AT_name, dwarf::DW_FORM_strp, AStr); + A.addValue(Alloc, dwarf::DW_AT_byte_size, dwarf::DW_FORM_data1, One); + A.addValue(Alloc, dwarf::DW_AT_decl_file, dwarf::DW_FORM_data1, One); + A.addValue(Alloc, dwarf::DW_AT_decl_line, dwarf::DW_FORM_data1, One); DIEInteger Four(4); - DIEString FStr(&One, "float"); - auto FloatTyDIE = make_unique<DIE>(dwarf::DW_TAG_base_type); - FloatTyDIE->addValue(dwarf::DW_AT_byte_size, dwarf::DW_FORM_data1, &Four); - FloatTyDIE->addValue(dwarf::DW_AT_encoding, dwarf::DW_FORM_data1, &Four); - FloatTyDIE->addValue(dwarf::DW_AT_name, dwarf::DW_FORM_strp, &FStr); - + DIEString FStr = getString("float"); + auto FloatTyDIE = DIE::get(Alloc, dwarf::DW_TAG_base_type); + FloatTyDIE->addValue(Alloc, dwarf::DW_AT_byte_size, dwarf::DW_FORM_data1, + Four); + FloatTyDIE->addValue(Alloc, dwarf::DW_AT_encoding, dwarf::DW_FORM_data1, + Four); + FloatTyDIE->addValue(Alloc, dwarf::DW_AT_name, dwarf::DW_FORM_strp, FStr); DIEEntry FloatTy(*FloatTyDIE); - auto PITyDIE = make_unique<DIE>(dwarf::DW_TAG_const_type); - PITyDIE->addValue(dwarf::DW_AT_type, dwarf::DW_FORM_ref4, &FloatTy); + auto PITyDIE = DIE::get(Alloc, dwarf::DW_TAG_const_type); + PITyDIE->addValue(Alloc, dwarf::DW_AT_type, dwarf::DW_FORM_ref4, FloatTy); DIEEntry PITy(*PITyDIE); - auto PI = make_unique<DIE>(dwarf::DW_TAG_member); - DIEString PIStr(&One, "PI"); + auto PI = DIE::get(Alloc, dwarf::DW_TAG_member); + DIEString PIStr = getString("PI"); DIEInteger Two(2); - PI->addValue(dwarf::DW_AT_name, dwarf::DW_FORM_strp, &PIStr); - PI->addValue(dwarf::DW_AT_decl_file, dwarf::DW_FORM_data1, &One); - PI->addValue(dwarf::DW_AT_decl_line, dwarf::DW_FORM_data1, &Two); - PI->addValue(dwarf::DW_AT_type, dwarf::DW_FORM_ref4, &PITy); - PI->addValue(dwarf::DW_AT_external, dwarf::DW_FORM_flag_present, &One); - PI->addValue(dwarf::DW_AT_declaration, dwarf::DW_FORM_flag_present, &One); + PI->addValue(Alloc, dwarf::DW_AT_name, dwarf::DW_FORM_strp, PIStr); + PI->addValue(Alloc, dwarf::DW_AT_decl_file, dwarf::DW_FORM_data1, One); + PI->addValue(Alloc, dwarf::DW_AT_decl_line, dwarf::DW_FORM_data1, Two); + PI->addValue(Alloc, dwarf::DW_AT_type, dwarf::DW_FORM_ref4, PITy); + PI->addValue(Alloc, dwarf::DW_AT_external, dwarf::DW_FORM_flag_present, One); + PI->addValue(Alloc, dwarf::DW_AT_declaration, dwarf::DW_FORM_flag_present, + One); DIEBlock PIBlock; DIEInteger Blk1(0xc3); @@ -639,12 +683,13 @@ DIEInteger Blk3(0x48); DIEInteger Blk4(0x40); - PIBlock.addValue((dwarf::Attribute)0, dwarf::DW_FORM_data1, &Blk1); - PIBlock.addValue((dwarf::Attribute)0, dwarf::DW_FORM_data1, &Blk2); - PIBlock.addValue((dwarf::Attribute)0, dwarf::DW_FORM_data1, &Blk3); - PIBlock.addValue((dwarf::Attribute)0, dwarf::DW_FORM_data1, &Blk4); + PIBlock.addValue(Alloc, (dwarf::Attribute)0, dwarf::DW_FORM_data1, Blk1); + PIBlock.addValue(Alloc, (dwarf::Attribute)0, dwarf::DW_FORM_data1, Blk2); + PIBlock.addValue(Alloc, (dwarf::Attribute)0, dwarf::DW_FORM_data1, Blk3); + PIBlock.addValue(Alloc, (dwarf::Attribute)0, dwarf::DW_FORM_data1, Blk4); - PI->addValue(dwarf::DW_AT_const_value, dwarf::DW_FORM_block1, &PIBlock); + PI->addValue(Alloc, dwarf::DW_AT_const_value, dwarf::DW_FORM_block1, + &PIBlock); A.addChild(std::move(PI));