xref: /llvm-project/llvm/test/MC/COFF/cv-loc-unreachable-2.s (revision 75cdab6dc2453a508157a9c383b93373a93078d6)
1# RUN: llvm-mc %s -triple=i686-pc-win32 -filetype=obj -o %t.obj
2# RUN: llvm-objdump --no-print-imm-hex -d %t.obj | FileCheck %s --check-prefix=ASM
3# RUN: llvm-pdbutil dump -il -symbols %t.obj | FileCheck %s --check-prefix=CODEVIEW
4
5# Based on the other cv-loc-unreachable-2.s, but with other code in the same
6# section afterwards. We had negative label difference assertions when .cv_loc
7# bound tightly to the next instruction.
8
9# ASM:      00000000 <_callit>:
10#   begin inline {
11# ASM-NEXT:        0: e8 00 00 00 00                calll   0x5 <_callit+0x5>
12# ASM-NEXT:        5: 85 c0                         testl   %eax, %eax
13# ASM-NEXT:        7: 75 01                         jne     0xa <_callit+0xa>
14#   } end inline
15# ASM-NEXT:        9: c3                            retl
16#   begin inline {
17# ASM-NEXT:        a: 6a 20                         pushl   $32
18# ASM-NEXT:        c: ff 15 00 00 00 00             calll   *0
19#   } end inline
20
21# CODEVIEW: Inlinee |  Line | Source File
22# CODEVIEW:  0x1002 |     3 | C:\src\llvm-project\build\t.cpp (MD5: 0BC092F354CE14FDC2FA78F8EDE7426E)
23
24# CODEVIEW:      S_INLINESITE [size = 26]
25# CODEVIEW-NEXT: inlinee = 0x1002 (do_exit), parent = 0, end = 0
26# CODEVIEW-NEXT:   0B20      code 0x0 (+0x0) line 1 (+1)
27# CODEVIEW-NEXT:   0409      code end 0x9 (+0x9)
28# CODEVIEW-NEXT:   0B21      code 0xA (+0x1) line 2 (+1)
29# CODEVIEW-NEXT:   0B28      code 0x12 (+0x8) line 3 (+1)
30# CODEVIEW-NEXT:   0400      code end 0x12 (+0x0)
31
32	.text
33	.def	 _callit; .scl	2; .type	32; .endef
34	.globl	_callit                 # -- Begin function callit
35_callit:                                # @callit
36Lfunc_begin0:
37	.cv_func_id 0
38	.cv_fpo_proc	_callit 0
39# %bb.0:                                # %entry
40	.cv_file	1 "C:\\src\\llvm-project\\build\\t.cpp" "0BC092F354CE14FDC2FA78F8EDE7426E" 1
41	.cv_inline_site_id 1 within 0 inlined_at 1 9 0
42	.cv_loc	1 1 4 0 is_stmt 0       # t.cpp:4:0
43	calll	_unlikely
44	testl	%eax, %eax
45	jne	LBB0_1
46Ltmp0:
47# %bb.2:                                # %do_exit.exit
48	.cv_loc	0 1 10 0                # t.cpp:10:0
49	retl
50LBB0_1:                                 # %if.then.i
51Ltmp1:
52	.cv_loc	1 1 5 0                 # t.cpp:5:0
53	pushl	$32
54	calll	*__imp__exit
55	# EXTRA
56	.cv_loc	1 1 6 0                 # t.cpp:6:0
57Ltmp2:
58	.cv_fpo_endproc
59Lfunc_end0:
60                                        # -- End function
61
62	.text
63	.align 32
64	retl
65
66	.section	.debug$S,"dr"
67	.p2align	2
68	.long	4                       # Debug section magic
69	.long	241
70	.long	Ltmp4-Ltmp3             # Subsection size
71Ltmp3:
72	.short	Ltmp6-Ltmp5             # Record length
73Ltmp5:
74	.short	4412                    # Record kind: S_COMPILE3
75	.long	0                       # Flags and language
76	.short	7                       # CPUType
77	.short	7                       # Frontend version
78	.short	0
79	.short	0
80	.short	0
81	.short	7000                    # Backend version
82	.short	0
83	.short	0
84	.short	0
85	.asciz	"clang version 7.0.0 "  # Null-terminated compiler version string
86Ltmp6:
87Ltmp4:
88	.p2align	2
89	.long	246                     # Inlinee lines subsection
90	.long	Ltmp8-Ltmp7             # Subsection size
91Ltmp7:
92	.long	0                       # Inlinee lines signature
93
94                                        # Inlined function do_exit starts at t.cpp:3
95	.long	4098                    # Type index of inlined function
96	.cv_filechecksumoffset	1       # Offset into filechecksum table
97	.long	3                       # Starting line number
98Ltmp8:
99	.p2align	2
100	.cv_fpo_data	_callit
101	.long	241                     # Symbol subsection for callit
102	.long	Ltmp10-Ltmp9            # Subsection size
103Ltmp9:
104	.short	Ltmp12-Ltmp11           # Record length
105Ltmp11:
106	.short	4423                    # Record kind: S_GPROC32_ID
107	.long	0                       # PtrParent
108	.long	0                       # PtrEnd
109	.long	0                       # PtrNext
110	.long	Lfunc_end0-_callit      # Code size
111	.long	0                       # Offset after prologue
112	.long	0                       # Offset before epilogue
113	.long	4099                    # Function type index
114	.secrel32	_callit         # Function section relative address
115	.secidx	_callit                 # Function section index
116	.byte	0                       # Flags
117	.asciz	"callit"                # Function name
118Ltmp12:
119	.short	Ltmp14-Ltmp13           # Record length
120Ltmp13:
121	.short	4429                    # Record kind: S_INLINESITE
122	.long	0                       # PtrParent
123	.long	0                       # PtrEnd
124	.long	4098                    # Inlinee type index
125	.cv_inline_linetable	1 1 3 Lfunc_begin0 Lfunc_end0
126Ltmp14:
127	.short	2                       # Record length
128	.short	4430                    # Record kind: S_INLINESITE_END
129	.short	2                       # Record length
130	.short	4431                    # Record kind: S_PROC_ID_END
131Ltmp10:
132	.p2align	2
133	.cv_linetable	0, _callit, Lfunc_end0
134	.cv_filechecksums               # File index to string table offset subsection
135	.cv_stringtable                 # String table
136	.section	.debug$T,"dr"
137	.p2align	2
138	.long	4                       # Debug section magic
139	# ArgList (0x1000) {
140	#   TypeLeafKind: LF_ARGLIST (0x1201)
141	#   NumArgs: 0
142	#   Arguments [
143	#   ]
144	# }
145	.byte	0x06, 0x00, 0x01, 0x12
146	.byte	0x00, 0x00, 0x00, 0x00
147	# Procedure (0x1001) {
148	#   TypeLeafKind: LF_PROCEDURE (0x1008)
149	#   ReturnType: void (0x3)
150	#   CallingConvention: NearC (0x0)
151	#   FunctionOptions [ (0x0)
152	#   ]
153	#   NumParameters: 0
154	#   ArgListType: () (0x1000)
155	# }
156	.byte	0x0e, 0x00, 0x08, 0x10
157	.byte	0x03, 0x00, 0x00, 0x00
158	.byte	0x00, 0x00, 0x00, 0x00
159	.byte	0x00, 0x10, 0x00, 0x00
160	# FuncId (0x1002) {
161	#   TypeLeafKind: LF_FUNC_ID (0x1601)
162	#   ParentScope: 0x0
163	#   FunctionType: void () (0x1001)
164	#   Name: do_exit
165	# }
166	.byte	0x12, 0x00, 0x01, 0x16
167	.byte	0x00, 0x00, 0x00, 0x00
168	.byte	0x01, 0x10, 0x00, 0x00
169	.byte	0x64, 0x6f, 0x5f, 0x65
170	.byte	0x78, 0x69, 0x74, 0x00
171	# FuncId (0x1003) {
172	#   TypeLeafKind: LF_FUNC_ID (0x1601)
173	#   ParentScope: 0x0
174	#   FunctionType: void () (0x1001)
175	#   Name: callit
176	# }
177	.byte	0x12, 0x00, 0x01, 0x16
178	.byte	0x00, 0x00, 0x00, 0x00
179	.byte	0x01, 0x10, 0x00, 0x00
180	.byte	0x63, 0x61, 0x6c, 0x6c
181	.byte	0x69, 0x74, 0x00, 0xf1
182
183