summaryrefslogtreecommitdiff
path: root/unittests
diff options
context:
space:
mode:
authorEric Christopher <echristo@gmail.com>2014-01-31 20:02:58 +0000
committerEric Christopher <echristo@gmail.com>2014-01-31 20:02:58 +0000
commit5ff4b203e6e1aeb450ad18ffd7693499018d14e6 (patch)
treec344a779e82d19bf0f604744cd9f340e0da1fcec /unittests
parent5ce9d65a2875a62f3b138a7a3e77244757ca9ce5 (diff)
downloadllvm-5ff4b203e6e1aeb450ad18ffd7693499018d14e6.tar.gz
llvm-5ff4b203e6e1aeb450ad18ffd7693499018d14e6.tar.bz2
llvm-5ff4b203e6e1aeb450ad18ffd7693499018d14e6.tar.xz
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. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@200571 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'unittests')
-rw-r--r--unittests/CodeGen/DIEHashTest.cpp31
1 files changed, 31 insertions, 0 deletions
diff --git a/unittests/CodeGen/DIEHashTest.cpp b/unittests/CodeGen/DIEHashTest.cpp
index 9faeaafc24..a70870cbba 100644
--- a/unittests/CodeGen/DIEHashTest.cpp
+++ b/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);
+}
}