diff options
author | Eric Christopher <echristo@gmail.com> | 2014-01-31 20:02:58 +0000 |
---|---|---|
committer | Eric Christopher <echristo@gmail.com> | 2014-01-31 20:02:58 +0000 |
commit | 4b1cf5801f56a1e510712c568afacae8932c0a92 (patch) | |
tree | c44a9f15948dfcc1ea88fb1ca9daf50b9ab14074 /llvm/unittests/CodeGen/DIEHashTest.cpp | |
parent | 5ad8d90b71444ed176671f8d9cb214e0bb1e6a0c (diff) | |
download | llvm-4b1cf5801f56a1e510712c568afacae8932c0a92.zip llvm-4b1cf5801f56a1e510712c568afacae8932c0a92.tar.gz llvm-4b1cf5801f56a1e510712c568afacae8932c0a92.tar.bz2 |
Add support for DW_FORM_flag and DW_FORM_flag_present to the DIE hashing
algorithm. Sink the 'A' + Attribute hash into each form so we don't
have to check valid forms before deciding whether or not we're going
to hash which will let the default be to return without doing anything.
llvm-svn: 200571
Diffstat (limited to 'llvm/unittests/CodeGen/DIEHashTest.cpp')
-rw-r--r-- | llvm/unittests/CodeGen/DIEHashTest.cpp | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/llvm/unittests/CodeGen/DIEHashTest.cpp b/llvm/unittests/CodeGen/DIEHashTest.cpp index 9faeaaf..a70870c 100644 --- a/llvm/unittests/CodeGen/DIEHashTest.cpp +++ b/llvm/unittests/CodeGen/DIEHashTest.cpp @@ -514,4 +514,35 @@ TEST(DIEHashTest, MemberFunc) { // The exact same hash GCC produces for this DIE. ASSERT_EQ(0xd36a1b6dfb604ba0ULL, MD5Res); } + +// struct A { +// static void func(); +// }; +TEST(DIEHashTest, MemberFuncFlag) { + DIE A(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); + + DIE *Func = new DIE(dwarf::DW_TAG_subprogram); + DIEString FuncStr(&One, "func"); + DIEString FuncLinkage(&One, "_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); + + A.addChild(Func); + + uint64_t MD5Res = DIEHash().computeTypeSignature(A); + + // The exact same hash GCC produces for this DIE. + ASSERT_EQ(0x8f78211ddce3df10ULL, MD5Res); +} } |