summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--llvm/lib/Object/Archive.cpp11
-rw-r--r--llvm/test/Object/archive-thin-read.test5
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
OpenPOWER on IntegriCloud