Project

General

Profile

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) 
 ~~~ 

Back