From: Richard Biener Date: Mon, 30 Sep 2013 07:44:46 +0000 (+0000) Subject: re PR tree-optimization/58532 (bootstrap failure with BOOT_CFLAGS="-g -O3") X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=791d904434fc46397ff32cb6aceb9b54e5c866c1;p=gcc.git re PR tree-optimization/58532 (bootstrap failure with BOOT_CFLAGS="-g -O3") 2013-09-30 Richard Biener PR middle-end/58532 * tree-cfg.c (make_abnormal_goto_edges): Skip debug statements before looking for setjmp-like calls. * g++.dg/torture/pr58552.C: New testcase. From-SVN: r203024 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 93963893857..abd42c5a9e7 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2013-09-30 Richard Biener + + PR middle-end/58532 + * tree-cfg.c (make_abnormal_goto_edges): Skip debug statements + before looking for setjmp-like calls. + 2013-09-29 Iain Sandoe PR target/10901 diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 0543842af20..e18391479f0 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2013-09-30 Richard Biener + + PR middle-end/58532 + * g++.dg/torture/pr58552.C: New testcase. + 2013-09-27 Michael Meissner * gcc.target/powerpc/p8vector-ldst.c: New test for -mupper-regs-sf diff --git a/gcc/testsuite/g++.dg/torture/pr58552.C b/gcc/testsuite/g++.dg/torture/pr58552.C new file mode 100644 index 00000000000..17c0d1cf624 --- /dev/null +++ b/gcc/testsuite/g++.dg/torture/pr58552.C @@ -0,0 +1,29 @@ +// { dg-do compile } +// { dg-additional-options "-fcompare-debug" } + +extern void fancy_abort () __attribute__ ((__noreturn__)); +extern "C" { + struct __jmp_buf_tag { }; + typedef struct __jmp_buf_tag jmp_buf[1]; + extern int _setjmp (struct __jmp_buf_tag __env[1]) throw (); +} +extern void *gfc_state_stack; +static jmp_buf eof_buf; +static void push_state () +{ + if (!gfc_state_stack) + fancy_abort (); +} +bool gfc_parse_file (void) +{ + int seen_program=0; + if (_setjmp (eof_buf)) + return false; + if (seen_program) + goto duplicate_main; + seen_program = 1; + push_state (); + push_state (); +duplicate_main: + return true; +} diff --git a/gcc/tree-cfg.c b/gcc/tree-cfg.c index be661818340..f0dd2bc5039 100644 --- a/gcc/tree-cfg.c +++ b/gcc/tree-cfg.c @@ -1013,6 +1013,9 @@ make_abnormal_goto_edges (basic_block bb, bool for_call) break; } } + if (!gsi_end_p (gsi) + && is_gimple_debug (gsi_stmt (gsi))) + gsi_next_nondebug (&gsi); if (!gsi_end_p (gsi)) { /* Make an edge to every setjmp-like call. */