From: "h.shirosaki (Hiroshi Shirosaki)" Date: 2012-07-28T17:27:36+09:00 Subject: [ruby-core:46828] [ruby-trunk - Bug #6794] x64 mingw: test_at(TestTime) failure Issue #6794 has been updated by h.shirosaki (Hiroshi Shirosaki). Thank you. Checked in. > BTW, 32bit mingw doesn't have 64s() family? It seems that gcc 4.6.1 (tdm gcc 32bit) doesn't have _localtime64_s. gcc 4.6.3 (rubenvb-4.6.3) i686-w64-mingw32 (32bit) has _localtime64_s. The following page's example worked with rubenvb-4.6.3. http://msdn.microsoft.com/en-us/library/a442x3ye(v=vs.80).aspx ---------------------------------------- Bug #6794: x64 mingw: test_at(TestTime) failure https://bugs.ruby-lang.org/issues/6794#change-28506 Author: h.shirosaki (Hiroshi Shirosaki) Status: Closed Priority: Normal Assignee: nobu (Nobuyoshi Nakada) Category: core Target version: 2.0.0 ruby -v: ruby 2.0.0dev (2012-07-25 trunk 36538) [x64-mingw32] x64 mingw has the following failure. [ 5/65] TestTime#test_at = 0.00 s 1) Failure: test_at(TestTime) [c:/Users/hiroshi/work/ruby/test/ruby/test_time.rb:194]: <-146138510344> expected but was <1970>. I guess Time.at(large value) fails for the following reason. Time.at calls FileTimeToSystemTime() in localtime_r(). https://github.com/ruby/ruby/blob/trunk/win32/win32.c#L6565 Time limit is 0x8000000000000000 which is a little smaller than 8bytes(= time_t)(= long long). http://msdn.microsoft.com/en-us/library/windows/desktop/ms724280(v=vs.85).aspx Instead, using _localtime_64s() seems to work fine. I changed to use _gmtime_64s() for consistency. I added declarations since mingw-w64 doesn't have these declaration. I attached a patch. -- http://bugs.ruby-lang.org/