;; Verify that llvm-objdump -l also prints the function name in disassembly
;; output, getting it from the debug info.

; RUN: llc < %s -o %t.o -filetype=obj -mtriple=x86_64-unknown-linux-gnu
; RUN: llvm-objdump --no-print-imm-hex -dl %t.o | FileCheck %s --check-prefixes=CHECK,CHECK-NO-DEMANGLE

; RUN: llc < %s -o %t.o -filetype=obj -mtriple=x86_64-unknown-linux-gnu
; RUN: llvm-objdump --no-print-imm-hex -dlC %t.o | FileCheck %s --check-prefixes=CHECK,CHECK-DEMANGLE

; CHECK:      0000000000000000 <foo>:
; CHECK-NEXT: ; foo():
; CHECK-NEXT: ; /tmp{{/|\\}}src.cc:1
; CHECK-NEXT:        0: b8 05 00 00 00                movl    $5, %eax
; CHECK-NEXT:        5: c3                            retq

; CHECK-NO-DEMANGLE:      0000000000000010 <_ZN3xyz3barEv>:
; CHECK-NO-DEMANGLE-NEXT: ; _ZN3xyz3barEv():
; CHECK-DEMANGLE:         0000000000000010 <xyz::bar()>:
; CHECK-DEMANGLE-NEXT:    ; xyz::bar():

; CHECK-NEXT: ; /tmp{{/|\\}}src.cc:3
; CHECK-NEXT:       10: b8 0a 00 00 00                movl    $10, %eax
; CHECK-NEXT:       15: c3                            retq

; CHECK-NO-DEMANGLE:      0000000000000020 <_ZN3xyz3bazEv>:
; CHECK-NO-DEMANGLE-NEXT: ; _ZN3xyz3bazEv():
; CHECK-DEMANGLE:         0000000000000020 <xyz::baz()>:
; CHECK-DEMANGLE-NEXT:    ; xyz::baz():

; CHECK-NEXT: ; /tmp{{/|\\}}src.cc:3
; CHECK-NEXT:       20: b8 14 00 00 00                movl    $20, %eax
; CHECK-NEXT:       25: c3                            retq

;; When symbol information is missing, we can get function names from debug
;; info. The IR is intentionally doctored to have different names in debug info
;; for the test case here.
; RUN: llvm-strip %t.o -N foo -N _ZN3xyz3barEv -N _ZN3xyz3bazEv -o %t-stripped.o
; RUN: llvm-objdump --no-print-imm-hex -dlC %t-stripped.o | FileCheck %s --check-prefix=STRIPPED

; STRIPPED:      0000000000000000 <.text>:
; STRIPPED-NEXT: ; Function1():
; STRIPPED-NEXT: ; /tmp{{/|\\}}src.cc:1
; STRIPPED-NEXT:        0: b8 05 00 00 00                movl    $5, %eax
; STRIPPED-NEXT:        5: c3                            retq

; STRIPPED:      ; xyz::bar():
; STRIPPED-NEXT: ; /tmp{{/|\\}}src.cc:3
; STRIPPED-NEXT:       10: b8 0a 00 00 00                movl    $10, %eax
; STRIPPED-NEXT:       15: c3                            retq

; STRIPPED:      ; xyz::baz():
; STRIPPED-NEXT: ; /tmp{{/|\\}}src.cc:3
; STRIPPED-NEXT:       20: b8 14 00 00 00                movl    $20, %eax
; STRIPPED-NEXT:       25: c3                            retq

;; IR adapted from:
;; $ cat /tmp/src.cc
;; extern "C" int foo() { return 5; };
;; namespace xyz {
;; int bar() { return 10; } int baz() { return 20; }
;; } // namespace xyz
;; $ clang++ -O -g -c /tmp/src.cc -S -emit-llvm
;; Note: bar() and baz() intentionally written on the same line.

; ModuleID = '/tmp/src.cc'
source_filename = "/tmp/src.cc"
target triple = "x86_64-unknown-linux-gnu"

define dso_local i32 @foo() #0 !dbg !7 {
entry:
  ret i32 5, !dbg !12
}

define dso_local i32 @_ZN3xyz3barEv() #0 !dbg !13 {
entry:
  ret i32 10, !dbg !15
}

define dso_local i32 @_ZN3xyz3bazEv() #0 !dbg !16 {
entry:
  ret i32 20, !dbg !17
}

attributes #0 = { "frame-pointer"="none" }

!llvm.dbg.cu = !{!0}
!llvm.module.flags = !{!3, !4, !5}
!llvm.ident = !{!6}

!0 = distinct !DICompileUnit(language: DW_LANG_C_plus_plus_14, file: !1, producer: "clang trunk", isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug, enums: !2, splitDebugInlining: false, nameTableKind: None)
; Note: <invalid> triggers a bad DILineInfo. We still print "Function1()".
!1 = !DIFile(filename: "<invalid>", directory: "")
!2 = !{}
!3 = !{i32 7, !"Dwarf Version", i32 4}
!4 = !{i32 2, !"Debug Info Version", i32 3}
!5 = !{i32 1, !"wchar_size", i32 4}
!6 = !{!"clang trunk)"}
!7 = distinct !DISubprogram(name: "Function1", scope: !8, file: !8, line: 1, type: !9, scopeLine: 1, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: !0, retainedNodes: !2)
!8 = !DIFile(filename: "/tmp/src.cc", directory: "")
!9 = !DISubroutineType(types: !10)
!10 = !{!11}
!11 = !DIBasicType(name: "int", size: 32, encoding: DW_ATE_signed)
!12 = !DILocation(line: 1, column: 24, scope: !7)
!13 = distinct !DISubprogram(name: "bar", linkageName: "_ZN3xyz3barEv", scope: !14, file: !8, line: 3, type: !9, scopeLine: 3, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: !0, retainedNodes: !2)
!14 = !DINamespace(name: "xyz", scope: null)
!15 = !DILocation(line: 3, column: 13, scope: !13)
!16 = distinct !DISubprogram(name: "baz", linkageName: "_ZN3xyz3bazEv", scope: !14, file: !8, line: 3, type: !9, scopeLine: 3, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: !0, retainedNodes: !2)
!17 = !DILocation(line: 3, column: 38, scope: !16)
