; 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 pretty -native -pointers \ ; RUN: %p/../Inputs/every-pointer.pdb | FileCheck %s --check-prefix=PRETTY ; RUN: llvm-pdbutil diadump -no-ids -native -pointers \ ; RUN: %p/../Inputs/every-pointer.pdb | FileCheck %s ; PRETTY: Pointers: (29 items) ; PRETTY-NEXT: char** ; PRETTY-NEXT: struct Foo* ; PRETTY-NEXT: int& ; PRETTY-NEXT: const int* ; PRETTY-NEXT: volatile int* ; PRETTY-NEXT: const volatile int* ; PRETTY-NEXT: int* ; PRETTY-NEXT: int* ; PRETTY-NEXT: struct __vc_attributes::event_sourceAttribute* ; PRETTY-NEXT: struct __vc_attributes::helper_attributes::v1_alttypeAttribute* ; PRETTY-NEXT: struct __vc_attributes::helper_attributes::usageAttribute* ; PRETTY-NEXT: struct __vc_attributes::threadingAttribute* ; PRETTY-NEXT: struct __vc_attributes::aggregatableAttribute* ; PRETTY-NEXT: struct __vc_attributes::event_receiverAttribute* ; PRETTY-NEXT: struct __vc_attributes::moduleAttribute* ; PRETTY-NEXT: const char* ; PRETTY-NEXT: int&& ; PRETTY-NEXT: struct Foo* ; PRETTY-NEXT: void (__cdecl Foo::*)() ; PRETTY-NEXT: int Foo::* ; PRETTY-NEXT: int (__cdecl Foo::*)() ; PRETTY-NEXT: void (__cdecl *)() ; PRETTY-NEXT: unaligned struct Foo* ; PRETTY-NEXT: struct Foo* ; PRETTY-NEXT: const struct Foo* ; PRETTY-NEXT: volatile struct Foo* ; PRETTY-NEXT: const volatile struct Foo* ; PRETTY-NEXT: struct Foo&& ; PRETTY-NEXT: struct Foo ; 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 ; CHECK-NEXT: RValueReference: 0 ; CHECK-NEXT: reference: 0 ; CHECK-NEXT: restrictedType: 0 ; CHECK-NEXT: isSingleInheritance: 1 ; 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 ; CHECK-NEXT: isSingleInheritance: 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: 1 ; CHECK-NEXT: RValueReference: 0 ; CHECK-NEXT: reference: 0 ; CHECK-NEXT: restrictedType: 0 ; CHECK-NEXT: isSingleInheritance: 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: 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: }