190 lines · plain
1# RUN: llvm-mc %s -triple=i686-pc-win32 -filetype=obj -o %t.obj2# RUN: llvm-objdump --no-print-imm-hex -d %t.obj | FileCheck %s --check-prefix=ASM3# RUN: llvm-pdbutil dump -il -symbols %t.obj | FileCheck %s --check-prefix=CODEVIEW4 5# Original source, slightly modified with an extra .cv_loc directive (at EXTRA6# below) that was causing assertions:7#8# void __declspec(noreturn) __declspec(dllimport) exit(int);9# int unlikely();10# static inline void do_exit() {11# if (unlikely()) {12# exit(32);13# }14# }15# void callit() {16# do_exit();17# }18 19 20# ASM: 00000000 <_callit>:21# begin inline {22# ASM-NEXT: 0: e8 00 00 00 00 calll 0x5 <_callit+0x5>23# ASM-NEXT: 5: 85 c0 testl %eax, %eax24# ASM-NEXT: 7: 75 01 jne 0xa <_callit+0xa>25# } end inline26# ASM-NEXT: 9: c3 retl27# begin inline {28# ASM-NEXT: a: 6a 20 pushl $3229# ASM-NEXT: c: ff 15 00 00 00 00 calll *030# } end inline31 32# CODEVIEW: Inlinee | Line | Source File33# CODEVIEW: 0x1002 | 3 | C:\src\llvm-project\build\t.cpp (MD5: 0BC092F354CE14FDC2FA78F8EDE7426E)34 35# CODEVIEW: S_INLINESITE [size = 26]36# CODEVIEW-NEXT: inlinee = 0x1002 (do_exit), parent = 0, end = 037# CODEVIEW-NEXT: 0B20 code 0x0 (+0x0) line 1 (+1)38# CODEVIEW-NEXT: 0409 code end 0x9 (+0x9)39# CODEVIEW-NEXT: 0B21 code 0xA (+0x1) line 2 (+1)40# CODEVIEW-NEXT: 0B28 code 0x12 (+0x8) line 3 (+1)41# CODEVIEW-NEXT: 0400 code end 0x12 (+0x0)42 43 .text44 .def _callit; .scl 2; .type 32; .endef45 .globl _callit # -- Begin function callit46_callit: # @callit47Lfunc_begin0:48 .cv_func_id 049 .cv_fpo_proc _callit 050# %bb.0: # %entry51 .cv_file 1 "C:\\src\\llvm-project\\build\\t.cpp" "0BC092F354CE14FDC2FA78F8EDE7426E" 152 .cv_inline_site_id 1 within 0 inlined_at 1 9 053 .cv_loc 1 1 4 0 is_stmt 0 # t.cpp:4:054 calll _unlikely55 testl %eax, %eax56 jne LBB0_157Ltmp0:58# %bb.2: # %do_exit.exit59 .cv_loc 0 1 10 0 # t.cpp:10:060 retl61LBB0_1: # %if.then.i62Ltmp1:63 .cv_loc 1 1 5 0 # t.cpp:5:064 pushl $3265 calll *__imp__exit66 # EXTRA67 .cv_loc 1 1 6 0 # t.cpp:6:068Ltmp2:69 .cv_fpo_endproc70Lfunc_end0:71 # -- End function72 73 .section .debug$S,"dr"74 .p2align 275 .long 4 # Debug section magic76 .long 24177 .long Ltmp4-Ltmp3 # Subsection size78Ltmp3:79 .short Ltmp6-Ltmp5 # Record length80Ltmp5:81 .short 4412 # Record kind: S_COMPILE382 .long 0 # Flags and language83 .short 7 # CPUType84 .short 7 # Frontend version85 .short 086 .short 087 .short 088 .short 7000 # Backend version89 .short 090 .short 091 .short 092 .asciz "clang version 7.0.0 " # Null-terminated compiler version string93Ltmp6:94Ltmp4:95 .p2align 296 .long 246 # Inlinee lines subsection97 .long Ltmp8-Ltmp7 # Subsection size98Ltmp7:99 .long 0 # Inlinee lines signature100 101 # Inlined function do_exit starts at t.cpp:3102 .long 4098 # Type index of inlined function103 .cv_filechecksumoffset 1 # Offset into filechecksum table104 .long 3 # Starting line number105Ltmp8:106 .p2align 2107 .cv_fpo_data _callit108 .long 241 # Symbol subsection for callit109 .long Ltmp10-Ltmp9 # Subsection size110Ltmp9:111 .short Ltmp12-Ltmp11 # Record length112Ltmp11:113 .short 4423 # Record kind: S_GPROC32_ID114 .long 0 # PtrParent115 .long 0 # PtrEnd116 .long 0 # PtrNext117 .long Lfunc_end0-_callit # Code size118 .long 0 # Offset after prologue119 .long 0 # Offset before epilogue120 .long 4099 # Function type index121 .secrel32 _callit # Function section relative address122 .secidx _callit # Function section index123 .byte 0 # Flags124 .asciz "callit" # Function name125Ltmp12:126 .short Ltmp14-Ltmp13 # Record length127Ltmp13:128 .short 4429 # Record kind: S_INLINESITE129 .long 0 # PtrParent130 .long 0 # PtrEnd131 .long 4098 # Inlinee type index132 .cv_inline_linetable 1 1 3 Lfunc_begin0 Lfunc_end0133Ltmp14:134 .short 2 # Record length135 .short 4430 # Record kind: S_INLINESITE_END136 .short 2 # Record length137 .short 4431 # Record kind: S_PROC_ID_END138Ltmp10:139 .p2align 2140 .cv_linetable 0, _callit, Lfunc_end0141 .cv_filechecksums # File index to string table offset subsection142 .cv_stringtable # String table143 .section .debug$T,"dr"144 .p2align 2145 .long 4 # Debug section magic146 # ArgList (0x1000) {147 # TypeLeafKind: LF_ARGLIST (0x1201)148 # NumArgs: 0149 # Arguments [150 # ]151 # }152 .byte 0x06, 0x00, 0x01, 0x12153 .byte 0x00, 0x00, 0x00, 0x00154 # Procedure (0x1001) {155 # TypeLeafKind: LF_PROCEDURE (0x1008)156 # ReturnType: void (0x3)157 # CallingConvention: NearC (0x0)158 # FunctionOptions [ (0x0)159 # ]160 # NumParameters: 0161 # ArgListType: () (0x1000)162 # }163 .byte 0x0e, 0x00, 0x08, 0x10164 .byte 0x03, 0x00, 0x00, 0x00165 .byte 0x00, 0x00, 0x00, 0x00166 .byte 0x00, 0x10, 0x00, 0x00167 # FuncId (0x1002) {168 # TypeLeafKind: LF_FUNC_ID (0x1601)169 # ParentScope: 0x0170 # FunctionType: void () (0x1001)171 # Name: do_exit172 # }173 .byte 0x12, 0x00, 0x01, 0x16174 .byte 0x00, 0x00, 0x00, 0x00175 .byte 0x01, 0x10, 0x00, 0x00176 .byte 0x64, 0x6f, 0x5f, 0x65177 .byte 0x78, 0x69, 0x74, 0x00178 # FuncId (0x1003) {179 # TypeLeafKind: LF_FUNC_ID (0x1601)180 # ParentScope: 0x0181 # FunctionType: void () (0x1001)182 # Name: callit183 # }184 .byte 0x12, 0x00, 0x01, 0x16185 .byte 0x00, 0x00, 0x00, 0x00186 .byte 0x01, 0x10, 0x00, 0x00187 .byte 0x63, 0x61, 0x6c, 0x6c188 .byte 0x69, 0x74, 0x00, 0xf1189 190