; 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:  }
