The archive update test has a subtle race condition in it: if the test
authorChandler Carruth <chandlerc@gmail.com>
Sun, 14 Jul 2013 10:46:51 +0000 (10:46 +0000)
committerChandler Carruth <chandlerc@gmail.com>
Sun, 14 Jul 2013 10:46:51 +0000 (10:46 +0000)
is executed within the same second as the inputs for the test are
checked out from the source tree, it will fail to update due to being
below the resolution of the 'mtime' test used.

Now, this may seem improbably to you... ok, maybe *really* improbable,
but consider a system which does distributed execution of tests by
shipping their inputs to another machine and runs them. That might cause
the mtime to be quite recent during the test run. ;]

Instead, create two files directly in the test (allowing all platforms
to see the problem) and add either a use of the 'touch' command that
forces one mtime to some time quite a bit in the past, or it sleeps for
just over a second to be outside of the precision window.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@186282 91177308-0d34-0410-b5e6-96231b3b80d8

test/Object/archive-update.test

index c381fff2bfc59e7420803047e9c3627acb892b53..20286d2669ad80bc99f4469fd363f6e6b56f05c8 100644 (file)
@@ -6,24 +6,32 @@ RUN: cd %T
 RUN: rm -f %t.a
 
 Create a file named evenlen that is newer than the evenlen on the source dir.
-RUN: mkdir -p %t.dir
-RUN: echo newer > %t.dir/evenlen
+RUN: mkdir -p %t.older
+RUN: echo older > %t.older/evenlen
+
+Either the shell supports the 'touch' command with a flag to manually set the
+mtime or we sleep for over a second so that the mtime is definitely observable.
+RUN: touch -m -t 200001010000 %t.older/evenlen || sleep 1.1
+
+RUN: mkdir -p %t.newer
+RUN: echo newer > %t.newer/evenlen
+RUN: touch %t.newer/evenlen
 
 Create an achive with the newest file
-RUN: llvm-ar r %t.a %t.dir/evenlen
+RUN: llvm-ar r %t.a %t.newer/evenlen
 RUN: llvm-ar p %t.a | FileCheck --check-prefix=NEWER %s
 
 Check that without the 'u' option the member is replaced with an older file.
-RUN: llvm-ar r %t.a %p/Inputs/evenlen
+RUN: llvm-ar r %t.a %t.older/evenlen
 RUN: llvm-ar p %t.a | FileCheck --check-prefix=OLDER %s
 
 Check that with the 'u' option the member is replaced with a newer file.
-RUN: llvm-ar ru %t.a %t.dir/evenlen
+RUN: llvm-ar ru %t.a %t.newer/evenlen
 RUN: llvm-ar p %t.a | FileCheck --check-prefix=NEWER %s
 
 Check that with the 'u' option the member is not replaced with an older file.
-RUN: llvm-ar ru %t.a %p/Inputs/evenlen
+RUN: llvm-ar ru %t.a %t.older/evenlen
 RUN: llvm-ar p %t.a | FileCheck --check-prefix=NEWER %s
 
 NEWER: newer
-OLDER: evenlen
+OLDER: older