| ; The following two object files were generated using the following command: | |
| ; $ cl /d2Zi+ /Zc:inline /O2 /Z7 /c t.cpp | |
| ; The contents of t.cpp follow: | |
| ; static void bar() { | |
| ; __asm nop | |
| ; } | |
| ; static void baz() { | |
| ; __asm nop | |
| ; } | |
| ; static __forceinline void foo() { | |
| ; __asm nop | |
| ; #include "a.h" | |
| ; #include "b.h" | |
| ; __asm nop | |
| ; goto forwards; | |
| ; | |
| ; backwards: | |
| ; __asm nop | |
| ; return; | |
| ; | |
| ; forwards: | |
| ; __asm rep nop | |
| ; goto backwards; | |
| ; } | |
| ; int main() { | |
| ; bar(); | |
| ; baz(); | |
| ; foo(); | |
| ; } | |
| ; | |
| ; Both a.h and b.h contain "__asm nop". | |
| RUN: llvm-readobj -s -codeview -section-symbols %p/Inputs/codeview-inlining.obj.coff | FileCheck %s | |
| ; FIXME: If we were more clever, we could turn FileIDs into paths. | |
| ; CHECK: SubSectionType: InlineeLines (0xF6) | |
| ; CHECK-NEXT: SubSectionSize: 0x3C | |
| ; CHECK-NEXT: InlineeSourceLine { | |
| ; CHECK-NEXT: Inlinee: bar (0x1002) | |
| ; CHECK-NEXT: FileID: d:\src\llvm\build\t.cpp (0x30) | |
| ; CHECK-NEXT: SourceLineNum: 2 | |
| ; CHECK-NEXT: ExtraFileCount: 0 | |
| ; CHECK-NEXT: ExtraFiles [ | |
| ; CHECK-NEXT: ] | |
| ; CHECK-NEXT: } | |
| ; CHECK-NEXT: InlineeSourceLine { | |
| ; CHECK-NEXT: Inlinee: baz (0x1003) | |
| ; CHECK-NEXT: FileID: d:\src\llvm\build\t.cpp (0x30) | |
| ; CHECK-NEXT: SourceLineNum: 5 | |
| ; CHECK-NEXT: ExtraFileCount: 0 | |
| ; CHECK-NEXT: ExtraFiles [ | |
| ; CHECK-NEXT: ] | |
| ; CHECK-NEXT: } | |
| ; The 'foo' inline site has extra files due to includes. | |
| ; CHECK-NEXT: InlineeSourceLine { | |
| ; CHECK-NEXT: Inlinee: foo (0x1004) | |
| ; CHECK-NEXT: FileID: d:\src\llvm\build\a.h (0x0) | |
| ; CHECK-NEXT: SourceLineNum: 1 | |
| ; CHECK-NEXT: ExtraFileCount: 2 | |
| ; CHECK-NEXT: ExtraFiles [ | |
| ; CHECK-NEXT: FileID: d:\src\llvm\build\b.h (0x18) | |
| ; CHECK-NEXT: FileID: d:\src\llvm\build\t.cpp (0x30) | |
| ; CHECK-NEXT: ] | |
| ; CHECK-NEXT: } |