aboutsummaryrefslogtreecommitdiff
path: root/gcc/testsuite
diff options
context:
space:
mode:
authorGary Dismukes <dismukes@adacore.com>2018-07-31 09:55:53 +0000
committerPierre-Marie de Rodat <pmderodat@gcc.gnu.org>2018-07-31 09:55:53 +0000
commit76ed5f08f4462d7d22bc6cda3624e131e65bdd52 (patch)
tree054114f442c2e9e2489c8dd2bcb09c35b7aaed8f /gcc/testsuite
parentc4a2e585d3b4e829f48fcb3c2a825584890b4fda (diff)
downloadgcc-76ed5f08f4462d7d22bc6cda3624e131e65bdd52.zip
gcc-76ed5f08f4462d7d22bc6cda3624e131e65bdd52.tar.gz
gcc-76ed5f08f4462d7d22bc6cda3624e131e65bdd52.tar.bz2
[Ada] Compiler failure on an extended_return_statement in a block
When compiling with an assertion-enabled compiler, Assert_Failure can be raised when expanded an extended_return_statement whose enclosing scope is not a function (such as when it's a block_statement). The simple fix is to change the Assert to test Current_Subprogram rather than Current_Scope. Three such Assert pragmas are corrected in this way. 2018-07-31 Gary Dismukes <dismukes@adacore.com> gcc/ada/ * exp_ch6.adb (Expand_N_Extended_Return_Statement): Replace calls to Current_Scope in three assertions with calls to Current_Subprogram. gcc/testsuite/ * gnat.dg/block_ext_return_assert_failure.adb: New testcase. From-SVN: r263096
Diffstat (limited to 'gcc/testsuite')
-rw-r--r--gcc/testsuite/ChangeLog4
-rw-r--r--gcc/testsuite/gnat.dg/block_ext_return_assert_failure.adb24
2 files changed, 28 insertions, 0 deletions
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index fd3079c..2258aa2 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,7 @@
+2018-07-31 Gary Dismukes <dismukes@adacore.com>
+
+ * gnat.dg/block_ext_return_assert_failure.adb: New testcase.
+
2018-07-31 Ed Schonberg <schonberg@adacore.com>
* gnat.dg/iter3.adb: New testcase.
diff --git a/gcc/testsuite/gnat.dg/block_ext_return_assert_failure.adb b/gcc/testsuite/gnat.dg/block_ext_return_assert_failure.adb
new file mode 100644
index 0000000..afd66b3
--- /dev/null
+++ b/gcc/testsuite/gnat.dg/block_ext_return_assert_failure.adb
@@ -0,0 +1,24 @@
+-- { dg-do compile }
+
+-- This test used to crash a compiler with assertions enabled
+
+procedure Block_Ext_Return_Assert_Failure is
+
+ function Return_Int return Integer is
+ begin
+ return 123;
+ end Return_Int;
+
+ function F return Integer is
+ begin
+ declare
+ begin
+ return Result : constant Integer := Return_Int do
+ null;
+ end return;
+ end;
+ end F;
+
+begin
+ null;
+end Block_Ext_Return_Assert_Failure;