## Test the move command without modifiers moves members to the end

# RUN: rm -rf %t && mkdir -p %t
# RUN: yaml2obj %s -o %t/1.o --docnum=1
# RUN: yaml2obj %s -o %t/2.o --docnum=2
# RUN: yaml2obj %s -o %t/3.o --docnum=3

## Move single member:
# RUN: llvm-ar rc %t/single.a %t/1.o %t/2.o %t/3.o
# RUN: llvm-ar m %t/single.a %t/1.o
# RUN: llvm-ar t %t/single.a \
# RUN:   | FileCheck %s --check-prefix=SINGLE --match-full-lines --implicit-check-not {{.}}

# SINGLE:      2.o
# SINGLE-NEXT: 3.o
# SINGLE-NEXT: 1.o

# RUN: llvm-nm --print-armap %t/single.a \
# RUN:   | FileCheck %s --check-prefix=SINGLE-SYM

# SINGLE-SYM:      symbol2
# SINGLE-SYM-NEXT: symbol3
# SINGLE-SYM-NEXT: symbol1

## Move multiple members:
# RUN: llvm-ar rc %t/multiple.a %t/1.o %t/2.o %t/3.o
# RUN: llvm-ar m %t/multiple.a %t/1.o %t/2.o
# RUN: llvm-ar t %t/multiple.a \
# RUN:   | FileCheck %s --check-prefix=MULTIPLE --match-full-lines --implicit-check-not {{.}}

# MULTIPLE:      3.o
# MULTIPLE-NEXT: 1.o
# MULTIPLE-NEXT: 2.o

# RUN: llvm-nm --print-armap %t/multiple.a \
# RUN:   | FileCheck %s --check-prefix=MULTIPLE-SYM

# MULTIPLE-SYM:      symbol3
# MULTIPLE-SYM-NEXT: symbol1
# MULTIPLE-SYM-NEXT: symbol2

## Move same member:
# RUN: llvm-ar rc %t/same.a %t/1.o %t/2.o %t/3.o
# RUN: llvm-ar m %t/same.a %t/1.o %t/1.o
# RUN: llvm-ar t %t/same.a \
# RUN:   | FileCheck %s --check-prefix=SAME -DFILE=%t/2.o

# SAME:      2.o
# SAME-NEXT: 3.o
# SAME-NEXT: 1.o

# RUN: llvm-nm --print-armap %t/same.a \
# RUN:   | FileCheck %s --check-prefix=SAME-SYM

# SAME-SYM:      symbol2
# SAME-SYM-NEXT: symbol3
# SAME-SYM-NEXT: symbol1

## Move without member:
# RUN: llvm-ar rc %t/without.a %t/1.o %t/2.o %t/3.o
# RUN: llvm-ar m %t/without.a
# RUN: llvm-ar t %t/without.a \
# RUN:   | FileCheck %s --match-full-lines --check-prefix=WITHOUT --implicit-check-not {{.}}

# WITHOUT:      1.o
# WITHOUT-NEXT: 2.o
# WITHOUT-NEXT: 3.o

# RUN: llvm-nm --print-armap %t/without.a \
# RUN:   | FileCheck %s --check-prefix=WITHOUT-SYM

# WITHOUT-SYM:      symbol1
# WITHOUT-SYM-NEXT: symbol2
# WITHOUT-SYM-NEXT: symbol3

## No archive:
# RUN: not llvm-ar m 2>&1 \
# RUN:   | FileCheck %s --check-prefix=NO-ARCHIVE

# NO-ARCHIVE: error: an archive name must be specified

## Member does not exist:
# RUN: llvm-ar rc %t/missing.a %t/1.o %t/2.o %t/3.o
# RUN: not llvm-ar m %t/missing.a %t/missing.txt 2>&1 \
# RUN:   | FileCheck %s --check-prefix=MISSING-FILE -DFILE=%t/missing.txt

# MISSING-FILE: error: [[FILE]]: {{[nN]}}o such file or directory

--- !ELF
FileHeader:
  Class:   ELFCLASS64
  Data:    ELFDATA2LSB
  Type:    ET_REL
  Machine: EM_X86_64
Sections:
  - Name: .text
    Type: SHT_PROGBITS
Symbols:
  - Name:    symbol1
    Binding: STB_GLOBAL
    Section: .text

--- !ELF
FileHeader:
  Class:   ELFCLASS64
  Data:    ELFDATA2LSB
  Type:    ET_REL
  Machine: EM_X86_64
Sections:
  - Name: .text
    Type: SHT_PROGBITS
Symbols:
  - Name:    symbol2
    Binding: STB_GLOBAL
    Section: .text

--- !ELF
FileHeader:
  Class:   ELFCLASS64
  Data:    ELFDATA2LSB
  Type:    ET_REL
  Machine: EM_X86_64
Sections:
  - Name: .text
    Type: SHT_PROGBITS
Symbols:
  - Name:    symbol3
    Binding: STB_GLOBAL
    Section: .text
