From: xtkoba+ruby@... Date: 2021-03-11T07:31:54+00:00 Subject: [ruby-core:102821] [Ruby master Bug#17645] `shorten-64-to-32` errors with Clang 11.1.0 for 32-bit targets w.r.t. `time_t` (maybe Y2038?)`shorten-64-to-32` errors with Clang 11.1.0 for 32-bit targets w.r.t. `time_t` (maybe Y2038?) Issue #17645 has been updated by xtkoba (Tee KOBAYASHI). Subject changed from `make` stops at `file.c` with Clang 11.1.0 for 32-bit GNU/Linux targets (maybe Y2038?) to `shorten-64-to-32` errors with Clang 11.1.0 for 32-bit targets w.r.t. `time_t` (maybe Y2038?)`shorten-64-to-32` errors with Clang 11.1.0 for 32-bit targets w.r.t. `time_t` (maybe Y2038?) I encountered another compilation error of `shorten-64-to-32` for 32-bit musl targets, where `time_t` is 64-bit. A workaround: ``` --- a/thread_sync.c +++ b/thread_sync.c @@ -560,7 +560,7 @@ rb_mutex_sleep(VALUE self, VALUE timeout RUBY_VM_CHECK_INTS_BLOCKING(GET_EC()); time_t end = time(0) - beg; - return INT2FIX(end); + return INT2FIX((long)end); } /* ``` This case, however, does not seem to cause an Y2038 problem in the real world, as the value of `end` is a time difference in seconds and will almost always be less than 2^31. We need only to suppress the compilation error. ---------------------------------------- Bug #17645: `shorten-64-to-32` errors with Clang 11.1.0 for 32-bit targets w.r.t. `time_t` (maybe Y2038?)`shorten-64-to-32` errors with Clang 11.1.0 for 32-bit targets w.r.t. `time_t` (maybe Y2038?) https://bugs.ruby-lang.org/issues/17645#change-90879 * Author: xtkoba (Tee KOBAYASHI) * Status: Open * Priority: Normal * ruby -v: ruby 3.1.0dev (2021-02-19 master a319c04818) [i686-linux] * Backport: 2.5: UNKNOWN, 2.6: UNKNOWN, 2.7: UNKNOWN, 3.0: UNKNOWN ---------------------------------------- Targeting to i686-linux-gnu or armv7a-linux-gnu, Clang/LLVM 11.1.0 fails to compile `file.c`: ``` compiling file.c file.c:1256:44: error: implicit conversion loses integer precision: 'const __s64' (aka 'const long long') to 'time_t' (aka 'long') [-Werror,-Wshorten-64-to-32] return rb_time_nano_new(stx->stx_btime.tv_sec, stx->stx_btime.tv_nsec); ~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~^~~~~~ 1 error generated. make: *** [Makefile:428: file.o] Error 1 ``` A workaround is to explicitly cast the first argument of `rb_time_nano_new`, as in the attached patch. It will work until 2038. ---Files-------------------------------- ruby-time_t.patch (358 Bytes) -- https://bugs.ruby-lang.org/ Unsubscribe: