Issue #17645 has been updated by nobu (Nobuyoshi Nakada).


Alternative solution would be to define `rb_time64_t` for `rb_time_nano_new` (and `rb_time_new`), but may be an overkill.

----------------------------------------
Bug #17645: `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-90889

* 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: <mailto:ruby-core-request / ruby-lang.org?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>