Bug #9692
Updated by nobu (Nobuyoshi Nakada) over 10 years ago
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` TAG_RAISE (0x6). With `-flto` -flto compiler proves that `__builtin_longjmp` __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) ~~~