DwarfTest.cpp 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
  1. //===- unittest/Support/DwarfTest.cpp - Dwarf support tests ---------------===//
  2. //
  3. // The LLVM Compiler Infrastructure
  4. //
  5. // This file is distributed under the University of Illinois Open Source
  6. // License. See LICENSE.TXT for details.
  7. //
  8. //===----------------------------------------------------------------------===//
  9. #include "llvm/Support/Dwarf.h"
  10. #include "gtest/gtest.h"
  11. using namespace llvm;
  12. using namespace llvm::dwarf;
  13. namespace {
  14. TEST(DwarfTest, TagStringOnInvalid) {
  15. // This is invalid, so it shouldn't be stringified.
  16. EXPECT_EQ(nullptr, TagString(DW_TAG_invalid));
  17. // These aren't really tags: they describe ranges within tags. They
  18. // shouldn't be stringified either.
  19. EXPECT_EQ(nullptr, TagString(DW_TAG_lo_user));
  20. EXPECT_EQ(nullptr, TagString(DW_TAG_hi_user));
  21. EXPECT_EQ(nullptr, TagString(DW_TAG_user_base));
  22. }
  23. TEST(DwarfTest, getTag) {
  24. // A couple of valid tags.
  25. EXPECT_EQ(DW_TAG_array_type, getTag("DW_TAG_array_type"));
  26. EXPECT_EQ(DW_TAG_module, getTag("DW_TAG_module"));
  27. // Invalid tags.
  28. EXPECT_EQ(DW_TAG_invalid, getTag("DW_TAG_invalid"));
  29. EXPECT_EQ(DW_TAG_invalid, getTag("DW_TAG_madeuptag"));
  30. EXPECT_EQ(DW_TAG_invalid, getTag("something else"));
  31. // Tag range markers should not be recognized.
  32. EXPECT_EQ(DW_TAG_invalid, getTag("DW_TAG_lo_user"));
  33. EXPECT_EQ(DW_TAG_invalid, getTag("DW_TAG_hi_user"));
  34. EXPECT_EQ(DW_TAG_invalid, getTag("DW_TAG_user_base"));
  35. }
  36. TEST(DwarfTest, getOperationEncoding) {
  37. // Some valid ops.
  38. EXPECT_EQ(DW_OP_deref, getOperationEncoding("DW_OP_deref"));
  39. EXPECT_EQ(DW_OP_bit_piece, getOperationEncoding("DW_OP_bit_piece"));
  40. // Invalid ops.
  41. EXPECT_EQ(0u, getOperationEncoding("DW_OP_otherthings"));
  42. EXPECT_EQ(0u, getOperationEncoding("other"));
  43. // Markers shouldn't be recognized.
  44. EXPECT_EQ(0u, getOperationEncoding("DW_OP_lo_user"));
  45. EXPECT_EQ(0u, getOperationEncoding("DW_OP_hi_user"));
  46. }
  47. TEST(DwarfTest, LanguageStringOnInvalid) {
  48. // This is invalid, so it shouldn't be stringified.
  49. EXPECT_EQ(nullptr, LanguageString(0));
  50. // These aren't really tags: they describe ranges within tags. They
  51. // shouldn't be stringified either.
  52. EXPECT_EQ(nullptr, LanguageString(DW_LANG_lo_user));
  53. EXPECT_EQ(nullptr, LanguageString(DW_LANG_hi_user));
  54. }
  55. TEST(DwarfTest, getLanguage) {
  56. // A couple of valid languages.
  57. EXPECT_EQ(DW_LANG_C89, getLanguage("DW_LANG_C89"));
  58. EXPECT_EQ(DW_LANG_C_plus_plus_11, getLanguage("DW_LANG_C_plus_plus_11"));
  59. EXPECT_EQ(DW_LANG_OCaml, getLanguage("DW_LANG_OCaml"));
  60. EXPECT_EQ(DW_LANG_Mips_Assembler, getLanguage("DW_LANG_Mips_Assembler"));
  61. // Invalid languages.
  62. EXPECT_EQ(0u, getLanguage("DW_LANG_invalid"));
  63. EXPECT_EQ(0u, getLanguage("DW_TAG_array_type"));
  64. EXPECT_EQ(0u, getLanguage("something else"));
  65. // Language range markers should not be recognized.
  66. EXPECT_EQ(0u, getLanguage("DW_LANG_lo_user"));
  67. EXPECT_EQ(0u, getLanguage("DW_LANG_hi_user"));
  68. }
  69. TEST(DwarfTest, AttributeEncodingStringOnInvalid) {
  70. // This is invalid, so it shouldn't be stringified.
  71. EXPECT_EQ(nullptr, AttributeEncodingString(0));
  72. // These aren't really tags: they describe ranges within tags. They
  73. // shouldn't be stringified either.
  74. EXPECT_EQ(nullptr, AttributeEncodingString(DW_ATE_lo_user));
  75. EXPECT_EQ(nullptr, AttributeEncodingString(DW_ATE_hi_user));
  76. }
  77. TEST(DwarfTest, getAttributeEncoding) {
  78. // A couple of valid languages.
  79. EXPECT_EQ(DW_ATE_boolean, getAttributeEncoding("DW_ATE_boolean"));
  80. EXPECT_EQ(DW_ATE_imaginary_float,
  81. getAttributeEncoding("DW_ATE_imaginary_float"));
  82. // Invalid languages.
  83. EXPECT_EQ(0u, getAttributeEncoding("DW_ATE_invalid"));
  84. EXPECT_EQ(0u, getAttributeEncoding("DW_TAG_array_type"));
  85. EXPECT_EQ(0u, getAttributeEncoding("something else"));
  86. // AttributeEncoding range markers should not be recognized.
  87. EXPECT_EQ(0u, getAttributeEncoding("DW_ATE_lo_user"));
  88. EXPECT_EQ(0u, getAttributeEncoding("DW_ATE_hi_user"));
  89. }
  90. TEST(DwarfTest, VirtualityString) {
  91. EXPECT_EQ(StringRef("DW_VIRTUALITY_none"),
  92. VirtualityString(DW_VIRTUALITY_none));
  93. EXPECT_EQ(StringRef("DW_VIRTUALITY_virtual"),
  94. VirtualityString(DW_VIRTUALITY_virtual));
  95. EXPECT_EQ(StringRef("DW_VIRTUALITY_pure_virtual"),
  96. VirtualityString(DW_VIRTUALITY_pure_virtual));
  97. // DW_VIRTUALITY_max should be pure virtual.
  98. EXPECT_EQ(StringRef("DW_VIRTUALITY_pure_virtual"),
  99. VirtualityString(DW_VIRTUALITY_max));
  100. // Invalid numbers shouldn't be stringified.
  101. EXPECT_EQ(nullptr, VirtualityString(DW_VIRTUALITY_max + 1));
  102. EXPECT_EQ(nullptr, VirtualityString(DW_VIRTUALITY_max + 77));
  103. }
  104. TEST(DwarfTest, getVirtuality) {
  105. EXPECT_EQ(DW_VIRTUALITY_none, getVirtuality("DW_VIRTUALITY_none"));
  106. EXPECT_EQ(DW_VIRTUALITY_virtual, getVirtuality("DW_VIRTUALITY_virtual"));
  107. EXPECT_EQ(DW_VIRTUALITY_pure_virtual,
  108. getVirtuality("DW_VIRTUALITY_pure_virtual"));
  109. // Invalid strings.
  110. EXPECT_EQ(DW_VIRTUALITY_invalid, getVirtuality("DW_VIRTUALITY_invalid"));
  111. EXPECT_EQ(DW_VIRTUALITY_invalid, getVirtuality("DW_VIRTUALITY_max"));
  112. EXPECT_EQ(DW_VIRTUALITY_invalid, getVirtuality("something else"));
  113. }
  114. } // end namespace