[PATCH] Fix PR56982, handle setjmp like non-local labels

Ian Lance Taylor iant@google.com
Sun Apr 21 20:08:00 GMT 2013


On Sat, Apr 20, 2013 at 5:14 AM, Andreas Schwab <schwab@linux-m68k.org> wrote:
> Richard Biener <rguenther@suse.de> writes:
>
>>       PR tree-optimization/56982
>>       * builtins.def (BUILT_IN_LONGJMP): longjmp is not a leaf
>>       function.
>>       * gimplify.c (gimplify_call_expr): Notice special calls.
>>       (gimplify_modify_expr): Likewise.
>>       * tree-cfg.c (make_abnormal_goto_edges): Handle setjmp-like
>>       abnormal control flow receivers.
>>       (call_can_make_abnormal_goto): Handle cfun->calls_setjmp
>>       in the same way as cfun->has_nonlocal_labels.
>>       (gimple_purge_dead_abnormal_call_edges): Likewise.
>>       (stmt_starts_bb_p): Make setjmp-like abnormal control flow
>>       receivers start a basic-block.
>
> This breaks libgo.
>
> ../../../gcc/libgo/runtime/proc.c: In function ‘runtime_mcall.constprop.7’:
> ../../../gcc/libgo/runtime/proc.c:419:13: error: ‘({anonymous})’ may be used uninitialized in this function [-Werror=maybe-uninitialized]
>    getcontext(&gp->context);
>              ^

That's an unusually useless error message.  There are no local structs
in this function.  Without digging into the compiler I'm not sure what
this means or how to fix it.

Ian



More information about the Gcc-patches mailing list