Disallow Archive::child_iterator that don't point to an archive.
authorRafael Espindola <rafael.espindola@gmail.com>
Wed, 8 Jul 2015 22:15:07 +0000 (22:15 +0000)
committerRafael Espindola <rafael.espindola@gmail.com>
Wed, 8 Jul 2015 22:15:07 +0000 (22:15 +0000)
NFC, just less error prone.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@241747 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/Object/Archive.h
include/llvm/Object/ArchiveWriter.h
lib/Object/Archive.cpp
lib/Object/ArchiveWriter.cpp
tools/llvm-ar/llvm-ar.cpp

index 8da6919a46555cf515e8ab379c87f2bf47fcf9a1..40f7584203ec48cd88814069d9f452b39f7d3dd8 100644 (file)
@@ -109,7 +109,6 @@ public:
     Child child;
 
   public:
-    child_iterator() : child(Child(nullptr, nullptr)) {}
     child_iterator(const Child &c) : child(c) {}
     const Child *operator->() const { return &child; }
     const Child &operator*() const { return child; }
index b6edf5882dbf6494b41f82644b3c93ff64466446..4937fffe1f822199cf30a93822cb7b6d2737a9c2 100644 (file)
@@ -24,14 +24,14 @@ class NewArchiveIterator {
   bool IsNewMember;
   StringRef Name;
 
+  union {
   object::Archive::child_iterator OldI;
-
   StringRef NewFilename;
+  };
 
 public:
   NewArchiveIterator(object::Archive::child_iterator I, StringRef Name);
   NewArchiveIterator(StringRef I, StringRef Name);
-  NewArchiveIterator();
   bool isNewMember() const;
   StringRef getName() const;
 
index 54ed954a90d9157b58df61359565fe4b4b507194..d03c328ae3b17ba1797f12f0f6a7d6222627c223 100644 (file)
@@ -207,7 +207,8 @@ ErrorOr<std::unique_ptr<Archive>> Archive::create(MemoryBufferRef Source) {
 }
 
 Archive::Archive(MemoryBufferRef Source, std::error_code &ec)
-    : Binary(Binary::ID_Archive, Source), SymbolTable(child_end()) {
+    : Binary(Binary::ID_Archive, Source), SymbolTable(child_end()),
+      StringTable(child_end()), FirstRegular(child_end()) {
   StringRef Buffer = Data.getBuffer();
   // Check for sufficient magic.
   if (Buffer.startswith(ThinMagic)) {
index ceb34d49c276e7ae49526cf246cc66ddd5c09cb0..b904a1ec877b233805de996fce9d12ea98614c33 100644 (file)
@@ -34,8 +34,6 @@
 
 using namespace llvm;
 
-NewArchiveIterator::NewArchiveIterator() {}
-
 NewArchiveIterator::NewArchiveIterator(object::Archive::child_iterator I,
                                        StringRef Name)
     : IsNewMember(false), Name(Name), OldI(I) {}
index 872c548454ee2686f17290af46e3df39733082a5..6fbfc15380824507ccea0f4e72840374232bbb84 100644 (file)
@@ -535,7 +535,8 @@ computeNewArchiveMembers(ArchiveOperation Operation,
   assert(unsigned(InsertPos) <= Ret.size());
   Ret.insert(Ret.begin() + InsertPos, Moved.begin(), Moved.end());
 
-  Ret.insert(Ret.begin() + InsertPos, Members.size(), NewArchiveIterator());
+  Ret.insert(Ret.begin() + InsertPos, Members.size(),
+             NewArchiveIterator("", ""));
   int Pos = InsertPos;
   for (auto &Member : Members) {
     StringRef Name = sys::path::filename(Member);