aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorSteven Bosscher <steven@gcc.gnu.org>2006-09-10 20:08:58 +0000
committerSteven Bosscher <steven@gcc.gnu.org>2006-09-10 20:08:58 +0000
commit4fe337f67a76d1b8288a3c63dec86dbaed77da4c (patch)
tree2a5c9f6b9fe4b4a6d75c7244076cbbdc460f588c /gcc
parent9226543b679c84014627a7bdec0503061b3af43d (diff)
downloadgcc-4fe337f67a76d1b8288a3c63dec86dbaed77da4c.zip
gcc-4fe337f67a76d1b8288a3c63dec86dbaed77da4c.tar.gz
gcc-4fe337f67a76d1b8288a3c63dec86dbaed77da4c.tar.bz2
re PR middle-end/26983 (Missing label with builtin_setjmp/longjmp)
PR middle-end/26983 gcc/ * builtins.c (expand_builtin_setjmp): Force next_lab to be preserved. testsuite/ * gcc.dg/pr26983.c: New test. From-SVN: r116826
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/builtins.c6
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gcc.dg/pr26983.c19
4 files changed, 36 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index a389b50..c4066f3 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2006-09-10 Steven Bosscher <steven@gcc.gnu.org>
+
+ PR middle-end/26983
+ * builtins.c (expand_builtin_setjmp): Force next_lab to be
+ preserved.
+
2006-09-10 Richard Sandiford <richard@codesourcery.com>
PR target/29006
diff --git a/gcc/builtins.c b/gcc/builtins.c
index 1f62dca..5bcba14 100644
--- a/gcc/builtins.c
+++ b/gcc/builtins.c
@@ -760,6 +760,12 @@ expand_builtin_setjmp (tree arglist, rtx target)
emit_label (next_lab);
+ /* Because setjmp and longjmp are not represented in the CFG, a cfgcleanup
+ may find that the basic block starting with NEXT_LAB is unreachable.
+ The whole block, along with NEXT_LAB, would be removed (see PR26983).
+ Make sure that never happens. */
+ LABEL_PRESERVE_P (next_lab) = 1;
+
expand_builtin_setjmp_receiver (next_lab);
/* Set TARGET to one. */
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index ce2c223..55eee6b 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2006-09-10 Steven Bosscher <steven@gcc.gnu.org>
+
+ PR middle-end/26983
+ * gcc.dg/pr26983.c: New test.
+
2006-09-10 Richard Sandiford <richard@codesourcery.com>
PR target/29006
diff --git a/gcc/testsuite/gcc.dg/pr26983.c b/gcc/testsuite/gcc.dg/pr26983.c
new file mode 100644
index 0000000..5e2120a
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pr26983.c
@@ -0,0 +1,19 @@
+/* { dg-do link } */
+
+/* This used to cause a linker failure because GCC would output
+ assembler code referencing labels that it had not output. */
+
+void *jmpbuf[6];
+
+void
+foo (void)
+{
+ __builtin_setjmp (jmpbuf);
+}
+
+int
+main (void)
+{
+ return 0;
+}
+