mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-02-22 13:29:44 +00:00
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. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@242330 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
2fa118d257
commit
8d1daf644b
@ -74,6 +74,7 @@ public:
|
|||||||
return Data.begin() < other.Data.begin();
|
return Data.begin() < other.Data.begin();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const Archive *getParent() const { return Parent; }
|
||||||
Child getNext() const;
|
Child getNext() const;
|
||||||
|
|
||||||
ErrorOr<StringRef> getName() const;
|
ErrorOr<StringRef> getName() const;
|
||||||
|
@ -318,6 +318,9 @@ llvm::writeArchive(StringRef ArcName,
|
|||||||
MemberRef = Buffers.back()->getMemBufferRef();
|
MemberRef = Buffers.back()->getMemBufferRef();
|
||||||
} else {
|
} else {
|
||||||
object::Archive::child_iterator OldMember = Member.getOld();
|
object::Archive::child_iterator OldMember = Member.getOld();
|
||||||
|
assert(!Thin ||
|
||||||
|
OldMember->getParent()->isThin() &&
|
||||||
|
"Thin archives cannot refers to member of other archives");
|
||||||
ErrorOr<MemoryBufferRef> MemberBufferOrErr =
|
ErrorOr<MemoryBufferRef> MemberBufferOrErr =
|
||||||
OldMember->getMemoryBufferRef();
|
OldMember->getMemoryBufferRef();
|
||||||
if (auto EC = MemberBufferOrErr.getError())
|
if (auto EC = MemberBufferOrErr.getError())
|
||||||
|
@ -34,3 +34,17 @@ RUN: llvm-ar p %t.a | FileCheck --check-prefix=NEWER %s
|
|||||||
|
|
||||||
NEWER: newer
|
NEWER: newer
|
||||||
OLDER: older
|
OLDER: older
|
||||||
|
|
||||||
|
RUN: rm -f %t.a
|
||||||
|
RUN: echo foo > foo
|
||||||
|
RUN: echo bar > bar
|
||||||
|
RUN: llvm-ar --format=gnu rcT %t.a foo
|
||||||
|
RUN: llvm-ar --format=gnu rcT %t.a bar
|
||||||
|
RUN: llvm-ar t %t.a | FileCheck --check-prefix=BOTH-FILES %s
|
||||||
|
BOTH-FILES: foo
|
||||||
|
BOTH-FILES: bar
|
||||||
|
|
||||||
|
RUN: rm -f %t.a
|
||||||
|
RUN: llvm-ar --format=gnu rc %t.a foo
|
||||||
|
RUN: not llvm-ar --format=gnu rcT %t.a bar 2>&1 | FileCheck --check-prefix=ERROR %s
|
||||||
|
ERROR: Cannot convert a regular archive to a thin one.
|
||||||
|
@ -436,9 +436,20 @@ static void performReadOperation(ArchiveOperation Operation,
|
|||||||
std::exit(1);
|
std::exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename T>
|
void addMember(std::vector<NewArchiveIterator> &Members, StringRef FileName,
|
||||||
void addMember(std::vector<NewArchiveIterator> &Members, T I, StringRef Name,
|
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) {
|
int Pos = -1) {
|
||||||
|
if (Thin && !I->getParent()->isThin())
|
||||||
|
fail("Cannot convert a regular archive to a thin one");
|
||||||
NewArchiveIterator NI(I, Name);
|
NewArchiveIterator NI(I, Name);
|
||||||
if (Pos == -1)
|
if (Pos == -1)
|
||||||
Members.push_back(NI);
|
Members.push_back(NI);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user