[multiple changes]
authorArnaud Charlet <charlet@gcc.gnu.org>
Wed, 12 Oct 2016 12:57:23 +0000 (14:57 +0200)
committerArnaud Charlet <charlet@gcc.gnu.org>
Wed, 12 Oct 2016 12:57:23 +0000 (14:57 +0200)
2016-10-12  Justin Squirek  <squirek@adacore.com>

* sem_ch10.adb (Remove_Limited_With_Clause): Add a check to
detect accidental visibility.

2016-10-12  Ed Schonberg  <schonberg@adacore.com>

* exp_ch4.adb (Expand_Allocator): If the expression is a qualified
expression, add a predicate check after the constraint check.
* sem_res.adb (Resolve_Qualified_Expression): If context is an
allocator, do not apply predicate check, as it will be done when
allocator is expanded.

From-SVN: r241040

gcc/ada/ChangeLog
gcc/ada/exp_ch4.adb
gcc/ada/sem_ch10.adb
gcc/ada/sem_res.adb

index 101ea652c0c5e48eaf046f7f3778ebbe1cfbb5d2..33383e7b55e8304ea02d3e22ce41fd44521b5b33 100644 (file)
@@ -1,3 +1,16 @@
+2016-10-12  Justin Squirek  <squirek@adacore.com>
+
+       * sem_ch10.adb (Remove_Limited_With_Clause): Add a check to
+       detect accidental visibility.
+
+2016-10-12  Ed Schonberg  <schonberg@adacore.com>
+
+       * exp_ch4.adb (Expand_Allocator): If the expression is a qualified
+       expression, add a predicate check after the constraint check.
+       * sem_res.adb (Resolve_Qualified_Expression): If context is an
+       allocator, do not apply predicate check, as it will be done when
+       allocator is expanded.
+
 2016-10-12  Bob Duff  <duff@adacore.com>
 
        * xref_lib.adb: Use renamings-of-slices to ensure
index f6a5c2c9067bc2a95a8332f674eb89baf29a6e23..77b70127b5076b89ccd9948e04130aabe6bdee83 100644 (file)
@@ -4279,8 +4279,13 @@ package body Exp_Ch4 is
       --  in the aggregate might not match the subtype mark in the allocator.
 
       if Nkind (Expression (N)) = N_Qualified_Expression then
-         Apply_Constraint_Check
-           (Expression (Expression (N)), Etype (Expression (N)));
+         declare
+            Exp : constant Node_Id := Expression (Expression (N));
+            Typ : constant Entity_Id := Etype (Expression (N));
+         begin
+            Apply_Constraint_Check (Exp, Typ);
+            Apply_Predicate_Check  (Exp, Typ);
+         end;
 
          Expand_Allocator_Expression (N);
          return;
index 86dbad06f52222a0e21e856a7bb284ae8fa15b7b..115b2dd1e7765b2f66ee806dd793af61a34a26d7 100644 (file)
@@ -6377,6 +6377,13 @@ package body Sem_Ch10 is
       --  Limited_Withed_Unit.
 
       else
+         --  If the limited_with_clause is in some other unit in the context
+         --  then it is not visible in the main unit.
+
+         if not In_Extended_Main_Source_Unit (N) then
+            Set_Is_Immediately_Visible (P, False);
+         end if;
+
          --  Real entities that are type or subtype declarations were hidden
          --  from visibility at the point of installation of the limited-view.
          --  Now we recover the previous value of the hidden attribute.
index 47a6725705191d61ecdbc593f7eed0bdd2d7a486..86691d9e9a5a8c96de6bb745177499ca7986991b 100644 (file)
@@ -9495,7 +9495,12 @@ package body Sem_Res is
          then
             null;
 
-         elsif Nkind (N) = N_Qualified_Expression then
+         --  In the case of a qualified expression in an allocator, the check
+         --  is applied when expanding the allocator, so avoid redundant check.
+
+         elsif Nkind (N) = N_Qualified_Expression
+           and then Nkind (Parent (N)) /= N_Allocator
+         then
             Apply_Predicate_Check (N, Target_Typ);
          end if;
       end if;