[llvm-ar] Flatten thin archives.
authorJordan Rupprecht <rupprecht@google.com>
Mon, 14 Jan 2019 21:11:46 +0000 (21:11 +0000)
committerJordan Rupprecht <rupprecht@google.com>
Mon, 14 Jan 2019 21:11:46 +0000 (21:11 +0000)
commit93bfb99ffc7ea9c828c3679ecc61719de453a8d0
tree0f5690ea2ed97184230079809ef018744c3bed51
parentadd3080cb95d1ccd3ec41c1a1d1c5f21fe32060a
[llvm-ar] Flatten thin archives.

Summary:
Normal behavior for GNU ar is to flatten thin archives when adding them to another thin archive, i.e. add the members directly instead of nesting the archive.

Some refactoring done as part of this patch to ease things:
 - Consolidate `addMember`/`addLibMember` methods
 - Rename `addMember` to `addChildMember` to make it more visibly different at the call site that an archive child is passed instead of a regular member
 - Pass in a separate vector and splice it back into position instead of passing a vector + optional Pos (which makes expanding libs tricky)

This fixes PR37530 as raised by https://github.com/ClangBuiltLinux/linux/issues/279.

Reviewers: mstorsjo, pcc, ruiu

Reviewed By: mstorsjo

Subscribers: llvm-commits, tpimh, nickdesaulniers

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

llvm-svn: 351120
llvm/test/tools/llvm-ar/Inputs/a-plus-b.a [new file with mode: 0644]
llvm/test/tools/llvm-ar/Inputs/a.txt [new file with mode: 0644]
llvm/test/tools/llvm-ar/Inputs/b.txt [new file with mode: 0644]
llvm/test/tools/llvm-ar/Inputs/c.txt [new file with mode: 0644]
llvm/test/tools/llvm-ar/Inputs/d.txt [new file with mode: 0644]
llvm/test/tools/llvm-ar/Inputs/nested-thin-archive.a [new file with mode: 0644]
llvm/test/tools/llvm-ar/flatten-thin-archive-recursive.test [new file with mode: 0644]
llvm/test/tools/llvm-ar/flatten-thin-archive.test [new file with mode: 0644]
llvm/tools/llvm-ar/llvm-ar.cpp