Backport #7946

1.9.3-p385以降でclangでのビルド時にエラー(error: implicit conversion loses integer precision)

Added by d6rkaiz (Isao Sugimoto) about 8 years ago. Updated about 8 years ago.




OS X 10.8.2でclangでビルドを行う際にruby 1.9.3-p385以降でclangでコンパイル時にエラーとなるようになりました。

1.9.3-p385 および 1.9.3-p392 で発生します。


 Inspect or clean up the working tree at /var/folders/t0/n008mdzj4nz0_cswflz6xwch0000gn/T/ruby-build.20130223143931.52037
 Results logged to /var/folders/t0/n008mdzj4nz0_cswflz6xwch0000gn/T/ruby-build.20130223143931.52037.log

 Last 10 log lines:
 compiling safe.c
 compiling signal.c
 compiling sprintf.c
 compiling st.c
 st.c:520:35: error: implicit conversion loses integer precision: 'st_index_t' (aka 'unsigned long') to 'int' [-Werror,-Wshorten-64-to-32]
             i = table->num_entries++;
               ~ ~~~~~~~~~~~~~~~~~~^~
 1 error generated.
 make: *** [st.o] Error 1
 make: *** Waiting for unfinished jobs....


 $ clang -v
 Apple LLVM version 4.2 (clang-425.0.24) (based on LLVM 3.2svn)
 Target: x86_64-apple-darwin12.2.1
 Thread model: posix



Related issues

Related to Ruby master - Bug #7938: Stack consistency error while compiling 2.0.0-p0Third Party's Issuemrkn (Kenta Murata)02/24/2013Actions

Updated by sorah (Sorah Fukumori) about 8 years ago

  • Assignee set to mrkn (Kenta Murata)

Updated by naruse (Yui NARUSE) about 8 years ago

I noticed that clang version 4.1 doesn't fail.

% clang --version
Apple clang version 4.1 (tags/Apple/clang-421.11.66) (based on LLVM 3.1svn)
Target: x86_64-apple-darwin12.2.1
Thread model: posix

But clang version 4.2 fails.

% clang --version
Apple LLVM version 4.2 (clang-425.0.24) (based on LLVM 3.2svn)
Target: x86_64-apple-darwin12.2.1
Thread model: posix

Anyway Ruby should avoid this.


Updated by naruse (Yui NARUSE) about 8 years ago

  • Tracker changed from Bug to Backport
  • Project changed from Ruby master to Backport193
  • Status changed from Open to Assigned
  • Assignee changed from mrkn (Kenta Murata) to usa (Usaku NAKAMURA)
  • Priority changed from Normal to 5

1.9.3 のみに影響します。以下のパッチで回避できます。

Index: st.c

--- st.c (revision 39476)
+++ st.c (working copy)
@@ -515,7 +515,7 @@
st_index_t hash_val, bin_pos;

 if (table->entries_packed) {
  • int i;
  • st_index_t i; if (MORE_PACKABLE_P(table)) { i = table->num_entries++; table->bins[i*2] = (struct st_table_entry*)key; Index: thread.c =================================================================== --- thread.c (revision 39476) +++ thread.c (working copy) @@ -2161,7 +2161,7 @@ static int vm_living_thread_num(rb_vm_t *vm) {
  • return vm->living_threads->num_entries;
  • return (int)vm->living_threads->num_entries; }



Updated by usa (Usaku NAKAMURA) about 8 years ago

  • Status changed from Assigned to Closed
  • % Done changed from 0 to 100

This issue was solved with changeset r39503.
Isao, thank you for reporting this issue.
Your contribution to Ruby is greatly appreciated.
May Ruby be with you.

  • st.c (st_add_direct): int is not always same with st_index_t. some
    version of clang reports error.

  • thread.c (vm_living_thread_num): ditto.
    reported by d6rkaiz (Isao Sugimoto) at [ruby-dev:47096]
    [Backport #7946]

Also available in: Atom PDF