summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lldb/lit/SymbolFile/NativePDB/Inputs/nested-types.lldbinit1
-rw-r--r--lldb/lit/SymbolFile/NativePDB/nested-types.cpp17
-rw-r--r--lldb/source/Plugins/SymbolFile/NativePDB/PdbAstBuilder.cpp5
3 files changed, 19 insertions, 4 deletions
diff --git a/lldb/lit/SymbolFile/NativePDB/Inputs/nested-types.lldbinit b/lldb/lit/SymbolFile/NativePDB/Inputs/nested-types.lldbinit
index 21c3001e3a1..466df81fc42 100644
--- a/lldb/lit/SymbolFile/NativePDB/Inputs/nested-types.lldbinit
+++ b/lldb/lit/SymbolFile/NativePDB/Inputs/nested-types.lldbinit
@@ -8,5 +8,6 @@ target variable -T GlobalE
target variable -T GlobalF
target variable -T GlobalG
target variable -T GlobalH
+target variable -T GlobalEnum
target modules dump ast
diff --git a/lldb/lit/SymbolFile/NativePDB/nested-types.cpp b/lldb/lit/SymbolFile/NativePDB/nested-types.cpp
index 5693f7f320f..eb2b3ec7e34 100644
--- a/lldb/lit/SymbolFile/NativePDB/nested-types.cpp
+++ b/lldb/lit/SymbolFile/NativePDB/nested-types.cpp
@@ -11,6 +11,11 @@ struct S {
int A = 0;
int B = 1;
};
+
+ enum class NestedEnum {
+ EnumValue1 = 0,
+ EnumValue2 = 1,
+ };
int C = 2;
int D = 3;
using VoidPtrT = void *;
@@ -70,6 +75,7 @@ constexpr T::U GlobalE;
constexpr U<int> GlobalF;
constexpr U<int>::V<int> GlobalG;
constexpr U<int>::W GlobalH;
+constexpr S::NestedEnum GlobalEnum = S::NestedEnum::EnumValue1;
int main(int argc, char **argv) {
@@ -113,6 +119,8 @@ int main(int argc, char **argv) {
// CHECK: (int) I = 8
// CHECK: (int) J = 9
// CHECK: }
+// CHECK: (lldb) target variable -T GlobalEnum
+// CHECK: (const S::NestedEnum) GlobalEnum = EnumValue1
// CHECK: (lldb) target modules dump ast
// CHECK: Dumping clang ast for 1 modules.
// CHECK: TranslationUnitDecl {{.*}}
@@ -120,9 +128,12 @@ int main(int argc, char **argv) {
// CHECK: | |-FieldDecl {{.*}} C 'int'
// CHECK: | |-FieldDecl {{.*}} D 'int'
// CHECK: | |-FieldDecl {{.*}} DD 'void *'
-// CHECK: | `-CXXRecordDecl {{.*}} struct NestedStruct definition
-// CHECK: | |-FieldDecl {{.*}} A 'int'
-// CHECK: | `-FieldDecl {{.*}} B 'int'
+// CHECK: | |-CXXRecordDecl {{.*}} struct NestedStruct definition
+// CHECK: | | |-FieldDecl {{.*}} A 'int'
+// CHECK: | | `-FieldDecl {{.*}} B 'int'
+// CHECK: | `-EnumDecl {{.*}} NestedEnum
+// CHECK: | |-EnumConstantDecl {{.*}} EnumValue1 'S::NestedEnum'
+// CHECK: | `-EnumConstantDecl {{.*}} EnumValue2 'S::NestedEnum'
// CHECK: |-CXXRecordDecl {{.*}} struct T definition
// CHECK: | |-FieldDecl {{.*}} NT 'int'
// CHECK: | |-CXXRecordDecl {{.*}} struct NestedStruct definition
diff --git a/lldb/source/Plugins/SymbolFile/NativePDB/PdbAstBuilder.cpp b/lldb/source/Plugins/SymbolFile/NativePDB/PdbAstBuilder.cpp
index 956e56f504d..778c4021962 100644
--- a/lldb/source/Plugins/SymbolFile/NativePDB/PdbAstBuilder.cpp
+++ b/lldb/source/Plugins/SymbolFile/NativePDB/PdbAstBuilder.cpp
@@ -188,7 +188,10 @@ GetNestedTagRecord(const NestedTypeRecord &Record, const CVTagRecord &parent,
// inner tag type is not necessarily the same as the outer tag type, re-write
// it to match the inner tag type.
qname[3] = child.asTag().getUniqueName()[3];
- std::string piece = Record.Name;
+ std::string piece;
+ if (qname[3] == 'W')
+ piece = "4";
+ piece += Record.Name;
piece.push_back('@');
qname.insert(4, std::move(piece));
if (qname != child.asTag().UniqueName)
OpenPOWER on IntegriCloud