From 3c0e8fbd4e3cc9bfed973e5ec46599bea824ee3d Mon Sep 17 00:00:00 2001 From: Chandler Carruth Date: Sun, 14 Jul 2013 10:46:51 +0000 Subject: 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 --- test/Object/archive-update.test | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) (limited to 'test/Object') 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 -- cgit v1.1