mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-02-01 05:01:59 +01:00
2899786ed4
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
358 lines
11 KiB
Plaintext
358 lines
11 KiB
Plaintext
; 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: } |