Project

General

Profile

Actions

Bug #17645

closed

`shorten-64-to-32` errors with Clang 11.1.0 for 32-bit targets w.r.t. `time_t` (maybe Y2038?)

Added by xtkoba (Tee KOBAYASHI) about 3 years ago. Updated about 3 years ago.

Status:
Closed
Assignee:
-
Target version:
-
ruby -v:
ruby 3.1.0dev (2021-02-19 master a319c04818) [i686-linux]
[ruby-core:<unknown>]

Description

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) ruby-time_t.patch xtkoba (Tee KOBAYASHI), 02/19/2021 03:06 PM
Actions

Also available in: Atom PDF

Like0
Like0Like0Like0Like0Like0Like0Like0