diff options
| -rw-r--r-- | llvm/lib/Object/Archive.cpp | 11 | ||||
| -rw-r--r-- | llvm/test/Object/archive-thin-read.test | 5 |
2 files changed, 13 insertions, 3 deletions
diff --git a/llvm/lib/Object/Archive.cpp b/llvm/lib/Object/Archive.cpp index 28fd27cdb9b..9c8e3dbe2bd 100644 --- a/llvm/lib/Object/Archive.cpp +++ b/llvm/lib/Object/Archive.cpp @@ -146,9 +146,14 @@ ErrorOr<StringRef> Archive::Child::getBuffer() const { ErrorOr<StringRef> Name = getName(); if (std::error_code EC = Name.getError()) return EC; - SmallString<128> FullName = sys::path::parent_path( - Parent->getMemoryBufferRef().getBufferIdentifier()); - sys::path::append(FullName, *Name); + SmallString<128> FullName; + if (sys::path::is_absolute(*Name)) + FullName = *Name; + else { + FullName = sys::path::parent_path( + Parent->getMemoryBufferRef().getBufferIdentifier()); + sys::path::append(FullName, *Name); + } ErrorOr<std::unique_ptr<MemoryBuffer>> Buf = MemoryBuffer::getFile(FullName); if (std::error_code EC = Buf.getError()) return EC; diff --git a/llvm/test/Object/archive-thin-read.test b/llvm/test/Object/archive-thin-read.test new file mode 100644 index 00000000000..a61f6c569d2 --- /dev/null +++ b/llvm/test/Object/archive-thin-read.test @@ -0,0 +1,5 @@ +RUN: echo hello > %t.file +RUN: llvm-ar rcsT %t.a %t.file +RUN: llvm-ar p %t.a | FileCheck %s + +CHECK: hello |

