Index: llvm/trunk/test/Object/archive-extract.test =================================================================== --- llvm/trunk/test/Object/archive-extract.test +++ llvm/trunk/test/Object/archive-extract.test @@ -40,13 +40,13 @@ ; RUN: llvm-ar -format gnu rcU %t.a very_long_bytecode_file_name.bc ; RUN: env TZ=GMT llvm-ar tv %t.a | FileCheck %s -check-prefix CHECK-GNU -CHECK-GNU: 1465 2004-11-19 03:01:31.000000000 very_long_bytecode_file_name.bc +CHECK-GNU: 1465 Nov 19 03:01 2004 very_long_bytecode_file_name.bc ; RUN: rm -f %t.a ; RUN: llvm-ar -format darwin rcU %t.a very_long_bytecode_file_name.bc ; RUN: env TZ=GMT llvm-ar tv %t.a | FileCheck %s -check-prefix CHECK-DARWIN -CHECK-DARWIN: 1472 2004-11-19 03:01:31.000000000 very_long_bytecode_file_name.bc +CHECK-DARWIN: 1472 Nov 19 03:01 2004 very_long_bytecode_file_name.bc RUN: not llvm-ar x %p/Inputs/GNU.a foo.o 2>&1 | FileCheck --check-prefix=NOTFOUND %s NOTFOUND: foo.o was not found Index: llvm/trunk/test/Object/archive-toc.test =================================================================== --- llvm/trunk/test/Object/archive-toc.test +++ llvm/trunk/test/Object/archive-toc.test @@ -3,20 +3,20 @@ Test reading an archive created by gnu ar RUN: env TZ=GMT llvm-ar tv Inputs/GNU.a | FileCheck %s --check-prefix=GNU -strict-whitespace -GNU: rw-r--r-- 500/500 8 2004-11-19 02:57:37.000000000 evenlen -GNU-NEXT: rw-r--r-- 500/500 7 2004-11-19 02:57:21.000000000 oddlen -GNU-NEXT: rwxr-xr-x 500/500 1465 2004-11-19 03:01:31.000000000 very_long_bytecode_file_name.bc -GNU-NEXT: rw-r--r-- 500/500 2280 2004-11-19 03:04:30.000000000 IsNAN.o +GNU: rw-r--r-- 500/500 8 Nov 19 02:57 2004 evenlen +GNU-NEXT: rw-r--r-- 500/500 7 Nov 19 02:57 2004 oddlen +GNU-NEXT: rwxr-xr-x 500/500 1465 Nov 19 03:01 2004 very_long_bytecode_file_name.bc +GNU-NEXT: rw-r--r-- 500/500 2280 Nov 19 03:04 2004 IsNAN.o Test reading an archive createdy by Mac OS X ar RUN: env TZ=GMT llvm-ar tv Inputs/MacOSX.a | FileCheck %s --check-prefix=OSX -strict-whitespace OSX-NOT: __.SYMDEF -OSX: rw-r--r-- 501/501 8 2004-11-19 02:57:37.000000000 evenlen -OSX-NEXT: rw-r--r-- 501/501 8 2004-11-19 02:57:21.000000000 oddlen -OSX-NEXT: rw-r--r-- 502/502 1465 2010-02-04 06:59:14.000000000 very_long_bytecode_file_name.bc -OSX-NEXT: rw-r--r-- 501/501 2280 2004-11-19 04:32:06.000000000 IsNAN.o +OSX: rw-r--r-- 501/501 8 Nov 19 02:57 2004 evenlen +OSX-NEXT: rw-r--r-- 501/501 8 Nov 19 02:57 2004 oddlen +OSX-NEXT: rw-r--r-- 502/502 1465 Feb 4 06:59 2010 very_long_bytecode_file_name.bc +OSX-NEXT: rw-r--r-- 501/501 2280 Nov 19 04:32 2004 IsNAN.o Test reading an archive created on Solaris by /usr/ccs/bin/ar RUN: env TZ=GMT llvm-ar tv Inputs/SVR4.a | FileCheck %s -strict-whitespace @@ -24,18 +24,18 @@ Test reading an archive created on Solaris by /usr/xpg4/bin/ar RUN: env TZ=GMT llvm-ar tv Inputs/xpg4.a | FileCheck %s -strict-whitespace -CHECK: rw-r--r-- 1002/102 8 2004-11-19 03:24:02.000000000 evenlen -CHECK-NEXT: rw-r--r-- 1002/102 7 2004-11-19 03:24:02.000000000 oddlen -CHECK-NEXT: rwxr-xr-x 1002/102 1465 2004-11-19 03:24:02.000000000 very_long_bytecode_file_name.bc -CHECK-NEXT: rw-r--r-- 1002/102 2280 2004-11-19 03:24:02.000000000 IsNAN.o +CHECK: rw-r--r-- 1002/102 8 Nov 19 03:24 2004 evenlen +CHECK-NEXT: rw-r--r-- 1002/102 7 Nov 19 03:24 2004 oddlen +CHECK-NEXT: rwxr-xr-x 1002/102 1465 Nov 19 03:24 2004 very_long_bytecode_file_name.bc +CHECK-NEXT: rw-r--r-- 1002/102 2280 Nov 19 03:24 2004 IsNAN.o Test reading a thin archive created by gnu ar RUN: env TZ=GMT llvm-ar tv Inputs/thin.a | FileCheck %s --check-prefix=THIN -strict-whitespace -THIN: rw-r--r-- 1000/1000 8 2014-12-16 00:56:27.000000000 Inputs/evenlen -THIN-NEXT: rw-r--r-- 1000/1000 7 2014-12-16 00:56:27.000000000 Inputs/oddlen -THIN-NEXT: rwxr-xr-x 1000/1000 1465 2014-12-16 00:56:27.000000000 Inputs/very_long_bytecode_file_name.bc -THIN-NEXT: rw-r--r-- 1000/1000 2280 2014-12-16 00:56:27.000000000 Inputs/IsNAN.o +THIN: rw-r--r-- 1000/1000 8 Dec 16 00:56 2014 Inputs/evenlen +THIN-NEXT: rw-r--r-- 1000/1000 7 Dec 16 00:56 2014 Inputs/oddlen +THIN-NEXT: rwxr-xr-x 1000/1000 1465 Dec 16 00:56 2014 Inputs/very_long_bytecode_file_name.bc +THIN-NEXT: rw-r--r-- 1000/1000 2280 Dec 16 00:56 2014 Inputs/IsNAN.o Test reading an archive with just a symbol table. We use to reject them. RUN: llvm-ar tv Inputs/symtab-only.a | FileCheck --allow-empty --check-prefix=EMPTY %s @@ -44,5 +44,5 @@ Test reading a thin archive with directory names. RUN: env TZ=GMT llvm-ar tv Inputs/thin-path.a | FileCheck %s --check-prefix=THINPATH -strict-whitespace -THINPATH: rw-r--r-- 0/0 1224 1970-01-01 00:00:00.000000000 Inputs/test.o -THINPATH-NEXT: rw-r--r-- 0/0 1224 1970-01-01 00:00:00.000000000 Inputs/t/test2.o +THINPATH: rw-r--r-- 0/0 1224 Jan 1 00:00 1970 Inputs/test.o +THINPATH-NEXT: rw-r--r-- 0/0 1224 Jan 1 00:00 1970 Inputs/t/test2.o Index: llvm/trunk/test/tools/llvm-ar/empty-uid-gid.test =================================================================== --- llvm/trunk/test/tools/llvm-ar/empty-uid-gid.test +++ llvm/trunk/test/tools/llvm-ar/empty-uid-gid.test @@ -1,3 +1,3 @@ -RUN: llvm-ar tv %S/Inputs/msvc-import.lib | FileCheck %s +RUN: env TZ=GMT llvm-ar tv %S/Inputs/msvc-import.lib | FileCheck %s -CHECK: --------- 0/0 0 1970-01-01 {{[0-9:.]+}} library.dll +CHECK: --------- 0/0 0 Jan 1 {{[0-9:.]+}} 1970 library.dll Index: llvm/trunk/tools/llvm-ar/llvm-ar.cpp =================================================================== --- llvm/trunk/tools/llvm-ar/llvm-ar.cpp +++ llvm/trunk/tools/llvm-ar/llvm-ar.cpp @@ -24,6 +24,7 @@ #include "llvm/Support/Errc.h" #include "llvm/Support/FileSystem.h" #include "llvm/Support/Format.h" +#include "llvm/Support/FormatVariadic.h" #include "llvm/Support/InitLLVM.h" #include "llvm/Support/LineIterator.h" #include "llvm/Support/MemoryBuffer.h" @@ -367,7 +368,11 @@ outs() << ' ' << format("%6llu", Size.get()); auto ModTimeOrErr = C.getLastModified(); failIfError(ModTimeOrErr.takeError()); - outs() << ' ' << ModTimeOrErr.get(); + // Note: formatv() only handles the default TimePoint<>, which is in + // nanoseconds. + // TODO: fix format_provider> to allow other units. + sys::TimePoint<> ModTimeInNs = ModTimeOrErr.get(); + outs() << ' ' << formatv("{0:%b %e %H:%M %Y}", ModTimeInNs); outs() << ' '; }