summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/gimple-low.c3
-rw-r--r--gcc/testsuite/ChangeLog6
-rw-r--r--gcc/testsuite/gnat.dg/return3.adb9
4 files changed, 22 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 5ea011856a3..a8f86616a65 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+2011-04-06 Eric Botcazou <ebotcazou@adacore.com>
+
+ * gimple-low.c (lower_gimple_return): When not optimizing, force labels
+ associated with user returns to be preserved.
+
2011-04-06 Tristan Gingold <gingold@adacore.com>
* dbxout.c: (debug_nesting, symbol_queue, symbol_queue_index)
diff --git a/gcc/gimple-low.c b/gcc/gimple-low.c
index 67087a0aadc..9d774429bab 100644
--- a/gcc/gimple-low.c
+++ b/gcc/gimple-low.c
@@ -758,6 +758,9 @@ lower_gimple_return (gimple_stmt_iterator *gsi, struct lower_data *data)
/* Generate a goto statement and remove the return statement. */
found:
+ /* When not optimizing, make sure user returns are preserved. */
+ if (!optimize && gimple_has_location (stmt))
+ DECL_ARTIFICIAL (tmp_rs.label) = 0;
t = gimple_build_goto (tmp_rs.label);
gimple_set_location (t, gimple_location (stmt));
gimple_set_block (t, gimple_block (stmt));
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index c7e70b25205..cb11813f291 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,5 +1,9 @@
+2011-04-06 Eric Botcazou <ebotcazou@adacore.com>
+
+ * gnat.dg/return3.adb: New test.
+
2011-04-06 Richard Guenther <rguenther@suse.de>
-
+
PR tree-optimization/47663
* gcc.dg/tree-ssa/inline-8.c: New testcase.
diff --git a/gcc/testsuite/gnat.dg/return3.adb b/gcc/testsuite/gnat.dg/return3.adb
new file mode 100644
index 00000000000..7ebe7499005
--- /dev/null
+++ b/gcc/testsuite/gnat.dg/return3.adb
@@ -0,0 +1,9 @@
+-- { dg-do compile { target *-*-linux* } }
+-- { dg-options "-gdwarf-2 -dA" }
+
+procedure Return3 is
+begin
+ return;
+end;
+
+-- { dg-final { scan-assembler "loc 1 6" } }