DIEHashTest.cpp revision f1545a219744c1ae66137e64d1c456cd8e924eb7
1800a8761285a239bb82f7d1883a8398815cd2d8fEric Christopher//===- llvm/unittest/DebugInfo/DWARFFormValueTest.cpp ---------------------===// 2800a8761285a239bb82f7d1883a8398815cd2d8fEric Christopher// 3800a8761285a239bb82f7d1883a8398815cd2d8fEric Christopher// The LLVM Compiler Infrastructure 4800a8761285a239bb82f7d1883a8398815cd2d8fEric Christopher// 5800a8761285a239bb82f7d1883a8398815cd2d8fEric Christopher// This file is distributed under the University of Illinois Open Source 6800a8761285a239bb82f7d1883a8398815cd2d8fEric Christopher// License. See LICENSE.TXT for details. 7800a8761285a239bb82f7d1883a8398815cd2d8fEric Christopher// 8800a8761285a239bb82f7d1883a8398815cd2d8fEric Christopher//===----------------------------------------------------------------------===// 9800a8761285a239bb82f7d1883a8398815cd2d8fEric Christopher 10800a8761285a239bb82f7d1883a8398815cd2d8fEric Christopher#include "../lib/CodeGen/AsmPrinter/DIE.h" 11800a8761285a239bb82f7d1883a8398815cd2d8fEric Christopher#include "../lib/CodeGen/AsmPrinter/DIEHash.h" 12800a8761285a239bb82f7d1883a8398815cd2d8fEric Christopher#include "llvm/Support/Dwarf.h" 13800a8761285a239bb82f7d1883a8398815cd2d8fEric Christopher#include "llvm/Support/Debug.h" 14800a8761285a239bb82f7d1883a8398815cd2d8fEric Christopher#include "llvm/Support/Format.h" 15800a8761285a239bb82f7d1883a8398815cd2d8fEric Christopher#include "gtest/gtest.h" 16800a8761285a239bb82f7d1883a8398815cd2d8fEric Christopher 17800a8761285a239bb82f7d1883a8398815cd2d8fEric Christopherusing namespace llvm; 18e4df43e36dbdca444a6e812bdd2c9ea93360a2ecDavid Blaikie 19e4df43e36dbdca444a6e812bdd2c9ea93360a2ecDavid Blaikienamespace { 20e46be7838a355c914fcbd405bf7f20ac20a3e5dcDavid BlaikieTEST(DIEHashTest, Data1) { 21800a8761285a239bb82f7d1883a8398815cd2d8fEric Christopher DIEHash Hash; 22449a88e9a6279cc016d795e86e73c026675ab929Benjamin Kramer DIE Die(dwarf::DW_TAG_base_type); 23449a88e9a6279cc016d795e86e73c026675ab929Benjamin Kramer DIEInteger Size(4); 24449a88e9a6279cc016d795e86e73c026675ab929Benjamin Kramer Die.addValue(dwarf::DW_AT_byte_size, dwarf::DW_FORM_data1, &Size); 25449a88e9a6279cc016d795e86e73c026675ab929Benjamin Kramer uint64_t MD5Res = Hash.computeTypeSignature(&Die); 26c0987082206d202c20ebe1d528c1b28a875160acDavid Blaikie ASSERT_EQ(0x1AFE116E83701108ULL, MD5Res); 27c0987082206d202c20ebe1d528c1b28a875160acDavid Blaikie} 28c0987082206d202c20ebe1d528c1b28a875160acDavid Blaikie 29f1545a219744c1ae66137e64d1c456cd8e924eb7David Blaikie// struct {}; 30e46be7838a355c914fcbd405bf7f20ac20a3e5dcDavid BlaikieTEST(DIEHashTest, TrivialType) { 3188a68cbbb57aa9caef60dbd2f63d908983e77465David Blaikie DIE Unnamed(dwarf::DW_TAG_structure_type); 32c0987082206d202c20ebe1d528c1b28a875160acDavid Blaikie DIEInteger One(1); 3388a68cbbb57aa9caef60dbd2f63d908983e77465David Blaikie Unnamed.addValue(dwarf::DW_AT_byte_size, dwarf::DW_FORM_data1, &One); 34c0987082206d202c20ebe1d528c1b28a875160acDavid Blaikie 35c0987082206d202c20ebe1d528c1b28a875160acDavid Blaikie // Line and file number are ignored. 3688a68cbbb57aa9caef60dbd2f63d908983e77465David Blaikie Unnamed.addValue(dwarf::DW_AT_decl_file, dwarf::DW_FORM_data1, &One); 3788a68cbbb57aa9caef60dbd2f63d908983e77465David Blaikie Unnamed.addValue(dwarf::DW_AT_decl_line, dwarf::DW_FORM_data1, &One); 3888a68cbbb57aa9caef60dbd2f63d908983e77465David Blaikie uint64_t MD5Res = DIEHash().computeTypeSignature(&Unnamed); 39c0987082206d202c20ebe1d528c1b28a875160acDavid Blaikie 40c0987082206d202c20ebe1d528c1b28a875160acDavid Blaikie // The exact same hash GCC produces for this DIE. 41c0987082206d202c20ebe1d528c1b28a875160acDavid Blaikie ASSERT_EQ(0x715305ce6cfd9ad1ULL, MD5Res); 42800a8761285a239bb82f7d1883a8398815cd2d8fEric Christopher} 4388a68cbbb57aa9caef60dbd2f63d908983e77465David Blaikie 44f1545a219744c1ae66137e64d1c456cd8e924eb7David Blaikie// struct foo { }; 45e46be7838a355c914fcbd405bf7f20ac20a3e5dcDavid BlaikieTEST(DIEHashTest, NamedType) { 4688a68cbbb57aa9caef60dbd2f63d908983e77465David Blaikie DIE Foo(dwarf::DW_TAG_structure_type); 4788a68cbbb57aa9caef60dbd2f63d908983e77465David Blaikie DIEInteger One(1); 4888a68cbbb57aa9caef60dbd2f63d908983e77465David Blaikie DIEString FooStr(&One, "foo"); 4988a68cbbb57aa9caef60dbd2f63d908983e77465David Blaikie Foo.addValue(dwarf::DW_AT_name, dwarf::DW_FORM_strp, &FooStr); 5088a68cbbb57aa9caef60dbd2f63d908983e77465David Blaikie Foo.addValue(dwarf::DW_AT_byte_size, dwarf::DW_FORM_data1, &One); 5188a68cbbb57aa9caef60dbd2f63d908983e77465David Blaikie 5288a68cbbb57aa9caef60dbd2f63d908983e77465David Blaikie uint64_t MD5Res = DIEHash().computeTypeSignature(&Foo); 5388a68cbbb57aa9caef60dbd2f63d908983e77465David Blaikie 5488a68cbbb57aa9caef60dbd2f63d908983e77465David Blaikie // The exact same hash GCC produces for this DIE. 5588a68cbbb57aa9caef60dbd2f63d908983e77465David Blaikie ASSERT_EQ(0xd566dbd2ca5265ffULL, MD5Res); 5688a68cbbb57aa9caef60dbd2f63d908983e77465David Blaikie} 5788a68cbbb57aa9caef60dbd2f63d908983e77465David Blaikie 58f1545a219744c1ae66137e64d1c456cd8e924eb7David Blaikie// namespace space { struct foo { }; } 59e46be7838a355c914fcbd405bf7f20ac20a3e5dcDavid BlaikieTEST(DIEHashTest, NamespacedType) { 6088a68cbbb57aa9caef60dbd2f63d908983e77465David Blaikie DIE CU(dwarf::DW_TAG_compile_unit); 6188a68cbbb57aa9caef60dbd2f63d908983e77465David Blaikie 6288a68cbbb57aa9caef60dbd2f63d908983e77465David Blaikie DIE *Space = new DIE(dwarf::DW_TAG_namespace); 6388a68cbbb57aa9caef60dbd2f63d908983e77465David Blaikie DIEInteger One(1); 6488a68cbbb57aa9caef60dbd2f63d908983e77465David Blaikie DIEString SpaceStr(&One, "space"); 6588a68cbbb57aa9caef60dbd2f63d908983e77465David Blaikie Space->addValue(dwarf::DW_AT_name, dwarf::DW_FORM_strp, &SpaceStr); 6688a68cbbb57aa9caef60dbd2f63d908983e77465David Blaikie // DW_AT_declaration is ignored. 6788a68cbbb57aa9caef60dbd2f63d908983e77465David Blaikie Space->addValue(dwarf::DW_AT_declaration, dwarf::DW_FORM_flag_present, &One); 6888a68cbbb57aa9caef60dbd2f63d908983e77465David Blaikie // sibling? 6988a68cbbb57aa9caef60dbd2f63d908983e77465David Blaikie 7088a68cbbb57aa9caef60dbd2f63d908983e77465David Blaikie DIE *Foo = new DIE(dwarf::DW_TAG_structure_type); 7188a68cbbb57aa9caef60dbd2f63d908983e77465David Blaikie DIEString FooStr(&One, "foo"); 7288a68cbbb57aa9caef60dbd2f63d908983e77465David Blaikie Foo->addValue(dwarf::DW_AT_name, dwarf::DW_FORM_strp, &FooStr); 7388a68cbbb57aa9caef60dbd2f63d908983e77465David Blaikie Foo->addValue(dwarf::DW_AT_byte_size, dwarf::DW_FORM_data1, &One); 7488a68cbbb57aa9caef60dbd2f63d908983e77465David Blaikie 7588a68cbbb57aa9caef60dbd2f63d908983e77465David Blaikie Space->addChild(Foo); 7688a68cbbb57aa9caef60dbd2f63d908983e77465David Blaikie CU.addChild(Space); 7788a68cbbb57aa9caef60dbd2f63d908983e77465David Blaikie 7888a68cbbb57aa9caef60dbd2f63d908983e77465David Blaikie uint64_t MD5Res = DIEHash().computeTypeSignature(Foo); 7988a68cbbb57aa9caef60dbd2f63d908983e77465David Blaikie 8088a68cbbb57aa9caef60dbd2f63d908983e77465David Blaikie // The exact same hash GCC produces for this DIE. 8188a68cbbb57aa9caef60dbd2f63d908983e77465David Blaikie ASSERT_EQ(0x7b80381fd17f1e33ULL, MD5Res); 8288a68cbbb57aa9caef60dbd2f63d908983e77465David Blaikie} 8347f66d5a756d4eaeba9082ff4c82023a213daf45David Blaikie 84f1545a219744c1ae66137e64d1c456cd8e924eb7David Blaikie// struct { int member; }; 85e46be7838a355c914fcbd405bf7f20ac20a3e5dcDavid BlaikieTEST(DIEHashTest, TypeWithMember) { 8647f66d5a756d4eaeba9082ff4c82023a213daf45David Blaikie DIE Unnamed(dwarf::DW_TAG_structure_type); 8747f66d5a756d4eaeba9082ff4c82023a213daf45David Blaikie DIEInteger Four(4); 8847f66d5a756d4eaeba9082ff4c82023a213daf45David Blaikie Unnamed.addValue(dwarf::DW_AT_byte_size, dwarf::DW_FORM_data1, &Four); 8947f66d5a756d4eaeba9082ff4c82023a213daf45David Blaikie 9047f66d5a756d4eaeba9082ff4c82023a213daf45David Blaikie DIE *Member = new DIE(dwarf::DW_TAG_member); 9147f66d5a756d4eaeba9082ff4c82023a213daf45David Blaikie DIEString MemberStr(&Four, "member"); 9247f66d5a756d4eaeba9082ff4c82023a213daf45David Blaikie Member->addValue(dwarf::DW_AT_name, dwarf::DW_FORM_strp, &MemberStr); 9347f66d5a756d4eaeba9082ff4c82023a213daf45David Blaikie DIEInteger Zero(0); 9447f66d5a756d4eaeba9082ff4c82023a213daf45David Blaikie Member->addValue(dwarf::DW_AT_data_member_location, dwarf::DW_FORM_data1, &Zero); 9547f66d5a756d4eaeba9082ff4c82023a213daf45David Blaikie 9647f66d5a756d4eaeba9082ff4c82023a213daf45David Blaikie Unnamed.addChild(Member); 9747f66d5a756d4eaeba9082ff4c82023a213daf45David Blaikie 9847f66d5a756d4eaeba9082ff4c82023a213daf45David Blaikie DIE Int(dwarf::DW_TAG_base_type); 9947f66d5a756d4eaeba9082ff4c82023a213daf45David Blaikie DIEString IntStr(&Four, "int"); 10047f66d5a756d4eaeba9082ff4c82023a213daf45David Blaikie Int.addValue(dwarf::DW_AT_name, dwarf::DW_FORM_strp, &IntStr); 10147f66d5a756d4eaeba9082ff4c82023a213daf45David Blaikie Int.addValue(dwarf::DW_AT_byte_size, dwarf::DW_FORM_data1, &Four); 10247f66d5a756d4eaeba9082ff4c82023a213daf45David Blaikie DIEInteger Five(5); 10347f66d5a756d4eaeba9082ff4c82023a213daf45David Blaikie Int.addValue(dwarf::DW_AT_encoding, dwarf::DW_FORM_data1, &Five); 10447f66d5a756d4eaeba9082ff4c82023a213daf45David Blaikie 10547f66d5a756d4eaeba9082ff4c82023a213daf45David Blaikie DIEEntry IntRef(&Int); 10647f66d5a756d4eaeba9082ff4c82023a213daf45David Blaikie Member->addValue(dwarf::DW_AT_type, dwarf::DW_FORM_ref4, &IntRef); 10747f66d5a756d4eaeba9082ff4c82023a213daf45David Blaikie 10847f66d5a756d4eaeba9082ff4c82023a213daf45David Blaikie uint64_t MD5Res = DIEHash().computeTypeSignature(&Unnamed); 10947f66d5a756d4eaeba9082ff4c82023a213daf45David Blaikie 11047f66d5a756d4eaeba9082ff4c82023a213daf45David Blaikie ASSERT_EQ(0x5646aa436b7e07c6ULL, MD5Res); 11147f66d5a756d4eaeba9082ff4c82023a213daf45David Blaikie} 1123baa3c37ce2cd7db7a4840e66f22a08ce1702787David Blaikie 113f1545a219744c1ae66137e64d1c456cd8e924eb7David Blaikie// struct foo { int mem1, mem2; }; 114e46be7838a355c914fcbd405bf7f20ac20a3e5dcDavid BlaikieTEST(DIEHashTest, ReusedType) { 1153baa3c37ce2cd7db7a4840e66f22a08ce1702787David Blaikie DIE Unnamed(dwarf::DW_TAG_structure_type); 1163baa3c37ce2cd7db7a4840e66f22a08ce1702787David Blaikie DIEInteger Eight(8); 1173baa3c37ce2cd7db7a4840e66f22a08ce1702787David Blaikie Unnamed.addValue(dwarf::DW_AT_byte_size, dwarf::DW_FORM_data1, &Eight); 1183baa3c37ce2cd7db7a4840e66f22a08ce1702787David Blaikie 1193baa3c37ce2cd7db7a4840e66f22a08ce1702787David Blaikie DIE *Mem1 = new DIE(dwarf::DW_TAG_member); 1203baa3c37ce2cd7db7a4840e66f22a08ce1702787David Blaikie DIEInteger Four(4); 1213baa3c37ce2cd7db7a4840e66f22a08ce1702787David Blaikie DIEString Mem1Str(&Four, "mem1"); 1223baa3c37ce2cd7db7a4840e66f22a08ce1702787David Blaikie Mem1->addValue(dwarf::DW_AT_name, dwarf::DW_FORM_strp, &Mem1Str); 1233baa3c37ce2cd7db7a4840e66f22a08ce1702787David Blaikie DIEInteger Zero(0); 1243baa3c37ce2cd7db7a4840e66f22a08ce1702787David Blaikie Mem1->addValue(dwarf::DW_AT_data_member_location, dwarf::DW_FORM_data1, &Zero); 1253baa3c37ce2cd7db7a4840e66f22a08ce1702787David Blaikie 1263baa3c37ce2cd7db7a4840e66f22a08ce1702787David Blaikie Unnamed.addChild(Mem1); 1273baa3c37ce2cd7db7a4840e66f22a08ce1702787David Blaikie 1283baa3c37ce2cd7db7a4840e66f22a08ce1702787David Blaikie DIE *Mem2 = new DIE(dwarf::DW_TAG_member); 1293baa3c37ce2cd7db7a4840e66f22a08ce1702787David Blaikie DIEString Mem2Str(&Four, "mem2"); 1303baa3c37ce2cd7db7a4840e66f22a08ce1702787David Blaikie Mem2->addValue(dwarf::DW_AT_name, dwarf::DW_FORM_strp, &Mem2Str); 1313baa3c37ce2cd7db7a4840e66f22a08ce1702787David Blaikie Mem2->addValue(dwarf::DW_AT_data_member_location, dwarf::DW_FORM_data1, &Four); 1323baa3c37ce2cd7db7a4840e66f22a08ce1702787David Blaikie 1333baa3c37ce2cd7db7a4840e66f22a08ce1702787David Blaikie Unnamed.addChild(Mem2); 1343baa3c37ce2cd7db7a4840e66f22a08ce1702787David Blaikie 1353baa3c37ce2cd7db7a4840e66f22a08ce1702787David Blaikie DIE Int(dwarf::DW_TAG_base_type); 1363baa3c37ce2cd7db7a4840e66f22a08ce1702787David Blaikie DIEString IntStr(&Four, "int"); 1373baa3c37ce2cd7db7a4840e66f22a08ce1702787David Blaikie Int.addValue(dwarf::DW_AT_name, dwarf::DW_FORM_strp, &IntStr); 1383baa3c37ce2cd7db7a4840e66f22a08ce1702787David Blaikie Int.addValue(dwarf::DW_AT_byte_size, dwarf::DW_FORM_data1, &Four); 1393baa3c37ce2cd7db7a4840e66f22a08ce1702787David Blaikie DIEInteger Five(5); 1403baa3c37ce2cd7db7a4840e66f22a08ce1702787David Blaikie Int.addValue(dwarf::DW_AT_encoding, dwarf::DW_FORM_data1, &Five); 1413baa3c37ce2cd7db7a4840e66f22a08ce1702787David Blaikie 1423baa3c37ce2cd7db7a4840e66f22a08ce1702787David Blaikie DIEEntry IntRef(&Int); 1433baa3c37ce2cd7db7a4840e66f22a08ce1702787David Blaikie Mem1->addValue(dwarf::DW_AT_type, dwarf::DW_FORM_ref4, &IntRef); 1443baa3c37ce2cd7db7a4840e66f22a08ce1702787David Blaikie Mem2->addValue(dwarf::DW_AT_type, dwarf::DW_FORM_ref4, &IntRef); 1453baa3c37ce2cd7db7a4840e66f22a08ce1702787David Blaikie 1463baa3c37ce2cd7db7a4840e66f22a08ce1702787David Blaikie uint64_t MD5Res = DIEHash().computeTypeSignature(&Unnamed); 1473baa3c37ce2cd7db7a4840e66f22a08ce1702787David Blaikie 1483baa3c37ce2cd7db7a4840e66f22a08ce1702787David Blaikie ASSERT_EQ(0x3a7dc3ed7b76b2f8ULL, MD5Res); 1493baa3c37ce2cd7db7a4840e66f22a08ce1702787David Blaikie} 1503baa3c37ce2cd7db7a4840e66f22a08ce1702787David Blaikie 151f1545a219744c1ae66137e64d1c456cd8e924eb7David Blaikie// struct foo { static foo f; }; 152e46be7838a355c914fcbd405bf7f20ac20a3e5dcDavid BlaikieTEST(DIEHashTest, RecursiveType) { 1533baa3c37ce2cd7db7a4840e66f22a08ce1702787David Blaikie DIE Foo(dwarf::DW_TAG_structure_type); 1543baa3c37ce2cd7db7a4840e66f22a08ce1702787David Blaikie DIEInteger One(1); 1553baa3c37ce2cd7db7a4840e66f22a08ce1702787David Blaikie Foo.addValue(dwarf::DW_AT_byte_size, dwarf::DW_FORM_data1, &One); 1563baa3c37ce2cd7db7a4840e66f22a08ce1702787David Blaikie DIEString FooStr(&One, "foo"); 1573baa3c37ce2cd7db7a4840e66f22a08ce1702787David Blaikie Foo.addValue(dwarf::DW_AT_name, dwarf::DW_FORM_strp, &FooStr); 1583baa3c37ce2cd7db7a4840e66f22a08ce1702787David Blaikie 1593baa3c37ce2cd7db7a4840e66f22a08ce1702787David Blaikie DIE *Mem = new DIE(dwarf::DW_TAG_member); 1603baa3c37ce2cd7db7a4840e66f22a08ce1702787David Blaikie DIEString MemStr(&One, "mem"); 1613baa3c37ce2cd7db7a4840e66f22a08ce1702787David Blaikie Mem->addValue(dwarf::DW_AT_name, dwarf::DW_FORM_strp, &MemStr); 1623baa3c37ce2cd7db7a4840e66f22a08ce1702787David Blaikie DIEEntry FooRef(&Foo); 1633baa3c37ce2cd7db7a4840e66f22a08ce1702787David Blaikie Mem->addValue(dwarf::DW_AT_type, dwarf::DW_FORM_ref4, &FooRef); 1643baa3c37ce2cd7db7a4840e66f22a08ce1702787David Blaikie // DW_AT_external and DW_AT_declaration are ignored anyway, so skip them. 1653baa3c37ce2cd7db7a4840e66f22a08ce1702787David Blaikie 1663baa3c37ce2cd7db7a4840e66f22a08ce1702787David Blaikie Foo.addChild(Mem); 1673baa3c37ce2cd7db7a4840e66f22a08ce1702787David Blaikie 1683baa3c37ce2cd7db7a4840e66f22a08ce1702787David Blaikie uint64_t MD5Res = DIEHash().computeTypeSignature(&Foo); 1693baa3c37ce2cd7db7a4840e66f22a08ce1702787David Blaikie 1703baa3c37ce2cd7db7a4840e66f22a08ce1702787David Blaikie ASSERT_EQ(0x73d8b25aef227b06ULL, MD5Res); 1713baa3c37ce2cd7db7a4840e66f22a08ce1702787David Blaikie} 172f1545a219744c1ae66137e64d1c456cd8e924eb7David Blaikie 173f1545a219744c1ae66137e64d1c456cd8e924eb7David Blaikie// struct foo { foo *mem; }; 174f1545a219744c1ae66137e64d1c456cd8e924eb7David BlaikieTEST(DIEHashTest, Pointer) { 175f1545a219744c1ae66137e64d1c456cd8e924eb7David Blaikie DIE Foo(dwarf::DW_TAG_structure_type); 176f1545a219744c1ae66137e64d1c456cd8e924eb7David Blaikie DIEInteger Eight(8); 177f1545a219744c1ae66137e64d1c456cd8e924eb7David Blaikie Foo.addValue(dwarf::DW_AT_byte_size, dwarf::DW_FORM_data1, &Eight); 178f1545a219744c1ae66137e64d1c456cd8e924eb7David Blaikie DIEString FooStr(&Eight, "foo"); 179f1545a219744c1ae66137e64d1c456cd8e924eb7David Blaikie Foo.addValue(dwarf::DW_AT_name, dwarf::DW_FORM_strp, &FooStr); 180f1545a219744c1ae66137e64d1c456cd8e924eb7David Blaikie 181f1545a219744c1ae66137e64d1c456cd8e924eb7David Blaikie DIE *Mem = new DIE(dwarf::DW_TAG_member); 182f1545a219744c1ae66137e64d1c456cd8e924eb7David Blaikie DIEString MemStr(&Eight, "mem"); 183f1545a219744c1ae66137e64d1c456cd8e924eb7David Blaikie Mem->addValue(dwarf::DW_AT_name, dwarf::DW_FORM_strp, &MemStr); 184f1545a219744c1ae66137e64d1c456cd8e924eb7David Blaikie DIEInteger Zero(0); 185f1545a219744c1ae66137e64d1c456cd8e924eb7David Blaikie Mem->addValue(dwarf::DW_AT_data_member_location, dwarf::DW_FORM_data1, &Zero); 186f1545a219744c1ae66137e64d1c456cd8e924eb7David Blaikie 187f1545a219744c1ae66137e64d1c456cd8e924eb7David Blaikie DIE FooPtr(dwarf::DW_TAG_pointer_type); 188f1545a219744c1ae66137e64d1c456cd8e924eb7David Blaikie FooPtr.addValue(dwarf::DW_AT_byte_size, dwarf::DW_FORM_data1, &Eight); 189f1545a219744c1ae66137e64d1c456cd8e924eb7David Blaikie DIEEntry FooRef(&Foo); 190f1545a219744c1ae66137e64d1c456cd8e924eb7David Blaikie FooPtr.addValue(dwarf::DW_AT_type, dwarf::DW_FORM_ref4, &FooRef); 191f1545a219744c1ae66137e64d1c456cd8e924eb7David Blaikie 192f1545a219744c1ae66137e64d1c456cd8e924eb7David Blaikie DIEEntry FooPtrRef(&FooPtr); 193f1545a219744c1ae66137e64d1c456cd8e924eb7David Blaikie Mem->addValue(dwarf::DW_AT_type, dwarf::DW_FORM_ref4, &FooPtrRef); 194f1545a219744c1ae66137e64d1c456cd8e924eb7David Blaikie 195f1545a219744c1ae66137e64d1c456cd8e924eb7David Blaikie Foo.addChild(Mem); 196f1545a219744c1ae66137e64d1c456cd8e924eb7David Blaikie 197f1545a219744c1ae66137e64d1c456cd8e924eb7David Blaikie uint64_t MD5Res = DIEHash().computeTypeSignature(&Foo); 198f1545a219744c1ae66137e64d1c456cd8e924eb7David Blaikie 199f1545a219744c1ae66137e64d1c456cd8e924eb7David Blaikie ASSERT_EQ(0x74ea73862e8708d2ULL, MD5Res); 200f1545a219744c1ae66137e64d1c456cd8e924eb7David Blaikie} 201800a8761285a239bb82f7d1883a8398815cd2d8fEric Christopher} 202