[Ada] Fix compiler abort on invalid discriminant constraint
authorPatrick Bernardi <bernardi@adacore.com>
Tue, 22 May 2018 13:26:05 +0000 (13:26 +0000)
committerPierre-Marie de Rodat <pmderodat@gcc.gnu.org>
Tue, 22 May 2018 13:26:05 +0000 (13:26 +0000)
This patch fixes a compiler abort on a discriminant constraint when the
constraint is a subtype indication.

2018-05-22  Patrick Bernardi  <bernardi@adacore.com>

gcc/ada/

* sem_ch3.adb (Build_Discriminant_Constraints): Raise an error if the
user tries to use a subtype indication as a discriminant constraint.

gcc/testsuite/

* gnat.dg/discr50.adb: New testcase.

From-SVN: r260525

gcc/ada/ChangeLog
gcc/ada/sem_ch3.adb
gcc/testsuite/ChangeLog
gcc/testsuite/gnat.dg/discr50.adb [new file with mode: 0644]

index aa3a1c034b771b5423f9096a8191f54a08d4fbe6..5a5905731faf08e495eb71db93e84ab8074c1666 100644 (file)
@@ -1,3 +1,8 @@
+2018-05-22  Patrick Bernardi  <bernardi@adacore.com>
+
+       * sem_ch3.adb (Build_Discriminant_Constraints): Raise an error if the
+       user tries to use a subtype indication as a discriminant constraint.
+
 2018-05-22  Ed Schonberg  <schonberg@adacore.com>
 
        * exp_ch4.ads, exp_ch4.adb, exp_util.adb, expander.adb: Remove mention
index 994562d8a106f353bf64823e9e5daa999ae115bb..83938c24b722f5b62e11d6848b81e36c47625388 100644 (file)
@@ -9877,6 +9877,12 @@ package body Sem_Ch3 is
               ("a range is not a valid discriminant constraint", Constr);
             Discr_Expr (D) := Error;
 
+         elsif Nkind (Constr) = N_Subtype_Indication then
+            Error_Msg_N
+              ("a subtype indication is not a valid discriminant constraint",
+               Constr);
+            Discr_Expr (D) := Error;
+
          else
             Process_Discriminant_Expression (Constr, Discr);
             Discr_Expr (D) := Constr;
index 74b4d34704d9d4d00e223cc0b793556f7ac12b89..8df5df8882d4d2f041463e2fcee98150cc884464 100644 (file)
@@ -1,3 +1,7 @@
+2018-05-22  Patrick Bernardi  <bernardi@adacore.com>
+
+       * gnat.dg/discr50.adb: New testcase.
+
 2018-05-22  Ed Schonberg  <schonberg@adacore.com>
 
        * gnat.dg/discr49.adb, gnat.dg/discr49_rec1.adb,
diff --git a/gcc/testsuite/gnat.dg/discr50.adb b/gcc/testsuite/gnat.dg/discr50.adb
new file mode 100644 (file)
index 0000000..e7de16d
--- /dev/null
@@ -0,0 +1,11 @@
+--  { dg-do compile }
+
+procedure Discr50 is
+   type My_Record (D : Integer) is record
+      A : Integer;
+   end record;
+
+   B : My_Record (Positive range 1 .. 10);  -- { dg-error "a subtype indication is not a valid discriminant constraint" }
+begin
+   null;
+end Discr50;