Compiler projects using llvm
## This test checks that debug info contained in the source file is properly
## verified by --verify after copying. If --no-garbage-collection is
## specified then the verification should fail, otherwise the verification
## should succeed.

# RUN: yaml2obj %s -o %t.o

## Verify resulting debug info after --garbage-collection optimisation.
# RUN: llvm-dwarfutil %t.o %t1 --verify

## Verify separate debug file after --garbage-collection optimisation.
# RUN: llvm-dwarfutil %t.o --separate-debug-file %t1 --verify

## Verify not optimised resulting debug info.
# RUN: not llvm-dwarfutil --no-garbage-collection %t.o %t1 --verify 2>&1 | FileCheck %s -DFILE=%t1

## Verify not optimised resulting separate debug file.
# RUN: not llvm-dwarfutil --no-garbage-collection %t.o --separate-debug-file %t1 --verify 2>&1 | FileCheck %s -DFILE=%t1.debug

## Check that verification is disabled when destination is stdout.
# RUN: llvm-dwarfutil %t.o - --verify 2>&1 | FileCheck %s --check-prefix=CHECK-STDOUT

# CHECK: error: '[[FILE]]': output verification failed
# CHECK-STDOUT: warning: verification skipped because writing to stdout

--- !ELF
FileHeader:
  Class:    ELFCLASS64
  Data:     ELFDATA2LSB
  Type:     ET_REL
  Machine:  EM_X86_64
DWARF:
  debug_abbrev:
    - Table:
      - Tag:      DW_TAG_compile_unit
        Children: DW_CHILDREN_yes
        Attributes:
          - Attribute: DW_AT_producer
            Form:      DW_FORM_string
          - Attribute: DW_AT_language
            Form:      DW_FORM_data2
          - Attribute: DW_AT_name
            Form:      DW_FORM_string
          - Attribute: DW_AT_low_pc
            Form:      DW_FORM_addr
          - Attribute: DW_AT_high_pc
            Form:      DW_FORM_data8
      - Tag:      DW_TAG_subprogram
        Children: DW_CHILDREN_no
        Attributes:
          - Attribute: DW_AT_name
            Form:      DW_FORM_string
          - Attribute: DW_AT_low_pc
            Form:      DW_FORM_addr
          - Attribute: DW_AT_high_pc
            Form:      DW_FORM_data8
          - Attribute: DW_AT_type
            Form:      DW_FORM_ref4
      - Tag:      DW_TAG_class_type
        Children: DW_CHILDREN_yes
        Attributes:
          - Attribute: DW_AT_name
            Form:      DW_FORM_string
      - Tag:      DW_TAG_member
        Children: DW_CHILDREN_no
        Attributes:
          - Attribute: DW_AT_type
            Form:      DW_FORM_ref4
          - Attribute: DW_AT_name
            Form:      DW_FORM_string
      - Tag:      DW_TAG_class_type
        Children: DW_CHILDREN_no
        Attributes:
          - Attribute: DW_AT_name
            Form:      DW_FORM_string
          - Attribute: DW_AT_declaration
            Form:      DW_FORM_flag_present
      - Tag:      DW_TAG_class_type
        Children: DW_CHILDREN_yes
        Attributes:
          - Attribute: DW_AT_name
            Form:      DW_FORM_string
          - Attribute: DW_AT_declaration
            Form:      DW_FORM_flag_present
      - Tag:      DW_TAG_template_type_parameter
        Children: DW_CHILDREN_no
        Attributes:
          - Attribute: DW_AT_type
            Form:      DW_FORM_ref4
      - Tag:      DW_TAG_base_type
        Children: DW_CHILDREN_no
        Attributes:
          - Attribute: DW_AT_name
            Form:      DW_FORM_string
  debug_info:
    - Version: 4
      Entries:
        - AbbrCode: 1
          Values:
            - CStr: by_hand
            - Value:  0x04
            - CStr: CU1
            - Value:  0x1000
            - Value:  0x100
        - AbbrCode: 3
          Values:
            - CStr: class1
        - AbbrCode: 4
          Values:
            - Value:  0x0000006c
            - CStr: member1
        - AbbrCode: 0
        - AbbrCode: 3
          Values:
            - CStr: class2
        - AbbrCode: 4
          Values:
            - Value:  0x0000006c
            - CStr: member1
        - AbbrCode: 0
        - AbbrCode: 3
          Values:
            - CStr: class3
        - AbbrCode: 4
          Values:
            - Value:  0x0000006c
            - CStr: member1
        - AbbrCode: 0
        - AbbrCode: 8
          Values:
            - CStr: int
        - AbbrCode: 2
          Values:
            - CStr: foo1
            - Value:  0x1000
            - Value:  0x10
            - Value:  0x0000002a
        - AbbrCode: 2
          Values:
            - CStr: foo2
            - Value:  0x0
            - Value:  0x100
            - Value:  0x00000040
        - AbbrCode: 2
          Values:
            - CStr: foo3
            - Value:  0x0
            - Value:  0x100
            - Value:  0x00000040
        - AbbrCode: 0
...