summaryrefslogtreecommitdiffstats
path: root/llvm/test/DebugInfo/PDB
diff options
context:
space:
mode:
authorZachary Turner <zturner@google.com>2018-09-18 16:35:05 +0000
committerZachary Turner <zturner@google.com>2018-09-18 16:35:05 +0000
commitc41ce8355f88ce522dabde2b435bfe83d550a379 (patch)
treee3606b39394096113cd7d0e3c4b1c8ecd644b650 /llvm/test/DebugInfo/PDB
parentc1e2f39b3503869bd471a867c177f6486da5fee0 (diff)
downloadbcm5719-llvm-c41ce8355f88ce522dabde2b435bfe83d550a379.tar.gz
bcm5719-llvm-c41ce8355f88ce522dabde2b435bfe83d550a379.zip
[PDB] Better support for enumerating pointer types.
There were several issues with the previous implementation. 1) There were no tests. 2) We didn't support creating PDBSymbolTypePointer records for builtin types since those aren't described by LF_POINTER records. 3) We didn't support a wide enough variety of builtin types even ignoring pointers. This patch fixes all of these issues. In order to add tests, it's helpful to be able to ignore the symbol index id hierarchy because it makes the golden output from the DIA version not match our output, so I've extended the dumper to disable dumping of id fields. llvm-svn: 342493
Diffstat (limited to 'llvm/test/DebugInfo/PDB')
-rw-r--r--llvm/test/DebugInfo/PDB/Inputs/every-pointer.cpp48
-rw-r--r--llvm/test/DebugInfo/PDB/Inputs/every-pointer.pdbbin0 -> 110592 bytes
-rw-r--r--llvm/test/DebugInfo/PDB/Native/pdb-native-compilands.test6
-rw-r--r--llvm/test/DebugInfo/PDB/Native/pdb-native-enums.test100
-rw-r--r--llvm/test/DebugInfo/PDB/Native/pdb-native-pointers.test358
5 files changed, 458 insertions, 54 deletions
diff --git a/llvm/test/DebugInfo/PDB/Inputs/every-pointer.cpp b/llvm/test/DebugInfo/PDB/Inputs/every-pointer.cpp
new file mode 100644
index 00000000000..7f7fab93b82
--- /dev/null
+++ b/llvm/test/DebugInfo/PDB/Inputs/every-pointer.cpp
@@ -0,0 +1,48 @@
+// Build with "cl.exe /Zi /GR- /GX- every-pointer.cpp /link /debug /nodefaultlib /incremental:no /entry:main"
+
+#include <stdint.h>
+
+// clang-format off
+void *__purecall = 0;
+
+void __cdecl operator delete(void *,unsigned int) {}
+void __cdecl operator delete(void *,unsigned __int64) {}
+
+
+struct Foo {
+ int X = 0;
+ int func() { return 42; }
+};
+
+int *IntP = nullptr;
+Foo *FooP = nullptr;
+
+Foo F;
+
+Foo __unaligned *UFooP = &F;
+Foo * __restrict RFooP = &F;
+
+const Foo * CFooP = &F;
+volatile Foo * VFooP = &F;
+const volatile Foo * CVFooP = &F;
+
+template<typename T> void f(T t) {}
+
+int main(int argc, char **argv) {
+ f<int*>(IntP);
+ f<Foo*>(FooP);
+
+ f<Foo __unaligned *>(UFooP);
+ f<Foo *__restrict>(RFooP);
+
+ f<const Foo*>(CFooP);
+ f<volatile Foo*>(VFooP);
+ f<const volatile Foo*>(CVFooP);
+
+ f<Foo&>(F);
+ f<Foo&&>(static_cast<Foo&&>(F));
+
+ f(&Foo::X);
+ f(&Foo::func);
+ return 0;
+}
diff --git a/llvm/test/DebugInfo/PDB/Inputs/every-pointer.pdb b/llvm/test/DebugInfo/PDB/Inputs/every-pointer.pdb
new file mode 100644
index 00000000000..e911f3937aa
--- /dev/null
+++ b/llvm/test/DebugInfo/PDB/Inputs/every-pointer.pdb
Binary files differ
diff --git a/llvm/test/DebugInfo/PDB/Native/pdb-native-compilands.test b/llvm/test/DebugInfo/PDB/Native/pdb-native-compilands.test
index 7dca036f9ba..620c4f0f658 100644
--- a/llvm/test/DebugInfo/PDB/Native/pdb-native-compilands.test
+++ b/llvm/test/DebugInfo/PDB/Native/pdb-native-compilands.test
@@ -68,16 +68,14 @@ BIGREAD: * Linker *
DUMP: {
DUMP-NEXT: symIndexId: 2
-DUMP-NEXT: symTag: 2
-DUMP-NEXT: lexicalParentId: 0
+DUMP-NEXT: symTag: Compiland
DUMP-NEXT: libraryName: d:\src\llvm\test\DebugInfo\PDB\Inputs\empty.obj
DUMP-NEXT: name: d:\src\llvm\test\DebugInfo\PDB\Inputs\empty.obj
DUMP-NEXT: editAndContinueEnabled: 0
DUMP-NEXT: }
DUMP-NEXT: {
DUMP-NEXT: symIndexId: 3
-DUMP-NEXT: symTag: 2
-DUMP-NEXT: lexicalParentId: 0
+DUMP-NEXT: symTag: Compiland
DUMP-NEXT: libraryName:
DUMP-NEXT: name: * Linker *
DUMP-NEXT: editAndContinueEnabled: 0
diff --git a/llvm/test/DebugInfo/PDB/Native/pdb-native-enums.test b/llvm/test/DebugInfo/PDB/Native/pdb-native-enums.test
index 480fd03ccdb..c4569642e11 100644
--- a/llvm/test/DebugInfo/PDB/Native/pdb-native-enums.test
+++ b/llvm/test/DebugInfo/PDB/Native/pdb-native-enums.test
@@ -10,7 +10,7 @@
; RUN: llvm-pdbutil pretty -native -enums %p/../Inputs/every-enum.pdb \
; RUN: | FileCheck -check-prefix=ENUMS %s
-; RUN: llvm-pdbutil diadump -native -enums %p/../Inputs/every-enum.pdb \
+; RUN: llvm-pdbutil diadump -hierarchy -native -enums %p/../Inputs/every-enum.pdb \
; RUN: | FileCheck -check-prefix=DUMP %s
@@ -81,7 +81,7 @@ ENUMS: const volatile enum EC
DUMP: {
DUMP: symIndexId: 2
-DUMP: symTag: 12
+DUMP: symTag: Enum
DUMP: baseType: 2
DUMP: lexicalParentId: 0
DUMP: name: I8
@@ -104,7 +104,7 @@ DUMP: isValueUdt: 0
DUMP: volatileType: 0
DUMP: {
DUMP: symIndexId: 4
-DUMP: symTag: 7
+DUMP: symTag: Data
DUMP: classParentId: 2
DUMP: lexicalParentId: 0
DUMP: name: I8A
@@ -118,7 +118,7 @@ DUMP: value: -128
DUMP: }
DUMP: {
DUMP: symIndexId: 5
-DUMP: symTag: 7
+DUMP: symTag: Data
DUMP: classParentId: 2
DUMP: lexicalParentId: 0
DUMP: name: I8B
@@ -132,7 +132,7 @@ DUMP: value: 0
DUMP: }
DUMP: {
DUMP: symIndexId: 6
-DUMP: symTag: 7
+DUMP: symTag: Data
DUMP: classParentId: 2
DUMP: lexicalParentId: 0
DUMP: name: I8C
@@ -147,7 +147,7 @@ DUMP: }
DUMP: }
DUMP: {
DUMP: symIndexId: 7
-DUMP: symTag: 12
+DUMP: symTag: Enum
DUMP: baseType: 6
DUMP: lexicalParentId: 0
DUMP: name: I16
@@ -170,7 +170,7 @@ DUMP: isValueUdt: 0
DUMP: volatileType: 0
DUMP: {
DUMP: symIndexId: 9
-DUMP: symTag: 7
+DUMP: symTag: Data
DUMP: classParentId: 7
DUMP: lexicalParentId: 0
DUMP: name: I16A
@@ -184,7 +184,7 @@ DUMP: value: -32768
DUMP: }
DUMP: {
DUMP: symIndexId: 10
-DUMP: symTag: 7
+DUMP: symTag: Data
DUMP: classParentId: 7
DUMP: lexicalParentId: 0
DUMP: name: I16B
@@ -198,7 +198,7 @@ DUMP: value: 0
DUMP: }
DUMP: {
DUMP: symIndexId: 11
-DUMP: symTag: 7
+DUMP: symTag: Data
DUMP: classParentId: 7
DUMP: lexicalParentId: 0
DUMP: name: I16C
@@ -213,7 +213,7 @@ DUMP: }
DUMP: }
DUMP: {
DUMP: symIndexId: 12
-DUMP: symTag: 12
+DUMP: symTag: Enum
DUMP: baseType: 6
DUMP: lexicalParentId: 0
DUMP: name: I32
@@ -236,7 +236,7 @@ DUMP: isValueUdt: 0
DUMP: volatileType: 0
DUMP: {
DUMP: symIndexId: 14
-DUMP: symTag: 7
+DUMP: symTag: Data
DUMP: classParentId: 12
DUMP: lexicalParentId: 0
DUMP: name: I32A
@@ -250,7 +250,7 @@ DUMP: value: -2147483648
DUMP: }
DUMP: {
DUMP: symIndexId: 15
-DUMP: symTag: 7
+DUMP: symTag: Data
DUMP: classParentId: 12
DUMP: lexicalParentId: 0
DUMP: name: I32B
@@ -264,7 +264,7 @@ DUMP: value: 0
DUMP: }
DUMP: {
DUMP: symIndexId: 16
-DUMP: symTag: 7
+DUMP: symTag: Data
DUMP: classParentId: 12
DUMP: lexicalParentId: 0
DUMP: name: I32C
@@ -279,7 +279,7 @@ DUMP: }
DUMP: }
DUMP: {
DUMP: symIndexId: 17
-DUMP: symTag: 12
+DUMP: symTag: Enum
DUMP: baseType: 6
DUMP: lexicalParentId: 0
DUMP: name: I64
@@ -302,7 +302,7 @@ DUMP: isValueUdt: 0
DUMP: volatileType: 0
DUMP: {
DUMP: symIndexId: 19
-DUMP: symTag: 7
+DUMP: symTag: Data
DUMP: classParentId: 17
DUMP: lexicalParentId: 0
DUMP: name: I64A
@@ -316,7 +316,7 @@ DUMP: value: -9223372036854775808
DUMP: }
DUMP: {
DUMP: symIndexId: 20
-DUMP: symTag: 7
+DUMP: symTag: Data
DUMP: classParentId: 17
DUMP: lexicalParentId: 0
DUMP: name: I64B
@@ -330,7 +330,7 @@ DUMP: value: 0
DUMP: }
DUMP: {
DUMP: symIndexId: 21
-DUMP: symTag: 7
+DUMP: symTag: Data
DUMP: classParentId: 17
DUMP: lexicalParentId: 0
DUMP: name: I64C
@@ -345,7 +345,7 @@ DUMP: }
DUMP: }
DUMP: {
DUMP: symIndexId: 22
-DUMP: symTag: 12
+DUMP: symTag: Enum
DUMP: baseType: 2
DUMP: lexicalParentId: 0
DUMP: name: U8
@@ -368,7 +368,7 @@ DUMP: isValueUdt: 0
DUMP: volatileType: 0
DUMP: {
DUMP: symIndexId: 24
-DUMP: symTag: 7
+DUMP: symTag: Data
DUMP: classParentId: 22
DUMP: lexicalParentId: 0
DUMP: name: U8A
@@ -382,7 +382,7 @@ DUMP: value: 0
DUMP: }
DUMP: {
DUMP: symIndexId: 25
-DUMP: symTag: 7
+DUMP: symTag: Data
DUMP: classParentId: 22
DUMP: lexicalParentId: 0
DUMP: name: U8B
@@ -397,7 +397,7 @@ DUMP: }
DUMP: }
DUMP: {
DUMP: symIndexId: 26
-DUMP: symTag: 12
+DUMP: symTag: Enum
DUMP: baseType: 7
DUMP: lexicalParentId: 0
DUMP: name: U16
@@ -420,7 +420,7 @@ DUMP: isValueUdt: 0
DUMP: volatileType: 0
DUMP: {
DUMP: symIndexId: 28
-DUMP: symTag: 7
+DUMP: symTag: Data
DUMP: classParentId: 26
DUMP: lexicalParentId: 0
DUMP: name: U16A
@@ -434,7 +434,7 @@ DUMP: value: 0
DUMP: }
DUMP: {
DUMP: symIndexId: 29
-DUMP: symTag: 7
+DUMP: symTag: Data
DUMP: classParentId: 26
DUMP: lexicalParentId: 0
DUMP: name: U16B
@@ -449,7 +449,7 @@ DUMP: }
DUMP: }
DUMP: {
DUMP: symIndexId: 30
-DUMP: symTag: 12
+DUMP: symTag: Enum
DUMP: baseType: 7
DUMP: lexicalParentId: 0
DUMP: name: U32
@@ -472,7 +472,7 @@ DUMP: isValueUdt: 0
DUMP: volatileType: 0
DUMP: {
DUMP: symIndexId: 32
-DUMP: symTag: 7
+DUMP: symTag: Data
DUMP: classParentId: 30
DUMP: lexicalParentId: 0
DUMP: name: U32A
@@ -486,7 +486,7 @@ DUMP: value: 0
DUMP: }
DUMP: {
DUMP: symIndexId: 33
-DUMP: symTag: 7
+DUMP: symTag: Data
DUMP: classParentId: 30
DUMP: lexicalParentId: 0
DUMP: name: U32B
@@ -501,7 +501,7 @@ DUMP: }
DUMP: }
DUMP: {
DUMP: symIndexId: 34
-DUMP: symTag: 12
+DUMP: symTag: Enum
DUMP: baseType: 7
DUMP: lexicalParentId: 0
DUMP: name: U64
@@ -524,7 +524,7 @@ DUMP: isValueUdt: 0
DUMP: volatileType: 0
DUMP: {
DUMP: symIndexId: 36
-DUMP: symTag: 7
+DUMP: symTag: Data
DUMP: classParentId: 34
DUMP: lexicalParentId: 0
DUMP: name: U64A
@@ -538,7 +538,7 @@ DUMP: value: 0
DUMP: }
DUMP: {
DUMP: symIndexId: 37
-DUMP: symTag: 7
+DUMP: symTag: Data
DUMP: classParentId: 34
DUMP: lexicalParentId: 0
DUMP: name: U64B
@@ -553,7 +553,7 @@ DUMP: }
DUMP: }
DUMP: {
DUMP: symIndexId: 38
-DUMP: symTag: 12
+DUMP: symTag: Enum
DUMP: baseType: 7
DUMP: lexicalParentId: 0
DUMP: name: Char16
@@ -576,7 +576,7 @@ DUMP: isValueUdt: 0
DUMP: volatileType: 0
DUMP: {
DUMP: symIndexId: 39
-DUMP: symTag: 7
+DUMP: symTag: Data
DUMP: classParentId: 38
DUMP: lexicalParentId: 0
DUMP: name: C16A
@@ -590,7 +590,7 @@ DUMP: value: 97
DUMP: }
DUMP: {
DUMP: symIndexId: 40
-DUMP: symTag: 7
+DUMP: symTag: Data
DUMP: classParentId: 38
DUMP: lexicalParentId: 0
DUMP: name: C16B
@@ -605,7 +605,7 @@ DUMP: }
DUMP: }
DUMP: {
DUMP: symIndexId: 41
-DUMP: symTag: 12
+DUMP: symTag: Enum
DUMP: baseType: 7
DUMP: lexicalParentId: 0
DUMP: name: Char32
@@ -628,7 +628,7 @@ DUMP: isValueUdt: 0
DUMP: volatileType: 0
DUMP: {
DUMP: symIndexId: 43
-DUMP: symTag: 7
+DUMP: symTag: Data
DUMP: classParentId: 41
DUMP: lexicalParentId: 0
DUMP: name: C32A
@@ -642,7 +642,7 @@ DUMP: value: 97
DUMP: }
DUMP: {
DUMP: symIndexId: 44
-DUMP: symTag: 7
+DUMP: symTag: Data
DUMP: classParentId: 41
DUMP: lexicalParentId: 0
DUMP: name: C32B
@@ -657,7 +657,7 @@ DUMP: }
DUMP: }
DUMP: {
DUMP: symIndexId: 45
-DUMP: symTag: 12
+DUMP: symTag: Enum
DUMP: baseType: 7
DUMP: lexicalParentId: 0
DUMP: name: WChar
@@ -680,7 +680,7 @@ DUMP: isValueUdt: 0
DUMP: volatileType: 0
DUMP: {
DUMP: symIndexId: 46
-DUMP: symTag: 7
+DUMP: symTag: Data
DUMP: classParentId: 45
DUMP: lexicalParentId: 0
DUMP: name: WCA
@@ -694,7 +694,7 @@ DUMP: value: 97
DUMP: }
DUMP: {
DUMP: symIndexId: 47
-DUMP: symTag: 7
+DUMP: symTag: Data
DUMP: classParentId: 45
DUMP: lexicalParentId: 0
DUMP: name: WCB
@@ -709,7 +709,7 @@ DUMP: }
DUMP: }
DUMP: {
DUMP: symIndexId: 48
-DUMP: symTag: 12
+DUMP: symTag: Enum
DUMP: baseType: 10
DUMP: lexicalParentId: 0
DUMP: name: Bool
@@ -732,7 +732,7 @@ DUMP: isValueUdt: 0
DUMP: volatileType: 0
DUMP: {
DUMP: symIndexId: 50
-DUMP: symTag: 7
+DUMP: symTag: Data
DUMP: classParentId: 48
DUMP: lexicalParentId: 0
DUMP: name: BA
@@ -746,7 +746,7 @@ DUMP: value: true
DUMP: }
DUMP: {
DUMP: symIndexId: 51
-DUMP: symTag: 7
+DUMP: symTag: Data
DUMP: classParentId: 48
DUMP: lexicalParentId: 0
DUMP: name: BB
@@ -760,7 +760,7 @@ DUMP: value: false
DUMP: }
DUMP: {
DUMP: symIndexId: 113
-DUMP: symTag: 12
+DUMP: symTag: Enum
DUMP: baseType: 6
DUMP: lexicalParentId: 0
DUMP: name: EC
@@ -783,7 +783,7 @@ DUMP: isValueUdt: 0
DUMP: volatileType: 0
DUMP: {
DUMP: symIndexId: 114
-DUMP: symTag: 7
+DUMP: symTag: Data
DUMP: classParentId: 113
DUMP: lexicalParentId: 0
DUMP: name: A
@@ -797,7 +797,7 @@ DUMP: value: 1
DUMP: }
DUMP: {
DUMP: symIndexId: 115
-DUMP: symTag: 7
+DUMP: symTag: Data
DUMP: classParentId: 113
DUMP: lexicalParentId: 0
DUMP: name: B
@@ -812,7 +812,7 @@ DUMP: }
DUMP: }
DUMP: {
DUMP: symIndexId: 116
-DUMP: symTag: 12
+DUMP: symTag: Enum
DUMP: baseType: 6
DUMP: lexicalParentId: 0
DUMP: name: Struct::Nested
@@ -835,7 +835,7 @@ DUMP: isValueUdt: 0
DUMP: volatileType: 0
DUMP: {
DUMP: symIndexId: 114
-DUMP: symTag: 7
+DUMP: symTag: Data
DUMP: classParentId: 113
DUMP: lexicalParentId: 0
DUMP: name: A
@@ -849,7 +849,7 @@ DUMP: value: 1
DUMP: }
DUMP: {
DUMP: symIndexId: 115
-DUMP: symTag: 7
+DUMP: symTag: Data
DUMP: classParentId: 113
DUMP: lexicalParentId: 0
DUMP: name: B
@@ -864,7 +864,7 @@ DUMP: }
DUMP: }
DUMP: {
DUMP: symIndexId: 117
-DUMP: symTag: 12
+DUMP: symTag: Enum
DUMP: baseType: 6
DUMP: lexicalParentId: 0
DUMP: name: EC
@@ -887,7 +887,7 @@ DUMP: unalignedType: 0
DUMP: isValueUdt: 0
DUMP: volatileType: 1 {
DUMP: symIndexId: 114
-DUMP: symTag: 7
+DUMP: symTag: Data
DUMP: classParentId: 113
DUMP: lexicalParentId: 0
DUMP: name: A
@@ -901,7 +901,7 @@ DUMP: value: 1
DUMP: }
DUMP: {
DUMP: symIndexId: 115
-DUMP: symTag: 7
+DUMP: symTag: Data
DUMP: classParentId: 113
DUMP: lexicalParentId: 0
DUMP: name: B
diff --git a/llvm/test/DebugInfo/PDB/Native/pdb-native-pointers.test b/llvm/test/DebugInfo/PDB/Native/pdb-native-pointers.test
new file mode 100644
index 00000000000..5bc739b1422
--- /dev/null
+++ b/llvm/test/DebugInfo/PDB/Native/pdb-native-pointers.test
@@ -0,0 +1,358 @@
+; Test that the native PDB reader can enumerate pointer types. The output
+; being checked against is golden output generated by llvm-pdbutil without
+; the -native flag. Then we check that we generate the same output.
+
+; RUN: llvm-pdbutil diadump -no-ids -native -pointers \
+; RUN: %p/../Inputs/every-pointer.pdb | FileCheck %s
+
+; CHECK: {
+; CHECK-NEXT: symTag: PointerType
+; CHECK-NEXT: length: 8
+; CHECK-NEXT: constType: 0
+; CHECK-NEXT: isPointerToDataMember: 0
+; CHECK-NEXT: isPointerToMemberFunction: 0
+; CHECK-NEXT: RValueReference: 0
+; CHECK-NEXT: reference: 0
+; CHECK-NEXT: restrictedType: 0
+; CHECK-NEXT: unalignedType: 0
+; CHECK-NEXT: volatileType: 0
+; CHECK-NEXT: }
+; CHECK-NEXT: {
+; CHECK-NEXT: symTag: PointerType
+; CHECK-NEXT: length: 8
+; CHECK-NEXT: constType: 0
+; CHECK-NEXT: isPointerToDataMember: 0
+; CHECK-NEXT: isPointerToMemberFunction: 0
+; CHECK-NEXT: RValueReference: 0
+; CHECK-NEXT: reference: 0
+; CHECK-NEXT: restrictedType: 0
+; CHECK-NEXT: unalignedType: 0
+; CHECK-NEXT: volatileType: 0
+; CHECK-NEXT: }
+; CHECK-NEXT: {
+; CHECK-NEXT: symTag: PointerType
+; CHECK-NEXT: length: 8
+; CHECK-NEXT: constType: 0
+; CHECK-NEXT: isPointerToDataMember: 0
+; CHECK-NEXT: isPointerToMemberFunction: 0
+; CHECK-NEXT: RValueReference: 0
+; CHECK-NEXT: reference: 1
+; CHECK-NEXT: restrictedType: 0
+; CHECK-NEXT: unalignedType: 0
+; CHECK-NEXT: volatileType: 0
+; CHECK-NEXT: }
+; CHECK-NEXT: {
+; CHECK-NEXT: symTag: PointerType
+; CHECK-NEXT: length: 8
+; CHECK-NEXT: constType: 0
+; CHECK-NEXT: isPointerToDataMember: 0
+; CHECK-NEXT: isPointerToMemberFunction: 0
+; CHECK-NEXT: RValueReference: 0
+; CHECK-NEXT: reference: 0
+; CHECK-NEXT: restrictedType: 0
+; CHECK-NEXT: unalignedType: 0
+; CHECK-NEXT: volatileType: 0
+; CHECK-NEXT: }
+; CHECK-NEXT: {
+; CHECK-NEXT: symTag: PointerType
+; CHECK-NEXT: length: 8
+; CHECK-NEXT: constType: 0
+; CHECK-NEXT: isPointerToDataMember: 0
+; CHECK-NEXT: isPointerToMemberFunction: 0
+; CHECK-NEXT: RValueReference: 0
+; CHECK-NEXT: reference: 0
+; CHECK-NEXT: restrictedType: 0
+; CHECK-NEXT: unalignedType: 0
+; CHECK-NEXT: volatileType: 0
+; CHECK-NEXT: }
+; CHECK-NEXT: {
+; CHECK-NEXT: symTag: PointerType
+; CHECK-NEXT: length: 8
+; CHECK-NEXT: constType: 0
+; CHECK-NEXT: isPointerToDataMember: 0
+; CHECK-NEXT: isPointerToMemberFunction: 0
+; CHECK-NEXT: RValueReference: 0
+; CHECK-NEXT: reference: 0
+; CHECK-NEXT: restrictedType: 0
+; CHECK-NEXT: unalignedType: 0
+; CHECK-NEXT: volatileType: 0
+; CHECK-NEXT: }
+; CHECK-NEXT: {
+; CHECK-NEXT: symTag: PointerType
+; CHECK-NEXT: length: 8
+; CHECK-NEXT: constType: 0
+; CHECK-NEXT: isPointerToDataMember: 0
+; CHECK-NEXT: isPointerToMemberFunction: 0
+; CHECK-NEXT: RValueReference: 0
+; CHECK-NEXT: reference: 0
+; CHECK-NEXT: restrictedType: 0
+; CHECK-NEXT: unalignedType: 0
+; CHECK-NEXT: volatileType: 0
+; CHECK-NEXT: }
+; CHECK-NEXT: {
+; CHECK-NEXT: symTag: PointerType
+; CHECK-NEXT: length: 8
+; CHECK-NEXT: constType: 0
+; CHECK-NEXT: isPointerToDataMember: 0
+; CHECK-NEXT: isPointerToMemberFunction: 0
+; CHECK-NEXT: RValueReference: 0
+; CHECK-NEXT: reference: 0
+; CHECK-NEXT: restrictedType: 1
+; CHECK-NEXT: unalignedType: 0
+; CHECK-NEXT: volatileType: 0
+; CHECK-NEXT: }
+; CHECK-NEXT: {
+; CHECK-NEXT: symTag: PointerType
+; CHECK-NEXT: length: 8
+; CHECK-NEXT: constType: 1
+; CHECK-NEXT: isPointerToDataMember: 0
+; CHECK-NEXT: isPointerToMemberFunction: 0
+; CHECK-NEXT: RValueReference: 0
+; CHECK-NEXT: reference: 0
+; CHECK-NEXT: restrictedType: 0
+; CHECK-NEXT: unalignedType: 0
+; CHECK-NEXT: volatileType: 0
+; CHECK-NEXT: }
+; CHECK-NEXT: {
+; CHECK-NEXT: symTag: PointerType
+; CHECK-NEXT: length: 8
+; CHECK-NEXT: constType: 1
+; CHECK-NEXT: isPointerToDataMember: 0
+; CHECK-NEXT: isPointerToMemberFunction: 0
+; CHECK-NEXT: RValueReference: 0
+; CHECK-NEXT: reference: 0
+; CHECK-NEXT: restrictedType: 0
+; CHECK-NEXT: unalignedType: 0
+; CHECK-NEXT: volatileType: 0
+; CHECK-NEXT: }
+; CHECK-NEXT: {
+; CHECK-NEXT: symTag: PointerType
+; CHECK-NEXT: length: 8
+; CHECK-NEXT: constType: 1
+; CHECK-NEXT: isPointerToDataMember: 0
+; CHECK-NEXT: isPointerToMemberFunction: 0
+; CHECK-NEXT: RValueReference: 0
+; CHECK-NEXT: reference: 0
+; CHECK-NEXT: restrictedType: 0
+; CHECK-NEXT: unalignedType: 0
+; CHECK-NEXT: volatileType: 0
+; CHECK-NEXT: }
+; CHECK-NEXT: {
+; CHECK-NEXT: symTag: PointerType
+; CHECK-NEXT: length: 8
+; CHECK-NEXT: constType: 1
+; CHECK-NEXT: isPointerToDataMember: 0
+; CHECK-NEXT: isPointerToMemberFunction: 0
+; CHECK-NEXT: RValueReference: 0
+; CHECK-NEXT: reference: 0
+; CHECK-NEXT: restrictedType: 0
+; CHECK-NEXT: unalignedType: 0
+; CHECK-NEXT: volatileType: 0
+; CHECK-NEXT: }
+; CHECK-NEXT: {
+; CHECK-NEXT: symTag: PointerType
+; CHECK-NEXT: length: 8
+; CHECK-NEXT: constType: 1
+; CHECK-NEXT: isPointerToDataMember: 0
+; CHECK-NEXT: isPointerToMemberFunction: 0
+; CHECK-NEXT: RValueReference: 0
+; CHECK-NEXT: reference: 0
+; CHECK-NEXT: restrictedType: 0
+; CHECK-NEXT: unalignedType: 0
+; CHECK-NEXT: volatileType: 0
+; CHECK-NEXT: }
+; CHECK-NEXT: {
+; CHECK-NEXT: symTag: PointerType
+; CHECK-NEXT: length: 8
+; CHECK-NEXT: constType: 1
+; CHECK-NEXT: isPointerToDataMember: 0
+; CHECK-NEXT: isPointerToMemberFunction: 0
+; CHECK-NEXT: RValueReference: 0
+; CHECK-NEXT: reference: 0
+; CHECK-NEXT: restrictedType: 0
+; CHECK-NEXT: unalignedType: 0
+; CHECK-NEXT: volatileType: 0
+; CHECK-NEXT: }
+; CHECK-NEXT: {
+; CHECK-NEXT: symTag: PointerType
+; CHECK-NEXT: length: 8
+; CHECK-NEXT: constType: 1
+; CHECK-NEXT: isPointerToDataMember: 0
+; CHECK-NEXT: isPointerToMemberFunction: 0
+; CHECK-NEXT: RValueReference: 0
+; CHECK-NEXT: reference: 0
+; CHECK-NEXT: restrictedType: 0
+; CHECK-NEXT: unalignedType: 0
+; CHECK-NEXT: volatileType: 0
+; CHECK-NEXT: }
+; CHECK-NEXT: {
+; CHECK-NEXT: symTag: PointerType
+; CHECK-NEXT: length: 8
+; CHECK-NEXT: constType: 0
+; CHECK-NEXT: isPointerToDataMember: 0
+; CHECK-NEXT: isPointerToMemberFunction: 0
+; CHECK-NEXT: RValueReference: 0
+; CHECK-NEXT: reference: 0
+; CHECK-NEXT: restrictedType: 0
+; CHECK-NEXT: unalignedType: 0
+; CHECK-NEXT: volatileType: 0
+; CHECK-NEXT: }
+; CHECK-NEXT: {
+; CHECK-NEXT: symTag: PointerType
+; CHECK-NEXT: length: 8
+; CHECK-NEXT: constType: 0
+; CHECK-NEXT: isPointerToDataMember: 0
+; CHECK-NEXT: isPointerToMemberFunction: 0
+; CHECK-NEXT: RValueReference: 1
+; CHECK-NEXT: reference: 0
+; CHECK-NEXT: restrictedType: 0
+; CHECK-NEXT: unalignedType: 0
+; CHECK-NEXT: volatileType: 0
+; CHECK-NEXT: }
+; CHECK-NEXT: {
+; CHECK-NEXT: symTag: PointerType
+; CHECK-NEXT: length: 8
+; CHECK-NEXT: constType: 1
+; CHECK-NEXT: isPointerToDataMember: 0
+; CHECK-NEXT: isPointerToMemberFunction: 0
+; CHECK-NEXT: RValueReference: 0
+; CHECK-NEXT: reference: 0
+; CHECK-NEXT: restrictedType: 0
+; CHECK-NEXT: unalignedType: 0
+; CHECK-NEXT: volatileType: 0
+; CHECK-NEXT: }
+; CHECK-NEXT: {
+; CHECK-NEXT: symTag: PointerType
+; CHECK-NEXT: length: 8
+; CHECK-NEXT: constType: 0
+; CHECK-NEXT: isPointerToDataMember: 0
+; CHECK-NEXT: isPointerToMemberFunction: 1
+; FIXME: isSingleInheritance: 1 # DIA has this property for member pointers
+; CHECK-NEXT: RValueReference: 0
+; CHECK-NEXT: reference: 0
+; CHECK-NEXT: restrictedType: 0
+; CHECK-NEXT: unalignedType: 0
+; CHECK-NEXT: volatileType: 0
+; CHECK-NEXT: }
+; CHECK-NEXT: {
+; CHECK-NEXT: symTag: PointerType
+; CHECK-NEXT: length: 4
+; CHECK-NEXT: constType: 0
+; CHECK-NEXT: isPointerToDataMember: 1
+; CHECK-NEXT: isPointerToMemberFunction: 0
+; CHECK-NEXT: RValueReference: 0
+; CHECK-NEXT: reference: 0
+; CHECK-NEXT: restrictedType: 0
+; FIXME: isSingleInheritance: 1 # DIA has this property for member pointers
+; CHECK-NEXT: unalignedType: 0
+; CHECK-NEXT: volatileType: 0
+; CHECK-NEXT: }
+; CHECK-NEXT: {
+; CHECK-NEXT: symTag: PointerType
+; CHECK-NEXT: length: 8
+; CHECK-NEXT: constType: 0
+; CHECK-NEXT: isPointerToDataMember: 0
+; CHECK-NEXT: isPointerToMemberFunction: 1
+; CHECK-NEXT: RValueReference: 0
+; CHECK-NEXT: reference: 0
+; CHECK-NEXT: restrictedType: 0
+; FIXME: isSingleInheritance: 1 # DIA has this property for member pointers
+; CHECK-NEXT: unalignedType: 0
+; CHECK-NEXT: volatileType: 0
+; CHECK-NEXT: }
+; CHECK-NEXT: {
+; CHECK-NEXT: symTag: PointerType
+; CHECK-NEXT: length: 8
+; CHECK-NEXT: constType: 0
+; CHECK-NEXT: isPointerToDataMember: 0
+; CHECK-NEXT: isPointerToMemberFunction: 0
+; CHECK-NEXT: RValueReference: 0
+; CHECK-NEXT: reference: 0
+; CHECK-NEXT: restrictedType: 0
+; CHECK-NEXT: unalignedType: 0
+; CHECK-NEXT: volatileType: 0
+; CHECK-NEXT: }
+; CHECK-NEXT: {
+; CHECK-NEXT: symTag: PointerType
+; CHECK-NEXT: length: 8
+; CHECK-NEXT: constType: 0
+; CHECK-NEXT: isPointerToDataMember: 0
+; CHECK-NEXT: isPointerToMemberFunction: 0
+; CHECK-NEXT: RValueReference: 0
+; CHECK-NEXT: reference: 0
+; CHECK-NEXT: restrictedType: 0
+; CHECK-NEXT: unalignedType: 0
+; CHECK-NEXT: volatileType: 0
+; CHECK-NEXT: }
+; CHECK-NEXT: {
+; CHECK-NEXT: symTag: PointerType
+; CHECK-NEXT: length: 8
+; CHECK-NEXT: constType: 0
+; CHECK-NEXT: isPointerToDataMember: 0
+; CHECK-NEXT: isPointerToMemberFunction: 0
+; CHECK-NEXT: RValueReference: 0
+; CHECK-NEXT: reference: 0
+; CHECK-NEXT: restrictedType: 1
+; CHECK-NEXT: unalignedType: 0
+; CHECK-NEXT: volatileType: 0
+; CHECK-NEXT: }
+; CHECK-NEXT: {
+; CHECK-NEXT: symTag: PointerType
+; CHECK-NEXT: length: 8
+; CHECK-NEXT: constType: 0
+; CHECK-NEXT: isPointerToDataMember: 0
+; CHECK-NEXT: isPointerToMemberFunction: 0
+; CHECK-NEXT: RValueReference: 0
+; CHECK-NEXT: reference: 0
+; CHECK-NEXT: restrictedType: 0
+; CHECK-NEXT: unalignedType: 0
+; CHECK-NEXT: volatileType: 0
+; CHECK-NEXT: }
+; CHECK-NEXT: {
+; CHECK-NEXT: symTag: PointerType
+; CHECK-NEXT: length: 8
+; CHECK-NEXT: constType: 0
+; CHECK-NEXT: isPointerToDataMember: 0
+; CHECK-NEXT: isPointerToMemberFunction: 0
+; CHECK-NEXT: RValueReference: 0
+; CHECK-NEXT: reference: 0
+; CHECK-NEXT: restrictedType: 0
+; CHECK-NEXT: unalignedType: 0
+; CHECK-NEXT: volatileType: 0
+; CHECK-NEXT: }
+; CHECK-NEXT: {
+; CHECK-NEXT: symTag: PointerType
+; CHECK-NEXT: length: 8
+; CHECK-NEXT: constType: 0
+; CHECK-NEXT: isPointerToDataMember: 0
+; CHECK-NEXT: isPointerToMemberFunction: 0
+; CHECK-NEXT: RValueReference: 0
+; CHECK-NEXT: reference: 0
+; CHECK-NEXT: restrictedType: 0
+; CHECK-NEXT: unalignedType: 0
+; CHECK-NEXT: volatileType: 0
+; CHECK-NEXT: }
+; CHECK-NEXT: {
+; CHECK-NEXT: symTag: PointerType
+; CHECK-NEXT: length: 8
+; CHECK-NEXT: constType: 0
+; CHECK-NEXT: isPointerToDataMember: 0
+; CHECK-NEXT: isPointerToMemberFunction: 0
+; CHECK-NEXT: RValueReference: 1
+; CHECK-NEXT: reference: 0
+; CHECK-NEXT: restrictedType: 0
+; CHECK-NEXT: unalignedType: 0
+; CHECK-NEXT: volatileType: 0
+; CHECK-NEXT: }
+; CHECK-NEXT: {
+; CHECK-NEXT: symTag: PointerType
+; CHECK-NEXT: length: 8
+; CHECK-NEXT: constType: 0
+; CHECK-NEXT: isPointerToDataMember: 0
+; CHECK-NEXT: isPointerToMemberFunction: 0
+; CHECK-NEXT: RValueReference: 0
+; CHECK-NEXT: reference: 1
+; CHECK-NEXT: restrictedType: 0
+; CHECK-NEXT: unalignedType: 0
+; CHECK-NEXT: volatileType: 0
+; CHECK-NEXT: } \ No newline at end of file
OpenPOWER on IntegriCloud