# REQUIRES: x86
# RUN: llvm-mc -filetype=obj -triple=x86_64-pc-windows-msvc < %s > %t.obj
# RUN: lld-link /DEBUG:FULL /nodefaultlib /entry:main %t.obj /PDB:%t.pdb /OUT:%t.exe
# RUN: llvm-pdbutil dump -types -globals -symbols -modi=0 %t.pdb | FileCheck %s

# CHECK:                               Types (TPI Stream)
# CHECK-NEXT: ============================================================
# CHECK:      0x1003 | LF_STRUCTURE [size = 44] `Struct`
# CHECK-NEXT:          unique name: `.?AUStruct@@`
# CHECK-NEXT:          vtable: <no type>, base list: <no type>, field list: <no type>
# CHECK-NEXT:          options: forward ref (-> 0x1006) | has unique name, sizeof 0
# CHECK-NEXT: 0x1004 | LF_POINTER [size = 12]
# CHECK-NEXT:          referent = 0x1003, mode = pointer, opts = None, kind = ptr64
# CHECK:      0x1006 | LF_STRUCTURE [size = 44] `Struct`
# CHECK-NEXT:          unique name: `.?AUStruct@@`
# CHECK-NEXT:          vtable: <no type>, base list: <no type>, field list: 0x1005
# CHECK-NEXT:          options: has unique name, sizeof 4
# CHECK:                               Global Symbols
# CHECK-NEXT: ============================================================
# CHECK:      {{.*}} | S_UDT [size = 24] `StructTypedef`
# CHECK:               original type = 0x1003
# CHECK:      {{.*}} | S_UDT [size = 16] `Struct`
# CHECK:               original type = 0x1006
# CHECK:      {{.*}} | S_UDT [size = 20] `IntTypedef`
# CHECK:               original type = 0x0074 (int)
# CHECK:                               Symbols
# CHECK-NEXT: ============================================================
# CHECK:      {{.*}} | S_GPROC32 [size = 44] `main`
# CHECK-NEXT:          parent = 0, end = 252, addr = 0001:0000, code size = 52
# CHECK-NEXT:          type = `0x1002 (int (int, char**))`, debug start = 0, debug end = 0, flags = none
# CHECK-NOT:  {{.*}} | S_END
# CHECK:      {{.*}} | S_UDT [size = 28] `main::LocalTypedef`
# CHECK-NEXT:          original type = 0x1004
# CHECK:      {{.*}} | S_END [size = 4]

# source code to re-generate:
# clang-cl /Z7 /GS- /GR- /c foo.cpp
#
# struct Struct {
#   int x;
# };
#
# using IntTypedef = int;
# using StructTypedef = Struct;
# Struct S;
# StructTypedef SS;
# IntTypedef I;
#
# int main(int argc, char **argv) {
#   using LocalTypedef = Struct*;
#   LocalTypedef SPtr;
#   return I + S.x + SS.x + SPtr->x;
# }

	.text
	.def	 @feat.00;
	.scl	3;
	.type	0;
	.endef
	.globl	@feat.00
.set @feat.00, 0
	.intel_syntax noprefix
	.def	 main;
	.scl	2;
	.type	32;
	.endef
	.globl	main                    # -- Begin function main
	.p2align	4, 0x90
main:                                   # @main
.Lfunc_begin0:
	.cv_func_id 0
	.cv_file	1 "D:\\src\\llvmbuild\\cl\\Debug\\x64\\foo.cpp" "2B62298EE3EEF94E1D81FDFE18BD46A6" 1
	.cv_loc	0 1 12 0                # foo.cpp:12:0
.seh_proc main
# %bb.0:                                # %entry
	sub	rsp, 32
	.seh_stackalloc 32
	.seh_endprologue
	mov	dword ptr [rsp + 28], 0
	mov	qword ptr [rsp + 16], rdx
	mov	dword ptr [rsp + 12], ecx
.Ltmp0:
	.cv_loc	0 1 15 0                # foo.cpp:15:0
	mov	ecx, dword ptr [rip + "?I@@3HA"]
	add	ecx, dword ptr [rip + "?S@@3UStruct@@A"]
	add	ecx, dword ptr [rip + "?SS@@3UStruct@@A"]
	mov	rdx, qword ptr [rsp]
	add	ecx, dword ptr [rdx]
	mov	eax, ecx
	add	rsp, 32
	ret
.Ltmp1:
.Lfunc_end0:
	.seh_handlerdata
	.text
	.seh_endproc
                                        # -- End function
	.bss
	.globl	"?S@@3UStruct@@A"       # @"?S@@3UStruct@@A"
	.p2align	2
"?S@@3UStruct@@A":
	.zero	4

	.globl	"?SS@@3UStruct@@A"      # @"?SS@@3UStruct@@A"
	.p2align	2
"?SS@@3UStruct@@A":
	.zero	4

	.globl	"?I@@3HA"               # @"?I@@3HA"
	.p2align	2
"?I@@3HA":
	.long	0                       # 0x0

	.section	.drectve,"yn"
	.ascii	" /DEFAULTLIB:libcmt.lib"
	.ascii	" /DEFAULTLIB:oldnames.lib"
	.section	.debug$S,"dr"
	.p2align	2
	.long	4                       # Debug section magic
	.long	241
	.long	.Ltmp3-.Ltmp2           # Subsection size
.Ltmp2:
	.short	.Ltmp5-.Ltmp4           # Record length
.Ltmp4:
	.short	4412                    # Record kind: S_COMPILE3
	.long	1                       # Flags and language
	.short	208                     # CPUType
	.short	8                       # Frontend version
	.short	0
	.short	0
	.short	0
	.short	8000                    # Backend version
	.short	0
	.short	0
	.short	0
	.asciz	"clang version 8.0.0 "  # Null-terminated compiler version string
.Ltmp5:
.Ltmp3:
	.p2align	2
	.long	241                     # Symbol subsection for main
	.long	.Ltmp7-.Ltmp6           # Subsection size
.Ltmp6:
	.short	.Ltmp9-.Ltmp8           # Record length
.Ltmp8:
	.short	4423                    # Record kind: S_GPROC32_ID
	.long	0                       # PtrParent
	.long	0                       # PtrEnd
	.long	0                       # PtrNext
	.long	.Lfunc_end0-main        # Code size
	.long	0                       # Offset after prologue
	.long	0                       # Offset before epilogue
	.long	4099                    # Function type index
	.secrel32	main            # Function section relative address
	.secidx	main                    # Function section index
	.byte	0                       # Flags
	.asciz	"main"                  # Function name
.Ltmp9:
	.short	.Ltmp11-.Ltmp10         # Record length
.Ltmp10:
	.short	4114                    # Record kind: S_FRAMEPROC
	.long	32                      # FrameSize
	.long	0                       # Padding
	.long	0                       # Offset of padding
	.long	0                       # Bytes of callee saved registers
	.long	0                       # Exception handler offset
	.short	0                       # Exception handler section
	.long	81920                   # Flags (defines frame register)
.Ltmp11:
	.short	.Ltmp13-.Ltmp12         # Record length
.Ltmp12:
	.short	4414                    # Record kind: S_LOCAL
	.long	116                     # TypeIndex
	.short	1                       # Flags
	.asciz	"argc"
.Ltmp13:
	.cv_def_range	 .Ltmp0 .Ltmp1, frame_ptr_rel, 12
	.short	.Ltmp15-.Ltmp14         # Record length
.Ltmp14:
	.short	4414                    # Record kind: S_LOCAL
	.long	4096                    # TypeIndex
	.short	1                       # Flags
	.asciz	"argv"
.Ltmp15:
	.cv_def_range	 .Ltmp0 .Ltmp1, frame_ptr_rel, 16
	.short	.Ltmp17-.Ltmp16         # Record length
.Ltmp16:
	.short	4414                    # Record kind: S_LOCAL
	.long	4101                    # TypeIndex
	.short	0                       # Flags
	.asciz	"SPtr"
.Ltmp17:
	.cv_def_range	 .Ltmp0 .Ltmp1, frame_ptr_rel, 0
	.short	.Ltmp19-.Ltmp18         # Record length
.Ltmp18:
	.short	4360                    # Record kind: S_UDT
	.long	4101                    # Type
	.asciz	"main::LocalTypedef"
.Ltmp19:
	.short	2                       # Record length
	.short	4431                    # Record kind: S_PROC_ID_END
.Ltmp7:
	.p2align	2
	.cv_linetable	0, main, .Lfunc_end0
	.long	241                     # Symbol subsection for globals
	.long	.Ltmp21-.Ltmp20         # Subsection size
.Ltmp20:
	.short	.Ltmp23-.Ltmp22         # Record length
.Ltmp22:
	.short	4365                    # Record kind: S_GDATA32
	.long	4103                    # Type
	.secrel32	"?S@@3UStruct@@A" # DataOffset
	.secidx	"?S@@3UStruct@@A"       # Segment
	.asciz	"S"                     # Name
.Ltmp23:
	.short	.Ltmp25-.Ltmp24         # Record length
.Ltmp24:
	.short	4365                    # Record kind: S_GDATA32
	.long	4100                    # Type
	.secrel32	"?SS@@3UStruct@@A" # DataOffset
	.secidx	"?SS@@3UStruct@@A"      # Segment
	.asciz	"SS"                    # Name
.Ltmp25:
	.short	.Ltmp27-.Ltmp26         # Record length
.Ltmp26:
	.short	4365                    # Record kind: S_GDATA32
	.long	116                     # Type
	.secrel32	"?I@@3HA"       # DataOffset
	.secidx	"?I@@3HA"               # Segment
	.asciz	"I"                     # Name
.Ltmp27:
.Ltmp21:
	.p2align	2
	.long	241
	.long	.Ltmp29-.Ltmp28         # Subsection size
.Ltmp28:
	.short	.Ltmp31-.Ltmp30         # Record length
.Ltmp30:
	.short	4360                    # Record kind: S_UDT
	.long	4103                    # Type
	.asciz	"Struct"
.Ltmp31:
	.short	.Ltmp33-.Ltmp32         # Record length
.Ltmp32:
	.short	4360                    # Record kind: S_UDT
	.long	4100                    # Type
	.asciz	"StructTypedef"
.Ltmp33:
	.short	.Ltmp35-.Ltmp34         # Record length
.Ltmp34:
	.short	4360                    # Record kind: S_UDT
	.long	116                     # Type
	.asciz	"IntTypedef"
.Ltmp35:
.Ltmp29:
	.p2align	2
	.cv_filechecksums               # File index to string table offset subsection
	.cv_stringtable                 # String table
	.long	241
	.long	.Ltmp37-.Ltmp36         # Subsection size
.Ltmp36:
	.short	6                       # Record length
	.short	4428                    # Record kind: S_BUILDINFO
	.long	4108                    # LF_BUILDINFO index
.Ltmp37:
	.p2align	2
	.section	.debug$T,"dr"
	.p2align	2
	.long	4                       # Debug section magic
	# Pointer (0x1000) {
	#   TypeLeafKind: LF_POINTER (0x1002)
	#   PointeeType: char* (0x670)
	#   PtrType: Near64 (0xC)
	#   PtrMode: Pointer (0x0)
	#   IsFlat: 0
	#   IsConst: 0
	#   IsVolatile: 0
	#   IsUnaligned: 0
	#   IsRestrict: 0
	#   IsThisPtr&: 0
	#   IsThisPtr&&: 0
	#   SizeOf: 8
	# }
	.byte	0x0a, 0x00, 0x02, 0x10
	.byte	0x70, 0x06, 0x00, 0x00
	.byte	0x0c, 0x00, 0x01, 0x00
	# ArgList (0x1001) {
	#   TypeLeafKind: LF_ARGLIST (0x1201)
	#   NumArgs: 2
	#   Arguments [
	#     ArgType: int (0x74)
	#     ArgType: char** (0x1000)
	#   ]
	# }
	.byte	0x0e, 0x00, 0x01, 0x12
	.byte	0x02, 0x00, 0x00, 0x00
	.byte	0x74, 0x00, 0x00, 0x00
	.byte	0x00, 0x10, 0x00, 0x00
	# Procedure (0x1002) {
	#   TypeLeafKind: LF_PROCEDURE (0x1008)
	#   ReturnType: int (0x74)
	#   CallingConvention: NearC (0x0)
	#   FunctionOptions [ (0x0)
	#   ]
	#   NumParameters: 2
	#   ArgListType: (int, char**) (0x1001)
	# }
	.byte	0x0e, 0x00, 0x08, 0x10
	.byte	0x74, 0x00, 0x00, 0x00
	.byte	0x00, 0x00, 0x02, 0x00
	.byte	0x01, 0x10, 0x00, 0x00
	# FuncId (0x1003) {
	#   TypeLeafKind: LF_FUNC_ID (0x1601)
	#   ParentScope: 0x0
	#   FunctionType: int (int, char**) (0x1002)
	#   Name: main
	# }
	.byte	0x12, 0x00, 0x01, 0x16
	.byte	0x00, 0x00, 0x00, 0x00
	.byte	0x02, 0x10, 0x00, 0x00
	.byte	0x6d, 0x61, 0x69, 0x6e
	.byte	0x00, 0xf3, 0xf2, 0xf1
	# Struct (0x1004) {
	#   TypeLeafKind: LF_STRUCTURE (0x1505)
	#   MemberCount: 0
	#   Properties [ (0x280)
	#     ForwardReference (0x80)
	#     HasUniqueName (0x200)
	#   ]
	#   FieldList: 0x0
	#   DerivedFrom: 0x0
	#   VShape: 0x0
	#   SizeOf: 0
	#   Name: Struct
	#   LinkageName: .?AUStruct@@
	# }
	.byte	0x2a, 0x00, 0x05, 0x15
	.byte	0x00, 0x00, 0x80, 0x02
	.byte	0x00, 0x00, 0x00, 0x00
	.byte	0x00, 0x00, 0x00, 0x00
	.byte	0x00, 0x00, 0x00, 0x00
	.byte	0x00, 0x00, 0x53, 0x74
	.byte	0x72, 0x75, 0x63, 0x74
	.byte	0x00, 0x2e, 0x3f, 0x41
	.byte	0x55, 0x53, 0x74, 0x72
	.byte	0x75, 0x63, 0x74, 0x40
	.byte	0x40, 0x00, 0xf2, 0xf1
	# Pointer (0x1005) {
	#   TypeLeafKind: LF_POINTER (0x1002)
	#   PointeeType: Struct (0x1004)
	#   PtrType: Near64 (0xC)
	#   PtrMode: Pointer (0x0)
	#   IsFlat: 0
	#   IsConst: 0
	#   IsVolatile: 0
	#   IsUnaligned: 0
	#   IsRestrict: 0
	#   IsThisPtr&: 0
	#   IsThisPtr&&: 0
	#   SizeOf: 8
	# }
	.byte	0x0a, 0x00, 0x02, 0x10
	.byte	0x04, 0x10, 0x00, 0x00
	.byte	0x0c, 0x00, 0x01, 0x00
	# FieldList (0x1006) {
	#   TypeLeafKind: LF_FIELDLIST (0x1203)
	#   DataMember {
	#     TypeLeafKind: LF_MEMBER (0x150D)
	#     AccessSpecifier: Public (0x3)
	#     Type: int (0x74)
	#     FieldOffset: 0x0
	#     Name: x
	#   }
	# }
	.byte	0x0e, 0x00, 0x03, 0x12
	.byte	0x0d, 0x15, 0x03, 0x00
	.byte	0x74, 0x00, 0x00, 0x00
	.byte	0x00, 0x00, 0x78, 0x00
	# Struct (0x1007) {
	#   TypeLeafKind: LF_STRUCTURE (0x1505)
	#   MemberCount: 1
	#   Properties [ (0x200)
	#     HasUniqueName (0x200)
	#   ]
	#   FieldList: <field list> (0x1006)
	#   DerivedFrom: 0x0
	#   VShape: 0x0
	#   SizeOf: 4
	#   Name: Struct
	#   LinkageName: .?AUStruct@@
	# }
	.byte	0x2a, 0x00, 0x05, 0x15
	.byte	0x01, 0x00, 0x00, 0x02
	.byte	0x06, 0x10, 0x00, 0x00
	.byte	0x00, 0x00, 0x00, 0x00
	.byte	0x00, 0x00, 0x00, 0x00
	.byte	0x04, 0x00, 0x53, 0x74
	.byte	0x72, 0x75, 0x63, 0x74
	.byte	0x00, 0x2e, 0x3f, 0x41
	.byte	0x55, 0x53, 0x74, 0x72
	.byte	0x75, 0x63, 0x74, 0x40
	.byte	0x40, 0x00, 0xf2, 0xf1
	# StringId (0x1008) {
	#   TypeLeafKind: LF_STRING_ID (0x1605)
	#   Id: 0x0
	#   StringData: D:\src\llvmbuild\cl\Debug\x64\foo.cpp
	# }
	.byte	0x2e, 0x00, 0x05, 0x16
	.byte	0x00, 0x00, 0x00, 0x00
	.byte	0x44, 0x3a, 0x5c, 0x73
	.byte	0x72, 0x63, 0x5c, 0x6c
	.byte	0x6c, 0x76, 0x6d, 0x62
	.byte	0x75, 0x69, 0x6c, 0x64
	.byte	0x5c, 0x63, 0x6c, 0x5c
	.byte	0x44, 0x65, 0x62, 0x75
	.byte	0x67, 0x5c, 0x78, 0x36
	.byte	0x34, 0x5c, 0x66, 0x6f
	.byte	0x6f, 0x2e, 0x63, 0x70
	.byte	0x70, 0x00, 0xf2, 0xf1
	# UdtSourceLine (0x1009) {
	#   TypeLeafKind: LF_UDT_SRC_LINE (0x1606)
	#   UDT: Struct (0x1007)
	#   SourceFile: D:\src\llvmbuild\cl\Debug\x64\foo.cpp (0x1008)
	#   LineNumber: 1
	# }
	.byte	0x0e, 0x00, 0x06, 0x16
	.byte	0x07, 0x10, 0x00, 0x00
	.byte	0x08, 0x10, 0x00, 0x00
	.byte	0x01, 0x00, 0x00, 0x00
	# StringId (0x100A) {
	#   TypeLeafKind: LF_STRING_ID (0x1605)
	#   Id: 0x0
	#   StringData: D:\\src\\llvmbuild\\cl\\Debug\\x64
	# }
	.byte	0x2a, 0x00, 0x05, 0x16
	.byte	0x00, 0x00, 0x00, 0x00
	.byte	0x44, 0x3a, 0x5c, 0x5c
	.byte	0x73, 0x72, 0x63, 0x5c
	.byte	0x5c, 0x6c, 0x6c, 0x76
	.byte	0x6d, 0x62, 0x75, 0x69
	.byte	0x6c, 0x64, 0x5c, 0x5c
	.byte	0x63, 0x6c, 0x5c, 0x5c
	.byte	0x44, 0x65, 0x62, 0x75
	.byte	0x67, 0x5c, 0x5c, 0x78
	.byte	0x36, 0x34, 0x00, 0xf1
	# StringId (0x100B) {
	#   TypeLeafKind: LF_STRING_ID (0x1605)
	#   Id: 0x0
	#   StringData: foo.cpp
	# }
	.byte	0x0e, 0x00, 0x05, 0x16
	.byte	0x00, 0x00, 0x00, 0x00
	.byte	0x66, 0x6f, 0x6f, 0x2e
	.byte	0x63, 0x70, 0x70, 0x00
	# BuildInfo (0x100C) {
	#   TypeLeafKind: LF_BUILDINFO (0x1603)
	#   NumArgs: 5
	#   Arguments [
	#     ArgType: D:\\src\\llvmbuild\\cl\\Debug\\x64 (0x100A)
	#     ArgType: 0x0
	#     ArgType: foo.cpp (0x100B)
	#     ArgType: 0x0
	#     ArgType: 0x0
	#   ]
	# }
	.byte	0x1a, 0x00, 0x03, 0x16
	.byte	0x05, 0x00, 0x0a, 0x10
	.byte	0x00, 0x00, 0x00, 0x00
	.byte	0x00, 0x00, 0x0b, 0x10
	.byte	0x00, 0x00, 0x00, 0x00
	.byte	0x00, 0x00, 0x00, 0x00
	.byte	0x00, 0x00, 0xf2, 0xf1

	.addrsig
	.addrsig_sym "?S@@3UStruct@@A"
	.addrsig_sym "?SS@@3UStruct@@A"
	.addrsig_sym "?I@@3HA"
