summaryrefslogtreecommitdiff
path: root/lib/Support/Unix
diff options
context:
space:
mode:
authorAlexey Samsonov <samsonov@google.com>2013-02-19 11:35:39 +0000
committerAlexey Samsonov <samsonov@google.com>2013-02-19 11:35:39 +0000
commit9f306bdc70757d11b6510525938c0d92c5529cc7 (patch)
tree941ccd3ecde68d9577026c66925b02a0ae8d46fc /lib/Support/Unix
parent6ecccdbb2bf24a011b9c8ecbdd39be5a02269670 (diff)
downloadllvm-9f306bdc70757d11b6510525938c0d92c5529cc7.tar.gz
llvm-9f306bdc70757d11b6510525938c0d92c5529cc7.tar.bz2
llvm-9f306bdc70757d11b6510525938c0d92c5529cc7.tar.xz
Fix initialization-order bug in llvm::Support::TimeValue. TimeValue::now() is explicitly called during module initialization of lib/Support/Process.cpp. It reads the field of global object PosixZeroTime, which is not guaranteed to be initialized at this point. Found by AddressSanitizer with -fsanitize=init-order option.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@175509 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Support/Unix')
-rw-r--r--lib/Support/Unix/TimeValue.inc3
1 files changed, 2 insertions, 1 deletions
diff --git a/lib/Support/Unix/TimeValue.inc b/lib/Support/Unix/TimeValue.inc
index 5cf5a9d44e..df8558bf8b 100644
--- a/lib/Support/Unix/TimeValue.inc
+++ b/lib/Support/Unix/TimeValue.inc
@@ -48,7 +48,8 @@ TimeValue TimeValue::now() {
}
return TimeValue(
- static_cast<TimeValue::SecondsType>( the_time.tv_sec + PosixZeroTime.seconds_ ),
+ static_cast<TimeValue::SecondsType>( the_time.tv_sec +
+ PosixZeroTimeSeconds ),
static_cast<TimeValue::NanoSecondsType>( the_time.tv_usec *
NANOSECONDS_PER_MICROSECOND ) );
}