# Test that we properly ignore DIEs that have DW_AT_declaration=true.
# This indicates a function that was declared, but not defined.
# We don't want to register declarations, only definitions.

# RUN: %yaml2obj %s --docnum=1 -o %t.obj
# RUN: %yaml2obj %s --docnum=2 -o %t.dwo
# RUN: %bloaty %t.obj --debug-file %t.dwo -d compileunits --raw-map --domain=vm | %FileCheck %s

--- !ELF
FileHeader:
  Class:           ELFCLASS64
  Data:            ELFDATA2LSB
  Type:            ET_DYN
  Machine:         EM_X86_64
  Entry:           0x1040
ProgramHeaders:
  - Type:            PT_LOAD
    Flags:           [ PF_X, PF_R ]
    FirstSec:        .text
    LastSec:         .text
    VAddr:           0x1000
    Align:           0x1000
Sections:
  - Name:            .note.gnu.build-id
    Type:            SHT_NOTE
    Notes:
      - Name:            GNU
        Desc:            6CF422D909772A0FB5400518A689D9F15F14BF57
        Type:            0x3  # NT_GNU_BUILD_ID
  - Name:            .text
    Type:            SHT_PROGBITS
    Flags:           [ SHF_ALLOC, SHF_EXECINSTR ]
    Address:         0x1000
    AddressAlign:    0x10
    Size:            0x20
...

--- !ELF
FileHeader:
  Class:           ELFCLASS64
  Data:            ELFDATA2LSB
  Type:            ET_DYN
  Machine:         EM_X86_64
  Entry:           0x1040
Sections:
  - Name:            .note.gnu.build-id
    Type:            SHT_NOTE
    Notes:
      - Name:            GNU
        Desc:            6CF422D909772A0FB5400518A689D9F15F14BF57
        Type:            0x3  # NT_GNU_BUILD_ID
  - Name:            .text
    Type:            SHT_PROGBITS
    Flags:           [ SHF_ALLOC, SHF_EXECINSTR ]
    Address:         0x1000
    AddressAlign:    0x10
    Size:            0x20
Symbols:
  - Name:            foo_func
    Type:            STT_FUNC
    Section:         .text
    Binding:         STB_GLOBAL
    Value:           0x1000
    Size:            0x10
  - Name:            bar_func
    Type:            STT_FUNC
    Section:         .text
    Binding:         STB_GLOBAL
    Value:           0x1010
    Size:            0x10
DWARF:
  debug_str:
    - foo.c
    - bar.c
    - foo_func
    - bar_func
  debug_abbrev:
    - ID:              0
      Table:
        - Code:            0x1
          Tag:             DW_TAG_compile_unit
          Children:        DW_CHILDREN_yes
          Attributes:
            - Attribute:       DW_AT_name
              Form:            DW_FORM_strp
        - Code:            0x2
          Tag:             DW_TAG_subprogram
          Children:        DW_CHILDREN_no
          Attributes:
            - Attribute:       DW_AT_linkage_name
              Form:            DW_FORM_strp
            - Attribute:       DW_AT_declaration
              Form:            DW_FORM_flag_present
        - Code:            0x3
          Tag:             DW_TAG_subprogram
          Children:        DW_CHILDREN_no
          Attributes:
            - Attribute:       DW_AT_linkage_name
              Form:            DW_FORM_strp
  debug_info:
    # 0x0000000b: DW_TAG_compile_unit
    #               DW_AT_name        ("foo.c")
    #
    # 0x00000010:   DW_TAG_subprogram
    #                 DW_AT_linkage_name      ("bar_func")
    #                 DW_AT_declaration       (true)
    #
    # 0x00000015:   DW_TAG_subprogram
    #                 DW_AT_linkage_name      ("foo_func")
    - Version:         4
      AbbrevTableID:   0
      AbbrOffset:      0x0
      AddrSize:        8
      Entries:
        - AbbrCode:        0x1
          Values:
            - Value:           0x0
        - AbbrCode:        0x2
          Values:
            - Value:           0x15
        - AbbrCode:        0x3
          Values:
            - Value:           0xc
        - AbbrCode:        0x0
    # 0x00000026: DW_TAG_compile_unit
    #               DW_AT_name        ("bar.c")
    #
    # 0x0000002b:   DW_TAG_subprogram
    #                 DW_AT_linkage_name      ("bar_func")
    - Version:         4
      AbbrevTableID:   0
      AbbrOffset:      0x0
      AddrSize:        8
      Entries:
        - AbbrCode:        0x1
          Values:
            - Value:           0x6
        - AbbrCode:        0x3
          Values:
            - Value:           0x15
        - AbbrCode:        0x0
...

# CHECK: VM MAP:
# CHECK: 0000-1000              4096             [-- Nothing mapped --]
# CHECK: 1000-1010                16             foo.c
# CHECK: 1010-1020                16             bar.c
