diff options
author | Rafael Espindola <rafael.espindola@gmail.com> | 2015-07-15 20:45:56 +0000 |
---|---|---|
committer | Rafael Espindola <rafael.espindola@gmail.com> | 2015-07-15 20:45:56 +0000 |
commit | 449208d95b9418306e1250429211e056f9af2940 (patch) | |
tree | 710a82d74d58cdf8a1439d0c7b82f31e9790431d /llvm/tools/llvm-ar/llvm-ar.cpp | |
parent | 47bfc19f29eb0abda912915432d8b3f9d116882c (diff) | |
download | bcm5719-llvm-449208d95b9418306e1250429211e056f9af2940.tar.gz bcm5719-llvm-449208d95b9418306e1250429211e056f9af2940.zip |
Handle the error of trying to convert a regular archive to a thin one.
While at it, test that we can add to a thin archive.
llvm-svn: 242330
Diffstat (limited to 'llvm/tools/llvm-ar/llvm-ar.cpp')
-rw-r--r-- | llvm/tools/llvm-ar/llvm-ar.cpp | 15 |
1 files changed, 13 insertions, 2 deletions
diff --git a/llvm/tools/llvm-ar/llvm-ar.cpp b/llvm/tools/llvm-ar/llvm-ar.cpp index 0e3c4fdc2ce..92f272dfad1 100644 --- a/llvm/tools/llvm-ar/llvm-ar.cpp +++ b/llvm/tools/llvm-ar/llvm-ar.cpp @@ -436,9 +436,20 @@ static void performReadOperation(ArchiveOperation Operation, std::exit(1); } -template <typename T> -void addMember(std::vector<NewArchiveIterator> &Members, T I, StringRef Name, +void addMember(std::vector<NewArchiveIterator> &Members, StringRef FileName, + StringRef Name, int Pos = -1) { + NewArchiveIterator NI(FileName, Name); + if (Pos == -1) + Members.push_back(NI); + else + Members[Pos] = NI; +} + +void addMember(std::vector<NewArchiveIterator> &Members, + object::Archive::child_iterator I, StringRef Name, int Pos = -1) { + if (Thin && !I->getParent()->isThin()) + fail("Cannot convert a regular archive to a thin one"); NewArchiveIterator NI(I, Name); if (Pos == -1) Members.push_back(NI); |