[Ada] Add a missing check for trivial predicates on non-discrete types
authorEd Schonberg <schonberg@adacore.com>
Mon, 16 Jul 2018 14:11:15 +0000 (14:11 +0000)
committerPierre-Marie de Rodat <pmderodat@gcc.gnu.org>
Mon, 16 Jul 2018 14:11:15 +0000 (14:11 +0000)
2018-07-16  Ed Schonberg  <schonberg@adacore.com>

gcc/ada/

* sem_ch3.adb (Inherit_Predicate_Flags): A non-discrete type may have a
static predicate (for example True) but has no
static_discrete_predicate.

From-SVN: r262716

gcc/ada/ChangeLog
gcc/ada/sem_ch3.adb

index 59597a3a39b7e182c0f5f9411f940e6fcb07d8fc..cd1aac0971ddf9b11554096f218cde5c34270edc 100644 (file)
@@ -1,3 +1,9 @@
+2018-07-16  Ed Schonberg  <schonberg@adacore.com>
+
+       * sem_ch3.adb (Inherit_Predicate_Flags): A non-discrete type may have a
+       static predicate (for example True) but has no
+       static_discrete_predicate.
+
 2018-07-16  Hristian Kirtchev  <kirtchev@adacore.com>
 
        * exp_attr.adb (Build_Record_VS_Func): Handle corner cases dealing with
index 43055e6987131267e7a0cfef305707822aa9e106..9a9c15003f6b3f9c5f9d36bb4e29fbfc4365d35a 100644 (file)
@@ -18615,11 +18615,15 @@ package body Sem_Ch3 is
       --  A named subtype does not inherit the predicate function of its
       --  parent but an itype declared for a loop index needs the discrete
       --  predicate information of its parent to execute the loop properly.
+      --  A non-discrete type may has a static predicate (for example True)
+      --  but has no static_discrete_predicate.
 
       if Is_Itype (Subt) and then Present (Predicate_Function (Par)) then
          Set_Subprograms_For_Type (Subt, Subprograms_For_Type (Par));
 
-         if Has_Static_Predicate (Par) then
+         if Has_Static_Predicate (Par)
+           and then Is_Discrete_Type (Par)
+         then
             Set_Static_Discrete_Predicate
               (Subt, Static_Discrete_Predicate (Par));
          end if;