diff options
author | Duncan P. N. Exon Smith <dexonsmith@apple.com> | 2015-02-06 23:46:49 +0000 |
---|---|---|
committer | Duncan P. N. Exon Smith <dexonsmith@apple.com> | 2015-02-06 23:46:49 +0000 |
commit | e07f13ae35e82e5579d0d9f0dc05fd0321c6bba2 (patch) | |
tree | 256213d48956796e26fe843e1791e4555f3d7366 /llvm | |
parent | dd563dd3415d6cf9028d5cf36db273ef86434a8e (diff) | |
download | bcm5719-llvm-e07f13ae35e82e5579d0d9f0dc05fd0321c6bba2.tar.gz bcm5719-llvm-e07f13ae35e82e5579d0d9f0dc05fd0321c6bba2.zip |
Support: Add dwarf::getAttributeEncoding()
llvm-svn: 228470
Diffstat (limited to 'llvm')
-rw-r--r-- | llvm/include/llvm/Support/Dwarf.h | 1 | ||||
-rw-r--r-- | llvm/lib/Support/Dwarf.cpp | 7 | ||||
-rw-r--r-- | llvm/unittests/Support/DwarfTest.cpp | 16 |
3 files changed, 24 insertions, 0 deletions
diff --git a/llvm/include/llvm/Support/Dwarf.h b/llvm/include/llvm/Support/Dwarf.h index be1273604f5..b1bcb160fb6 100644 --- a/llvm/include/llvm/Support/Dwarf.h +++ b/llvm/include/llvm/Support/Dwarf.h @@ -749,6 +749,7 @@ const char *GDBIndexEntryLinkageString(GDBIndexEntryLinkage Linkage); /// @{ unsigned getTag(StringRef TagString); unsigned getLanguage(StringRef LanguageString); +unsigned getAttributeEncoding(StringRef EncodingString); /// @} /// \brief Returns the symbolic string representing Val when used as a value diff --git a/llvm/lib/Support/Dwarf.cpp b/llvm/lib/Support/Dwarf.cpp index 553a436938b..af6db59302c 100644 --- a/llvm/lib/Support/Dwarf.cpp +++ b/llvm/lib/Support/Dwarf.cpp @@ -414,6 +414,13 @@ const char *llvm::dwarf::AttributeEncodingString(unsigned Encoding) { } } +unsigned llvm::dwarf::getAttributeEncoding(StringRef EncodingString) { + return StringSwitch<unsigned>(EncodingString) +#define HANDLE_DW_ATE(ID, NAME) .Case("DW_ATE_" #NAME, DW_ATE_##NAME) +#include "llvm/Support/Dwarf.def" + .Default(0); +} + const char *llvm::dwarf::DecimalSignString(unsigned Sign) { switch (Sign) { case DW_DS_unsigned: return "DW_DS_unsigned"; diff --git a/llvm/unittests/Support/DwarfTest.cpp b/llvm/unittests/Support/DwarfTest.cpp index b1a23b31c1c..25f5574ad7b 100644 --- a/llvm/unittests/Support/DwarfTest.cpp +++ b/llvm/unittests/Support/DwarfTest.cpp @@ -79,4 +79,20 @@ TEST(DwarfTest, AttributeEncodingStringOnInvalid) { EXPECT_EQ(nullptr, AttributeEncodingString(DW_ATE_hi_user)); } +TEST(DwarfTest, getAttributeEncoding) { + // A couple of valid languages. + EXPECT_EQ(DW_ATE_boolean, getAttributeEncoding("DW_ATE_boolean")); + EXPECT_EQ(DW_ATE_imaginary_float, + getAttributeEncoding("DW_ATE_imaginary_float")); + + // Invalid languages. + EXPECT_EQ(0u, getAttributeEncoding("DW_ATE_invalid")); + EXPECT_EQ(0u, getAttributeEncoding("DW_TAG_array_type")); + EXPECT_EQ(0u, getAttributeEncoding("something else")); + + // AttributeEncoding range markers should not be recognized. + EXPECT_EQ(0u, getAttributeEncoding("DW_ATE_lo_user")); + EXPECT_EQ(0u, getAttributeEncoding("DW_ATE_hi_user")); +} + } // end namespace |