diff options
author | Alexey Samsonov <samsonov@google.com> | 2013-02-19 11:35:39 +0000 |
---|---|---|
committer | Alexey Samsonov <samsonov@google.com> | 2013-02-19 11:35:39 +0000 |
commit | f940f0c417d196f037763e0425873ba2e0acf475 (patch) | |
tree | 852822836b1324a7dd46a3a1e93a21c01f554afe /llvm/lib/Support/TimeValue.cpp | |
parent | 9f298da9bd4ad5ecaa51fc137fb670fe288950dc (diff) | |
download | bcm5719-llvm-f940f0c417d196f037763e0425873ba2e0acf475.tar.gz bcm5719-llvm-f940f0c417d196f037763e0425873ba2e0acf475.zip |
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.
llvm-svn: 175509
Diffstat (limited to 'llvm/lib/Support/TimeValue.cpp')
-rw-r--r-- | llvm/lib/Support/TimeValue.cpp | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/llvm/lib/Support/TimeValue.cpp b/llvm/lib/Support/TimeValue.cpp index 1a0f7bc3639..bd8af174bcd 100644 --- a/llvm/lib/Support/TimeValue.cpp +++ b/llvm/lib/Support/TimeValue.cpp @@ -17,11 +17,16 @@ namespace llvm { using namespace sys; +const TimeValue::SecondsType + TimeValue::PosixZeroTimeSeconds = -946684800; +const TimeValue::SecondsType + TimeValue::Win32ZeroTimeSeconds = -12591158400ULL; + const TimeValue TimeValue::MinTime = TimeValue ( INT64_MIN,0 ); const TimeValue TimeValue::MaxTime = TimeValue ( INT64_MAX,0 ); const TimeValue TimeValue::ZeroTime = TimeValue ( 0,0 ); -const TimeValue TimeValue::PosixZeroTime = TimeValue ( -946684800,0 ); -const TimeValue TimeValue::Win32ZeroTime = TimeValue ( -12591158400ULL,0 ); +const TimeValue TimeValue::PosixZeroTime = TimeValue ( PosixZeroTimeSeconds,0 ); +const TimeValue TimeValue::Win32ZeroTime = TimeValue ( Win32ZeroTimeSeconds,0 ); void TimeValue::normalize( void ) { |