aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Biener <rguenther@suse.de>2013-09-30 07:44:46 +0000
committerRichard Biener <rguenth@gcc.gnu.org>2013-09-30 07:44:46 +0000
commit791d904434fc46397ff32cb6aceb9b54e5c866c1 (patch)
tree247af8bcead132510254cb0f2cb1e3344517bb50 /gcc
parentcb2c51a4976f31138d74715226d0a4986afadfaf (diff)
downloadgcc-791d904434fc46397ff32cb6aceb9b54e5c866c1.zip
gcc-791d904434fc46397ff32cb6aceb9b54e5c866c1.tar.gz
gcc-791d904434fc46397ff32cb6aceb9b54e5c866c1.tar.bz2
re PR tree-optimization/58532 (bootstrap failure with BOOT_CFLAGS="-g -O3")
2013-09-30 Richard Biener <rguenther@suse.de> 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
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/g++.dg/torture/pr58552.C29
-rw-r--r--gcc/tree-cfg.c3
4 files changed, 43 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 9396389..abd42c5 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2013-09-30 Richard Biener <rguenther@suse.de>
+
+ 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 <iain@codesourcery.com>
PR target/10901
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 0543842..e183914 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2013-09-30 Richard Biener <rguenther@suse.de>
+
+ PR middle-end/58532
+ * g++.dg/torture/pr58552.C: New testcase.
+
2013-09-27 Michael Meissner <meissner@linux.vnet.ibm.com>
* 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 0000000..17c0d1c
--- /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 be66181..f0dd2bc 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. */