[multiple changes]
authorPierre-Marie de Rodat <pmderodat@gcc.gnu.org>
Mon, 25 Sep 2017 09:34:10 +0000 (09:34 +0000)
committerPierre-Marie de Rodat <pmderodat@gcc.gnu.org>
Mon, 25 Sep 2017 09:34:10 +0000 (09:34 +0000)
2017-09-25  Piotr Trojanek  <trojanek@adacore.com>

* adabkend.adb (Call_Back_End): Fix wording of "front-end" and
"back-end" in comments.

2017-09-25  Ed Schonberg  <schonberg@adacore.com>

* exp_ch6.adb (Expand_Call_Helper): The extra accessibility check in a
call that appears in a classwide precondition and that mentions an
access formal of the subprogram, must use the accessibility level of
the actual in the call. This is one case in which a reference to a
formal parameter appears outside of the body of the subprogram.

From-SVN: r253141

gcc/ada/ChangeLog
gcc/ada/adabkend.adb
gcc/ada/exp_ch6.adb

index 3780b1db1b23f79398a774f98a1decc0b4299fdc..979748ed75d14b2a453a18593df821ef902be253 100644 (file)
@@ -1,3 +1,16 @@
+2017-09-25  Piotr Trojanek  <trojanek@adacore.com>
+
+       * adabkend.adb (Call_Back_End): Fix wording of "front-end" and
+       "back-end" in comments.
+
+2017-09-25  Ed Schonberg  <schonberg@adacore.com>
+
+       * exp_ch6.adb (Expand_Call_Helper): The extra accessibility check in a
+       call that appears in a classwide precondition and that mentions an
+       access formal of the subprogram, must use the accessibility level of
+       the actual in the call. This is one case in which a reference to a
+       formal parameter appears outside of the body of the subprogram.
+
 2017-09-25  Hristian Kirtchev  <kirtchev@adacore.com>
 
        * sem_res.adb (Replace_Actual_Discriminants): Replace a discriminant
index 3c84a483a58d1e86b79b99923080acce2dc6d904..2ab4b19a1d8d515c94691a1c3ebc7cce52a8aa92 100644 (file)
@@ -57,10 +57,10 @@ package body Adabkend is
          Write_Eol;
       end if;
 
-      --  Frontend leaves the Current_Error_Node at a location that is
-      --  meaningless and confusing when emitting bugboxes from the backed. By
-      --  resetting it here we default to "No source file position information
-      --  available" message on backend crashes.
+      --  The front end leaves the Current_Error_Node at a location that is
+      --  meaningless and confusing when emitting bug boxes from the back end.
+      --  By resetting it here we default to "No source file position
+      --  information available" message on back end crashes.
 
       Current_Error_Node := Empty;
 
@@ -91,7 +91,7 @@ package body Adabkend is
       --
       --  If the switch is not valid, control will not return. The switches
       --  must still be scanned to skip the "-o" arguments, or internal GCC
-      --  switches, which may be safely ignored by other back-ends.
+      --  switches, which may be safely ignored by other back ends.
 
       ----------------------------
       -- Scan_Back_End_Switches --
@@ -251,7 +251,7 @@ package body Adabkend is
                else
                   Add_Src_Search_Dir (Argv);
 
-                  --  Add directory to lib search so that back-end can take as
+                  --  Add directory to lib search so that back end can take as
                   --  input ALI files if needed. Otherwise this won't have any
                   --  impact on the compiler.
 
index c2edde696f7d87bd7ecc43ba282566861551117c..2ee1c7879c62b3f269463cc31f3a7c46ccc8a658 100644 (file)
@@ -3004,6 +3004,20 @@ package body Exp_Ch6 is
             then
                Prev_Orig := Prev;
 
+            --  A class-wide precondition generates a test in which formals of
+            --  the subprogram are replaced by actuals that came from source.
+            --  In that case as well, the accessiblity comes from the actual.
+            --  This is the one case in which there are references to formals
+            --  outside of their subprogram.
+
+            elsif Prev_Orig /= Prev
+              and then Is_Entity_Name (Prev_Orig)
+              and then Present (Entity (Prev_Orig))
+              and then Is_Formal (Entity (Prev_Orig))
+              and then not In_Open_Scopes (Scope (Entity (Prev_Orig)))
+            then
+               Prev_Orig := Prev;
+
             --  If the actual is a formal of an enclosing subprogram it is
             --  the right entity, even if it is a rewriting. This happens
             --  when the call is within an inherited condition or predicate.