From: usa@...
Date: 2014-05-28T05:26:56+00:00
Subject: [ruby-core:62816] [ruby-trunk - Bug #9692] __builtin_longjmp is called with a value greater than 1 (GCC compilation error)

Issue #9692 has been updated by Usaku NAKAMURA.


Thank you.  I'll check it.

----------------------------------------
Bug #9692: __builtin_longjmp is called with a value greater than 1 (GCC compilation error)
https://bugs.ruby-lang.org/issues/9692#change-46939

* Author: Martin Li��ka
* Status: Closed
* Priority: Normal
* Assignee: 
* Category: 
* Target version: 
* ruby -v: 2.0.0-p353
* Backport: 2.0.0: REQUIRED, 2.1: REQUIRED
----------------------------------------
Hello,
    during testing of LTO on a gentoo machine:
Linux qemubox 3.12.13-gentoo #2 SMP Fri Mar 28 22:30:38 Local time zone must be set--see zic  x86_64 Intel(R) Core(TM) i7-4770 CPU @ 3.40GHz GenuineIntel GNU/Linux

Configure detects:

~~~
checking for __builtin_setjmp... yes
checking for setjmp type... __builtin_setjmp
~~~

Problem is that ruby calls longjmp with value greater than 1, e.g. `TAG_RAISE` (0x6). With `-flto` compiler proves that `__builtin_longjmp` is always called with such a value and following errors are displayed:

~~~
eval.c: In function ���rb_jump_tag���:
eval.c:668:5: error: ���__builtin_longjmp��� second argument must be 1
     JUMP_TAG(tag);
     ^
thread.c: In function ���rb_threadptr_to_kill���:
thread.c:1887:5: error: ���__builtin_longjmp��� second argument must be 1
     TH_JUMP_TAG(th, TAG_FATAL);
     ^
vm.c: In function ���vm_exec���:
vm.c:1413:3: error: ���__builtin_longjmp��� second argument must be 1
   JUMP_TAG(state);
   ^
eval.c: In function ���setup_exception���:
eval.c:437:34: error: ���__builtin_longjmp��� second argument must be 1
  if (INTERNAL_EXCEPTION_P(mesg)) JUMP_TAG(TAG_FATAL);
                                  ^
eval.c:502:2: error: ���__builtin_longjmp��� second argument must be 1
  JUMP_TAG(TAG_FATAL);
  ^
eval.c: In function ���rb_raise_jump���:
eval.c:662:5: error: ���__builtin_longjmp��� second argument must be 1
     JUMP_TAG(TAG_RAISE);
     ^
eval.c: In function ���rb_longjmp���:
eval.c:521:5: error: ���__builtin_longjmp��� second argument must be 1
     JUMP_TAG(tag);
     ^
gc.c: In function ���rb_memerror���:
gc.c:3417:2: error: ���__builtin_longjmp��� second argument must be 1
  JUMP_TAG(TAG_RAISE);
  ^
~~~

~~~
gcc --version:
gcc (GCC) 4.9.0 20140331 (experimental)
~~~


---Files--------------------------------
ruby-configure-builtin_longjmp.patch (573 Bytes)


-- 
https://bugs.ruby-lang.org/