Support: Use Dwarf.def for DW_VIRTUALITY, NFC
authorDuncan P. N. Exon Smith <dexonsmith@apple.com>
Sat, 7 Feb 2015 00:36:23 +0000 (00:36 +0000)
committerDuncan P. N. Exon Smith <dexonsmith@apple.com>
Sat, 7 Feb 2015 00:36:23 +0000 (00:36 +0000)
Use definition file for `DW_VIRTUALITY_*`.  Add a `DW_VIRTUALITY_max`
both for ease of testing and for future use by the `LLParser`.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@228473 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/Support/Dwarf.def
include/llvm/Support/Dwarf.h
lib/Support/Dwarf.cpp
unittests/Support/DwarfTest.cpp

index 9c788298cf7511cf10e201668e1299cf9609245e..b859f198ea2d21cb37914523ea62dfd121b18ab8 100644 (file)
@@ -12,7 +12,8 @@
 //===----------------------------------------------------------------------===//
 
 // TODO: Add other DW-based macros.
-#if !(defined HANDLE_DW_TAG || defined HANDLE_DW_LANG || defined HANDLE_DW_ATE)
+#if !(defined HANDLE_DW_TAG || defined HANDLE_DW_LANG ||                       \
+      defined HANDLE_DW_ATE || defined HANDLE_DW_VIRTUALITY)
 #error "Missing macro definition of HANDLE_DW*"
 #endif
 
 #define HANDLE_DW_ATE(ID, NAME)
 #endif
 
+#ifndef HANDLE_DW_VIRTUALITY
+#define HANDLE_DW_VIRTUALITY(ID, NAME)
+#endif
+
 HANDLE_DW_TAG(0x0001, array_type)
 HANDLE_DW_TAG(0x0002, class_type)
 HANDLE_DW_TAG(0x0003, entry_point)
@@ -159,6 +164,12 @@ HANDLE_DW_ATE(0x0e, unsigned_fixed)
 HANDLE_DW_ATE(0x0f, decimal_float)
 HANDLE_DW_ATE(0x10, UTF)
 
+// DWARF virtuality codes.
+HANDLE_DW_VIRTUALITY(0x00, none)
+HANDLE_DW_VIRTUALITY(0x01, virtual)
+HANDLE_DW_VIRTUALITY(0x02, pure_virtual)
+
 #undef HANDLE_DW_TAG
 #undef HANDLE_DW_LANG
 #undef HANDLE_DW_ATE
+#undef HANDLE_DW_VIRTUALITY
index b1bcb160fb6a7a5b9d09404985af3ee003a29022..fc99a4b32369c32a7434e7a905ed70c9a13e0b3d 100644 (file)
@@ -494,10 +494,9 @@ enum VisibilityAttribute {
 };
 
 enum VirtualityAttribute {
-  // Virtuality codes
-  DW_VIRTUALITY_none = 0x00,
-  DW_VIRTUALITY_virtual = 0x01,
-  DW_VIRTUALITY_pure_virtual = 0x02
+#define HANDLE_DW_VIRTUALITY(ID, NAME) DW_VIRTUALITY_##NAME = ID,
+#include "llvm/Support/Dwarf.def"
+  DW_VIRTUALITY_max = 0x02
 };
 
 enum SourceLanguage {
index af6db59302cdf263bdd7c1b78194ea0ad180b83d..866d7e55c85f4fc58983e057f276cfe7f55a8606 100644 (file)
@@ -464,11 +464,13 @@ const char *llvm::dwarf::VisibilityString(unsigned Visibility) {
 
 const char *llvm::dwarf::VirtualityString(unsigned Virtuality) {
   switch (Virtuality) {
-  case DW_VIRTUALITY_none:               return "DW_VIRTUALITY_none";
-  case DW_VIRTUALITY_virtual:            return "DW_VIRTUALITY_virtual";
-  case DW_VIRTUALITY_pure_virtual:       return "DW_VIRTUALITY_pure_virtual";
+  default:
+    return nullptr;
+#define HANDLE_DW_VIRTUALITY(ID, NAME)                                         \
+  case DW_VIRTUALITY_##NAME:                                                   \
+    return "DW_VIRTUALITY_" #NAME;
+#include "llvm/Support/Dwarf.def"
   }
-  return nullptr;
 }
 
 const char *llvm::dwarf::LanguageString(unsigned Language) {
index 25f5574ad7b9c694a1b62a8b8afffe51e6d10bab..38a179f7929772f8abf0f7fe2625897f3b15f21c 100644 (file)
@@ -95,4 +95,18 @@ TEST(DwarfTest, getAttributeEncoding) {
   EXPECT_EQ(0u, getAttributeEncoding("DW_ATE_hi_user"));
 }
 
+TEST(DwarfTest, VirtualityString) {
+  EXPECT_EQ("DW_VIRTUALITY_none", VirtualityString(DW_VIRTUALITY_none));
+  EXPECT_EQ("DW_VIRTUALITY_virtual", VirtualityString(DW_VIRTUALITY_virtual));
+  EXPECT_EQ("DW_VIRTUALITY_pure_virtual",
+            VirtualityString(DW_VIRTUALITY_pure_virtual));
+
+  // DW_VIRTUALITY_max should be pure virtual.
+  EXPECT_EQ("DW_VIRTUALITY_pure_virtual", VirtualityString(DW_VIRTUALITY_max));
+
+  // Invalid numbers shouldn't be stringified.
+  EXPECT_EQ(nullptr, VirtualityString(DW_VIRTUALITY_max + 1));
+  EXPECT_EQ(nullptr, VirtualityString(DW_VIRTUALITY_max + 77));
+}
+
 } // end namespace