[llvm] 8c1e1d1 - [llvm-ar][test] Add to thin archive test coverage

via llvm-commits llvm-commits at lists.llvm.org
Wed Dec 4 08:24:21 PST 2019


Author: gbreynoo
Date: 2019-12-04T16:17:42Z
New Revision: 8c1e1d14827343a901c048f6468eb19619991828

URL: https://github.com/llvm/llvm-project/commit/8c1e1d14827343a901c048f6468eb19619991828
DIFF: https://github.com/llvm/llvm-project/commit/8c1e1d14827343a901c048f6468eb19619991828.diff

LOG: [llvm-ar][test] Add to thin archive test coverage

This diff adds test coverage for thin archives including additions to
existing tests. In some cases I have updated the formats of these tests
to better match other tests in the archive.

Differential Revision: https://reviews.llvm.org/D70969

Added: 
    llvm/test/tools/llvm-ar/full-to-thin-archive.test
    llvm/test/tools/llvm-ar/missing-thin-archive-member.test

Modified: 
    llvm/test/tools/llvm-ar/extract.test
    llvm/test/tools/llvm-ar/print.test
    llvm/test/tools/llvm-ar/quick-append.test
    llvm/test/tools/llvm-ar/replace.test

Removed: 
    


################################################################################
diff  --git a/llvm/test/tools/llvm-ar/extract.test b/llvm/test/tools/llvm-ar/extract.test
index 278a89db005a..fec5e4bb9969 100644
--- a/llvm/test/tools/llvm-ar/extract.test
+++ b/llvm/test/tools/llvm-ar/extract.test
@@ -1,31 +1,36 @@
 ## Test extract operation.
 # XFAIL: system-darwin
 
-RUN: rm -rf %t && mkdir -p %t/extracted/
+# RUN: rm -rf %t && mkdir -p %t/extracted/
 
-# Extracting from an empty archive should not warn or error:
-RUN: llvm-ar cr %t/empty.a
-RUN: llvm-ar xv %t/empty.a 2>&1 | count 0
+## Extracting from an empty archive should not warn or error:
+# RUN: llvm-ar cr %t/empty.a
+# RUN: llvm-ar xv %t/empty.a 2>&1 | count 0
 
-RUN: echo filea > %t/a.txt
-RUN: echo fileb > %t/b.txt
-RUN: llvm-ar rc %t/archive.a %t/a.txt %t/b.txt
+# RUN: echo filea > %t/a.txt
+# RUN: echo fileb > %t/b.txt
+# RUN: llvm-ar rc %t/archive.a %t/a.txt %t/b.txt
 
-# Single member:
-RUN: cd %t/extracted && llvm-ar xv %t/archive.a a.txt | FileCheck %s --check-prefix=A
-RUN: 
diff  %t/a.txt %t/extracted/a.txt 
-A: x - a.txt
+## Single member:
+# RUN: cd %t/extracted && llvm-ar xv %t/archive.a a.txt | FileCheck %s --check-prefix=A
+# RUN: 
diff  %t/a.txt %t/extracted/a.txt
+# A: x - a.txt
 
-# All members:
-RUN: rm %t/extracted/a.txt
-RUN: cd %t/extracted && llvm-ar xv %t/archive.a | FileCheck %s --check-prefix=AB
-RUN: 
diff  %t/a.txt %t/extracted/a.txt 
-RUN: 
diff  %t/b.txt %t/extracted/b.txt 
-AB: x - a.txt
-AB: x - b.txt
+## All members:
+# RUN: rm %t/extracted/a.txt
+# RUN: cd %t/extracted && llvm-ar xv %t/archive.a | FileCheck %s --check-prefix=AB
+# RUN: 
diff  %t/a.txt %t/extracted/a.txt
+# RUN: 
diff  %t/b.txt %t/extracted/b.txt
+# AB: x - a.txt
+# AB: x - b.txt
 
-# No output if 'v' is not specified.
-RUN: rm a.txt b.txt
-RUN: llvm-ar x %t/archive.a 2>&1 | count 0
-RUN: 
diff  %t/a.txt %t/extracted/a.txt
-RUN: 
diff  %t/b.txt %t/extracted/b.txt
+## Thin archive 
+# RUN: llvm-ar Trc %t/thin-archive.a
+# RUN: not llvm-ar x %t/thin-archive.a 2>&1 | FileCheck %s --check-prefix=THIN
+# THIN: extracting from a thin archive is not supported
+
+## No output if 'v' is not specified.
+# RUN: rm a.txt b.txt
+# RUN: llvm-ar x %t/archive.a 2>&1 | count 0
+# RUN: 
diff  %t/a.txt %t/extracted/a.txt
+# RUN: 
diff  %t/b.txt %t/extracted/b.txt

diff  --git a/llvm/test/tools/llvm-ar/full-to-thin-archive.test b/llvm/test/tools/llvm-ar/full-to-thin-archive.test
new file mode 100644
index 000000000000..6853005a32f8
--- /dev/null
+++ b/llvm/test/tools/llvm-ar/full-to-thin-archive.test
@@ -0,0 +1,8 @@
+## Test archives do not convert to thin archives.
+
+# RUN: rm -rf %t && mkdir -p %t
+# RUN: llvm-ar qc %t/archive.a %s
+# RUN: not llvm-ar qT %t/archive.a %s 2>&1 | FileCheck %s
+# RUN: not llvm-ar rT %t/archive.a %s 2>&1 | FileCheck %s
+
+# CHECK: error: cannot convert a regular archive to a thin one

diff  --git a/llvm/test/tools/llvm-ar/missing-thin-archive-member.test b/llvm/test/tools/llvm-ar/missing-thin-archive-member.test
new file mode 100644
index 000000000000..c1d67cdce2f1
--- /dev/null
+++ b/llvm/test/tools/llvm-ar/missing-thin-archive-member.test
@@ -0,0 +1,17 @@
+## Test llvm-ar errors when thin archive members are missing.
+
+# RUN: rm -rf %t-archive.a
+# RUN: echo contents > %t-temp.txt
+
+## File is not in archive.
+# RUN: llvm-ar qT %t-archive.a
+# RUN: not llvm-ar p %t-archive.a %t-temp.txt 2>&1 | FileCheck %s -DPATH=%t-temp.txt --check-prefix=MISSING
+
+# MISSING: error: '[[PATH]]' was not found
+
+## File has been deleted.
+# RUN: llvm-ar qT %t-archive.a %t-temp.txt
+# RUN: rm %t-temp.txt
+# RUN: not llvm-ar p %t-archive.a 2>&1 | FileCheck %s --check-prefix=DELETED
+
+# DELETED: error: {{[Nn]}}o such file or directory

diff  --git a/llvm/test/tools/llvm-ar/print.test b/llvm/test/tools/llvm-ar/print.test
index ec7fdc4137d2..847040f419b4 100644
--- a/llvm/test/tools/llvm-ar/print.test
+++ b/llvm/test/tools/llvm-ar/print.test
@@ -1,84 +1,89 @@
 ## Test Print output
 # XFAIL: system-darwin
 
-RUN: rm -rf %t && mkdir -p %t
-RUN: echo file1 > %t/1.txt
-RUN: echo file2 > %t/2.txt
-RUN: echo file3 > %t/3.txt
+# RUN: rm -rf %t && mkdir -p %t
+# RUN: echo file1 > %t/1.txt
+# RUN: echo file2 > %t/2.txt
+# RUN: echo file3 > %t/3.txt
 
-RUN: llvm-ar -rc %t/archive.a %t/1.txt %t/2.txt %t/3.txt
+# RUN: llvm-ar -rc %t/archive.a %t/1.txt %t/2.txt %t/3.txt
 
-# Print without member:
-RUN: llvm-ar p %t/archive.a \
-RUN:   | FileCheck %s --check-prefix=WITHOUT --match-full-lines --implicit-check-not {{.}}
+## Print without member:
+# RUN: llvm-ar p %t/archive.a \
+# RUN:   | FileCheck %s --check-prefix=WITHOUT --match-full-lines --implicit-check-not {{.}}
 
-WITHOUT:      file1
-WITHOUT-NEXT: file2
-WITHOUT-NEXT: file3
+# WITHOUT:      file1
+# WITHOUT-NEXT: file2
+# WITHOUT-NEXT: file3
 
-RUN: llvm-ar pv %t/archive.a \
-RUN:   | FileCheck %s --check-prefix=WITHOUT-VERBOSE --match-full-lines --implicit-check-not {{.}}
+# RUN: llvm-ar pv %t/archive.a \
+# RUN:   | FileCheck %s --check-prefix=WITHOUT-VERBOSE --match-full-lines --implicit-check-not {{.}}
 
-WITHOUT-VERBOSE:      Printing 1.txt
-WITHOUT-VERBOSE-NEXT: file1
-WITHOUT-VERBOSE-NEXT: Printing 2.txt
-WITHOUT-VERBOSE-NEXT: file2
-WITHOUT-VERBOSE-NEXT: Printing 3.txt
-WITHOUT-VERBOSE-NEXT: file3
+# WITHOUT-VERBOSE:      Printing 1.txt
+# WITHOUT-VERBOSE-NEXT: file1
+# WITHOUT-VERBOSE-NEXT: Printing 2.txt
+# WITHOUT-VERBOSE-NEXT: file2
+# WITHOUT-VERBOSE-NEXT: Printing 3.txt
+# WITHOUT-VERBOSE-NEXT: file3
 
-# Print single member:
-RUN: llvm-ar p %t/archive.a %t/2.txt  \
-RUN:   | FileCheck %s --check-prefix=SINGLE --match-full-lines --implicit-check-not {{.}}
+## Print single member:
+# RUN: llvm-ar p %t/archive.a %t/2.txt  \
+# RUN:   | FileCheck %s --check-prefix=SINGLE --match-full-lines --implicit-check-not {{.}}
 
-SINGLE: file2
+# SINGLE: file2
 
-RUN: llvm-ar pv %t/archive.a %t/2.txt  \
-RUN:   | FileCheck %s --check-prefix=SINGLE-VERBOSE --match-full-lines --implicit-check-not {{.}}
+# RUN: llvm-ar pv %t/archive.a %t/2.txt  \
+# RUN:   | FileCheck %s --check-prefix=SINGLE-VERBOSE --match-full-lines --implicit-check-not {{.}}
 
-SINGLE-VERBOSE:      Printing 2.txt
-SINGLE-VERBOSE-NEXT: file2
+# SINGLE-VERBOSE:      Printing 2.txt
+# SINGLE-VERBOSE-NEXT: file2
 
-# Print multiple members:
-RUN: llvm-ar p %t/archive.a %t/2.txt %t/1.txt \
-RUN:   | FileCheck %s --check-prefix=MULTIPLE --match-full-lines --implicit-check-not {{.}}
+## Print multiple members:
+# RUN: llvm-ar p %t/archive.a %t/2.txt %t/1.txt \
+# RUN:   | FileCheck %s --check-prefix=MULTIPLE --match-full-lines --implicit-check-not {{.}}
 
-MULTIPLE:      file1
-MULTIPLE-NEXT: file2
+# MULTIPLE:      file1
+# MULTIPLE-NEXT: file2
 
-RUN: llvm-ar pv %t/archive.a %t/2.txt %t/1.txt \
-RUN:   | FileCheck %s --check-prefix=MULTIPLE-VERBOSE --match-full-lines --implicit-check-not {{.}}
+# RUN: llvm-ar pv %t/archive.a %t/2.txt %t/1.txt \
+# RUN:   | FileCheck %s --check-prefix=MULTIPLE-VERBOSE --match-full-lines --implicit-check-not {{.}}
 
-MULTIPLE-VERBOSE:      Printing 1.txt
-MULTIPLE-VERBOSE-NEXT: file1
-MULTIPLE-VERBOSE-NEXT: Printing 2.txt
-MULTIPLE-VERBOSE-NEXT: file2
+# MULTIPLE-VERBOSE:      Printing 1.txt
+# MULTIPLE-VERBOSE-NEXT: file1
+# MULTIPLE-VERBOSE-NEXT: Printing 2.txt
+# MULTIPLE-VERBOSE-NEXT: file2
 
-# Print same member:
-RUN: not llvm-ar p %t/archive.a %t/2.txt %t/2.txt 2>&1 \
-RUN:   | FileCheck %s --check-prefix=SAME -DFILE=%t/2.txt
+## Print same member:
+# RUN: not llvm-ar p %t/archive.a %t/2.txt %t/2.txt 2>&1 \
+# RUN:   | FileCheck %s --check-prefix=SAME -DFILE=%t/2.txt
 
-SAME-DAG: file2
-SAME-DAG: error: '[[FILE]]' was not found
+# SAME-DAG: file2
+# SAME-DAG: error: '[[FILE]]' was not found
 
-# Print same member when containing multiple members with shared name:
-llvm-ar -q %t/archive.a %t/2.txt
-RUN: not llvm-ar p %t/archive.a %t/2.txt %t/2.txt 2>&1 \
-RUN:   | FileCheck %s --check-prefix=SAME -DFILE=%t/2.txt
+## Print same member when containing multiple members with shared name:
+# llvm-ar -q %t/archive.a %t/2.txt
+# RUN: not llvm-ar p %t/archive.a %t/2.txt %t/2.txt 2>&1 \
+# RUN:   | FileCheck %s --check-prefix=SAME -DFILE=%t/2.txt
 
-# No archive:
-RUN: not llvm-ar p 2>&1 \
-RUN:   | FileCheck %s --check-prefix=NO-ARCHIVE
+## No archive:
+# RUN: not llvm-ar p 2>&1 \
+# RUN:   | FileCheck %s --check-prefix=NO-ARCHIVE
+# 
+# NO-ARCHIVE: error: an archive name must be specified
 
-NO-ARCHIVE: error: an archive name must be specified
+## Archive does not exist:
+# RUN: not llvm-ar p %t/missing.a 2>&1 \
+# RUN:   | FileCheck %s --check-prefix=MISSING-ARCHIVE -DARCHIVE=%t/missing.a
 
-# Archive does not exist:
-RUN: not llvm-ar p %t/missing.a 2>&1 \
-RUN:   | FileCheck %s --check-prefix=MISSING-ARCHIVE -DARCHIVE=%t/missing.a
+# MISSING-ARCHIVE: error: error loading '[[ARCHIVE]]': {{[nN]}}o such file or directory
 
-MISSING-ARCHIVE: error: error loading '[[ARCHIVE]]': {{[nN]}}o such file or directory
+## Member does not exist:
+# RUN: not llvm-ar p %t/archive.a %t-missing.txt 2>&1 \
+# RUN:   | FileCheck %s --check-prefix=MISSING-FILE -DFILE=%t-missing.txt
 
-# Member does not exist:
-RUN: not llvm-ar p %t/archive.a %t-missing.txt 2>&1 \
-RUN:   | FileCheck %s --check-prefix=MISSING-FILE -DFILE=%t-missing.txt
+# MISSING-FILE: error: '[[FILE]]' was not found
 
-MISSING-FILE: error: '[[FILE]]' was not found
+## Print thin archive:
+# RUN: llvm-ar Trc %t/thin-archive.a %t/1.txt %t/2.txt %t/3.txt
+# RUN: llvm-ar p %t/archive.a %t/2.txt \
+# RUN:   | FileCheck %s --check-prefix=SINGLE --match-full-lines --implicit-check-not {{.}}

diff  --git a/llvm/test/tools/llvm-ar/quick-append.test b/llvm/test/tools/llvm-ar/quick-append.test
index 857b01a7aa17..0df538eed0dd 100644
--- a/llvm/test/tools/llvm-ar/quick-append.test
+++ b/llvm/test/tools/llvm-ar/quick-append.test
@@ -62,6 +62,16 @@
 
 # MISSING-FILE: error: [[FILE]]: {{[nN]}}o such file or directory
 
+## Create and append members to a thin archive:
+# RUN: llvm-ar qcT %t/thin-multiple.a %t/1.o
+# RUN: llvm-ar qcT %t/thin-multiple.a %t/2.o
+# RUN: llvm-ar t %t/thin-multiple.a \
+# RUN:   | FileCheck %s --check-prefix=MULTIPLE
+
+# RUN: llvm-ar qcT %t/thin-same.a %t/1.o %t/1.o
+# RUN: llvm-ar t %t/thin-same.a \
+# RUN:   | FileCheck %s --check-prefix=SAME
+
 --- !ELF
 FileHeader:
   Class:   ELFCLASS64

diff  --git a/llvm/test/tools/llvm-ar/replace.test b/llvm/test/tools/llvm-ar/replace.test
index 9e38d5a7502c..389ac60270c4 100644
--- a/llvm/test/tools/llvm-ar/replace.test
+++ b/llvm/test/tools/llvm-ar/replace.test
@@ -93,6 +93,15 @@
 
 # MISSING-FILE: error: [[FILE]]: {{[Nn]}}o such file or directory
 
+## Create and Replace member of thin archive:
+# RUN: llvm-ar rcT %t/thin.a %t/1.o %t/2.o %t/3.o
+# RUN: yaml2obj %s -o %t/1.o --docnum=4
+# RUN: llvm-ar rT %t/thin.a %t/1.o
+# RUN: llvm-ar t %t/thin.a | FileCheck %s --check-prefix=SINGLE
+
+# RUN: llvm-nm --print-armap %t/thin.a \
+# RUN:   | FileCheck %s --check-prefix=SINGLE-SYM
+
 --- !ELF
 FileHeader:
   Class:   ELFCLASS64


        


More information about the llvm-commits mailing list