aboutsummaryrefslogtreecommitdiffstats
path: root/test/Object
diff options
context:
space:
mode:
authorChandler Carruth <chandlerc@gmail.com>2013-07-14 10:46:51 +0000
committerChandler Carruth <chandlerc@gmail.com>2013-07-14 10:46:51 +0000
commit3c0e8fbd4e3cc9bfed973e5ec46599bea824ee3d (patch)
treed1f7e641e47960770d60c84829b6385bfafd10cc /test/Object
parent8b2b8a18354546d534b72f912153a3252ab4b857 (diff)
downloadexternal_llvm-3c0e8fbd4e3cc9bfed973e5ec46599bea824ee3d.zip
external_llvm-3c0e8fbd4e3cc9bfed973e5ec46599bea824ee3d.tar.gz
external_llvm-3c0e8fbd4e3cc9bfed973e5ec46599bea824ee3d.tar.bz2
The archive update test has a subtle race condition in it: if the test
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
Diffstat (limited to 'test/Object')
-rw-r--r--test/Object/archive-update.test22
1 files changed, 15 insertions, 7 deletions
diff --git a/test/Object/archive-update.test b/test/Object/archive-update.test
index c381fff..20286d2 100644
--- a/test/Object/archive-update.test
+++ b/test/Object/archive-update.test
@@ -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