aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJavier Miranda <miranda@adacore.com>2018-05-21 14:51:55 +0000
committerPierre-Marie de Rodat <pmderodat@gcc.gnu.org>2018-05-21 14:51:55 +0000
commit0d8b6803b9abafea59b08702a582605316544245 (patch)
tree6a5c9a055df005c62cd3d9c31cb411a45638b9e3 /gcc
parent926890219d00e4f59cdc3afe4aba490049df04bd (diff)
downloadgcc-0d8b6803b9abafea59b08702a582605316544245.zip
gcc-0d8b6803b9abafea59b08702a582605316544245.tar.gz
gcc-0d8b6803b9abafea59b08702a582605316544245.tar.bz2
[Ada] Avoid compiler crash for body in non Ada 2012 mode
2018-05-21 Javier Miranda <miranda@adacore.com> gcc/ada/ * sem_ch4.adb (Analyze_Membership_Op): Avoid compiler crash when the spec of a unit has Ada 2012 membership tests with multiple choices and the unit body is not compiled under Ada 2012 mode. From-SVN: r260464
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ada/ChangeLog6
-rw-r--r--gcc/ada/sem_ch4.adb12
2 files changed, 15 insertions, 3 deletions
diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog
index 1d41d1e..d21a5d9 100644
--- a/gcc/ada/ChangeLog
+++ b/gcc/ada/ChangeLog
@@ -1,3 +1,9 @@
+2018-04-04 Javier Miranda <miranda@adacore.com>
+
+ * sem_ch4.adb (Analyze_Membership_Op): Avoid compiler crash when the
+ spec of a unit has Ada 2012 membership tests with multiple choices and
+ the unit body is not compiled under Ada 2012 mode.
+
2018-04-04 Doug Rupp <rupp@adacore.com>
* sigtramp-vxworks-target.inc: Set cfa_reg properly from sigcontext
diff --git a/gcc/ada/sem_ch4.adb b/gcc/ada/sem_ch4.adb
index e1e826e..2452cf9 100644
--- a/gcc/ada/sem_ch4.adb
+++ b/gcc/ada/sem_ch4.adb
@@ -3030,9 +3030,15 @@ package body Sem_Ch4 is
begin
Analyze_Expression (L);
- if No (R) and then Ada_Version >= Ada_2012 then
- Analyze_Set_Membership;
- Check_Function_Writable_Actuals (N);
+ if No (R) then
+ if Ada_Version >= Ada_2012 then
+ Analyze_Set_Membership;
+ Check_Function_Writable_Actuals (N);
+ else
+ Error_Msg_N
+ ("multiple choices in membership tests only allowed in Ada 2012",
+ N);
+ end if;
return;
end if;