diff --git a/lib/Object/Archive.cpp b/lib/Object/Archive.cpp index 4e9a18ee40c..4720bf894e9 100644 --- a/lib/Object/Archive.cpp +++ b/lib/Object/Archive.cpp @@ -69,14 +69,20 @@ sys::TimeValue ArchiveMemberHeader::getLastModified() const { unsigned ArchiveMemberHeader::getUID() const { unsigned Ret; - if (StringRef(UID, sizeof(UID)).rtrim(' ').getAsInteger(10, Ret)) + StringRef User = StringRef(UID, sizeof(UID)).rtrim(' '); + if (User.empty()) + return 0; + if (User.getAsInteger(10, Ret)) llvm_unreachable("UID time not a decimal number."); return Ret; } unsigned ArchiveMemberHeader::getGID() const { unsigned Ret; - if (StringRef(GID, sizeof(GID)).rtrim(' ').getAsInteger(10, Ret)) + StringRef Group = StringRef(GID, sizeof(GID)).rtrim(' '); + if (Group.empty()) + return 0; + if (Group.getAsInteger(10, Ret)) llvm_unreachable("GID time not a decimal number."); return Ret; } diff --git a/test/tools/llvm-ar/Inputs/msvc-import.lib b/test/tools/llvm-ar/Inputs/msvc-import.lib new file mode 100644 index 00000000000..224125bafce Binary files /dev/null and b/test/tools/llvm-ar/Inputs/msvc-import.lib differ diff --git a/test/tools/llvm-ar/empty-uid-gid.test b/test/tools/llvm-ar/empty-uid-gid.test new file mode 100644 index 00000000000..f289089f81a --- /dev/null +++ b/test/tools/llvm-ar/empty-uid-gid.test @@ -0,0 +1,3 @@ +RUN: llvm-ar tv %S/Inputs/msvc-import.lib | FileCheck %s + +CHECK: --------- 0/0 0 1970-01-01 00:00:00.000000000 library.dll