## Check that yaml2obj is able to produce an object from YAML
## containing sections with duplicate names (but different name suffixes).

# RUN: yaml2obj --docnum=1 %s -o %t1
# RUN: llvm-readelf -S %t1 | FileCheck %s --check-prefix=CASE1

# CASE1:      [Nr] Name    Type
# CASE1:      [ 1] .foo1   PROGBITS
# CASE1-NEXT: [ 2] .foo    PROGBITS
# CASE1-NEXT: [ 3] .foo    PROGBITS
# CASE1-NEXT: [ 4] .foo2   PROGBITS
# CASE1-NEXT: [ 5] .foo2 ( PROGBITS
# CASE1-NEXT: [ 6] .foo2 ) PROGBITS
# CASE1-NEXT: [ 7] .foo2   PROGBITS

--- !ELF
FileHeader:
  Class: ELFCLASS64
  Data:  ELFDATA2LSB
  Type:  ET_REL
Sections:
  - Name: .foo1
    Type: SHT_PROGBITS
  - Name: .foo
    Type: SHT_PROGBITS
  - Name: '.foo (1)'
    Type: SHT_PROGBITS
  - Name: .foo2
    Type: SHT_PROGBITS
  - Name: '.foo2 ('
    Type: SHT_PROGBITS
  - Name: '.foo2 )'
    Type: SHT_PROGBITS
  - Name: '.foo2 ()'
    Type: SHT_PROGBITS

## Check that yaml2obj reports an error in case we have
## sections with equal names and suffixes.

# RUN: not yaml2obj --docnum=2 %s 2>&1 | FileCheck %s --check-prefix=CASE2
# CASE2: error: repeated section/fill name: '.foo (1)' at YAML section/fill number 2
# CASE2: error: repeated section/fill name: '.foo (1)' at YAML section/fill number 3

--- !ELF
FileHeader:
  Class: ELFCLASS64
  Data:  ELFDATA2LSB
  Type:  ET_REL
Sections:
  - Name: '.foo (1)'
    Type: SHT_PROGBITS
  - Name: '.foo (1)'
    Type: SHT_PROGBITS
  - Name: '.foo (1)'
    Type: SHT_PROGBITS

## Check that yaml2obj reports an error in case we have
## symbols without suffixes in the names and their
## names are equal.

# RUN: not yaml2obj --docnum=3 %s 2>&1 | FileCheck %s --check-prefix=CASE3
# CASE3: error: repeated section/fill name: '.foo' at YAML section/fill number 2

--- !ELF
FileHeader:
  Class: ELFCLASS64
  Data:  ELFDATA2LSB
  Type:  ET_REL
Sections:
  - Name: .foo
    Type: SHT_PROGBITS
  - Name: .foo
    Type: SHT_PROGBITS

## Check that yaml2obj can produce an object when symbols are defined
## relative to sections with duplicate names (but different name suffixes).

# RUN: yaml2obj --docnum=4 %s -o %t4
# RUN: llvm-readobj -s -t %t4 | FileCheck %s --check-prefix=CASE4

# CASE4:      Section {
# CASE4:       Index: 1
# CASE4-NEXT:  Name: .foo
# CASE4:       Index: 2
# CASE4-NEXT:  Name: .foo

# CASE4:      Symbol {
# CASE4:       Name: foo
# CASE4-NEXT:  Value:
# CASE4-NEXT:  Size:
# CASE4-NEXT:  Binding:
# CASE4-NEXT:  Type:
# CASE4-NEXT:  Other:
# CASE4-NEXT:  Section: .foo (0x1)
# CASE4:       Name: bar
# CASE4-NEXT:  Value:
# CASE4-NEXT:  Size:
# CASE4-NEXT:  Binding:
# CASE4-NEXT:  Type:
# CASE4-NEXT:  Other:
# CASE4-NEXT:  Section: .foo (0x2)

--- !ELF
FileHeader:
  Class: ELFCLASS64
  Data:  ELFDATA2LSB
  Type:  ET_REL
Sections:
  - Name: .foo
    Type: SHT_PROGBITS
  - Name: '.foo (1)'
    Type: SHT_PROGBITS
Symbols:
  - Name:    foo
    Section: .foo
  - Name:    bar
    Section: '.foo (1)'

## Check that yaml2obj can produce SHT_GROUP sections that
## reference sections and symbols with name suffixes.

# RUN: yaml2obj --docnum=5 %s -o %t5
# RUN: llvm-readobj --section-groups %t5 | FileCheck %s --check-prefix=CASE5

# CASE5:      Groups {
# CASE5-NEXT:   Group {
# CASE5-NEXT:     Name: .group (1)
# CASE5-NEXT:     Index: 1
# CASE5-NEXT:     Link: 5
# CASE5-NEXT:     Info: 1
# CASE5-NEXT:     Type: COMDAT (0x1)
# CASE5-NEXT:     Signature: foo
# CASE5-NEXT:     Section(s) in group [
# CASE5-NEXT:       .text.foo (2)
# CASE5-NEXT:     ]
# CASE5-NEXT:   }
# CASE5-NEXT:   Group {
# CASE5-NEXT:     Name: .group (1)
# CASE5-NEXT:     Index: 3
# CASE5-NEXT:     Link: 5
# CASE5-NEXT:     Info: 2
# CASE5-NEXT:     Type: COMDAT (0x1)
# CASE5-NEXT:     Signature: foo
# CASE5-NEXT:     Section(s) in group [
# CASE5-NEXT:       .text.foo (4)
# CASE5-NEXT:     ]
# CASE5-NEXT:   }
# CASE5-NEXT: }

--- !ELF
FileHeader:
  Class: ELFCLASS64
  Data:  ELFDATA2LSB
  Type:  ET_REL
Sections:
  - Name: .group
    Type: SHT_GROUP
    Info: foo
    Members:
      - SectionOrType: GRP_COMDAT
      - SectionOrType: .text.foo
  - Name: .text.foo
    Type: SHT_PROGBITS
  - Name: '.group (1)'
    Type: SHT_GROUP
    Info: 'foo (1)'
    Members:
      - SectionOrType: GRP_COMDAT
      - SectionOrType: '.text.foo (1)'
  - Name: '.text.foo (1)'
    Type: SHT_PROGBITS
Symbols:
  - Name:    foo
    Section: .text.foo
  - Name:    'foo (1)'
    Section: '.text.foo (1)'
