diff options
author | David Blaikie <dblaikie@gmail.com> | 2013-10-17 00:10:34 +0000 |
---|---|---|
committer | David Blaikie <dblaikie@gmail.com> | 2013-10-17 00:10:34 +0000 |
commit | 8a142aaa015c2cd7cf4131b78363db333234d5f8 (patch) | |
tree | 39b3cfeaf3f7b2422e9df33c0841c24cc5a681c1 /llvm/unittests/CodeGen/DIEHashTest.cpp | |
parent | 6316ca45a7db4d2bddaff16b93ffdae0fccbbdf6 (diff) | |
download | bcm5719-llvm-8a142aaa015c2cd7cf4131b78363db333234d5f8.tar.gz bcm5719-llvm-8a142aaa015c2cd7cf4131b78363db333234d5f8.zip |
DIEHash: Include the type's context in the type hash.
llvm-svn: 192856
Diffstat (limited to 'llvm/unittests/CodeGen/DIEHashTest.cpp')
-rw-r--r-- | llvm/unittests/CodeGen/DIEHashTest.cpp | 63 |
1 files changed, 56 insertions, 7 deletions
diff --git a/llvm/unittests/CodeGen/DIEHashTest.cpp b/llvm/unittests/CodeGen/DIEHashTest.cpp index 92b6d7686cf..fd1845eb167 100644 --- a/llvm/unittests/CodeGen/DIEHashTest.cpp +++ b/llvm/unittests/CodeGen/DIEHashTest.cpp @@ -17,7 +17,7 @@ using namespace llvm; namespace { -TEST(DIEHashData1Test, DIEHash) { +TEST(Data1, DIEHash) { DIEHash Hash; DIE Die(dwarf::DW_TAG_base_type); DIEInteger Size(4); @@ -26,19 +26,68 @@ TEST(DIEHashData1Test, DIEHash) { ASSERT_EQ(0x1AFE116E83701108ULL, MD5Res); } -TEST(DIEHashTrivialTypeTest, DIEHash) { +TEST(TrivialType, DIEHash) { // A complete, but simple, type containing no members and defined on the first // line of a file. - DIE FooType(dwarf::DW_TAG_structure_type); + DIE Unnamed(dwarf::DW_TAG_structure_type); DIEInteger One(1); - FooType.addValue(dwarf::DW_AT_byte_size, dwarf::DW_FORM_data1, &One); + Unnamed.addValue(dwarf::DW_AT_byte_size, dwarf::DW_FORM_data1, &One); // Line and file number are ignored. - FooType.addValue(dwarf::DW_AT_decl_file, dwarf::DW_FORM_data1, &One); - FooType.addValue(dwarf::DW_AT_decl_line, dwarf::DW_FORM_data1, &One); - uint64_t MD5Res = DIEHash().computeTypeSignature(&FooType); + Unnamed.addValue(dwarf::DW_AT_decl_file, dwarf::DW_FORM_data1, &One); + Unnamed.addValue(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. ASSERT_EQ(0x715305ce6cfd9ad1ULL, MD5Res); } + +TEST(NamedType, DIEHash) { + // A complete named type containing no members and defined on the first line + // of a file. + DIE Foo(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); + + // Line and file number are ignored. + Foo.addValue(dwarf::DW_AT_decl_file, dwarf::DW_FORM_data1, &One); + Foo.addValue(dwarf::DW_AT_decl_line, dwarf::DW_FORM_data1, &One); + uint64_t MD5Res = DIEHash().computeTypeSignature(&Foo); + + // The exact same hash GCC produces for this DIE. + ASSERT_EQ(0xd566dbd2ca5265ffULL, MD5Res); +} + +TEST(NamespacedType, DIEHash) { + // A complete named type containing no members and defined on the first line + // of a file. + DIE CU(dwarf::DW_TAG_compile_unit); + + DIE *Space = new DIE(dwarf::DW_TAG_namespace); + DIEInteger One(1); + DIEString SpaceStr(&One, "space"); + Space->addValue(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); + // sibling? + + DIE *Foo = new 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); + + // Line and file number are ignored. + Foo->addValue(dwarf::DW_AT_decl_file, dwarf::DW_FORM_data1, &One); + Foo->addValue(dwarf::DW_AT_decl_line, dwarf::DW_FORM_data1, &One); + + Space->addChild(Foo); + CU.addChild(Space); + + uint64_t MD5Res = DIEHash().computeTypeSignature(Foo); + + // The exact same hash GCC produces for this DIE. + ASSERT_EQ(0x7b80381fd17f1e33ULL, MD5Res); +} } |