diff --git a/llvm/include/llvm/Object/Archive.h b/llvm/include/llvm/Object/Archive.h --- a/llvm/include/llvm/Object/Archive.h +++ b/llvm/include/llvm/Object/Archive.h @@ -414,7 +414,8 @@ uint64_t getFirstChildOffset() const override { return FirstChildOffset; } uint64_t getLastChildOffset() const { return LastChildOffset; } bool isEmpty() const override { - return Data.getBufferSize() == sizeof(FixLenHdr); + return Data.getBufferSize() == sizeof(FixLenHdr) || + getFirstChildOffset() == 0; }; }; diff --git a/llvm/test/Object/archive-big-read-empty-with-freelist.test b/llvm/test/Object/archive-big-read-empty-with-freelist.test --- a/llvm/test/Object/archive-big-read-empty-with-freelist.test +++ b/llvm/test/Object/archive-big-read-empty-with-freelist.test @@ -1,3 +1,3 @@ # Test reading an empty archive with free list in it. -# RUN: env TZ=GMT not llvm-ar tv %p/Inputs/aix-empty-big-archive-with-freelist.a 2>&1 \ -# RUN: | grep 'truncated or malformed archive' +# RUN: env TZ=GMT llvm-ar tv %p/Inputs/aix-empty-big-archive-with-freelist.a 2>&1 \ +# RUN: | not grep 'truncated or malformed archive'