[Ada] Spurious error message on visibiliy change in aspect expression
authorEd Schonberg <schonberg@adacore.com>
Tue, 9 Oct 2018 15:05:24 +0000 (15:05 +0000)
committerPierre-Marie de Rodat <pmderodat@gcc.gnu.org>
Tue, 9 Oct 2018 15:05:24 +0000 (15:05 +0000)
This patch removes an improper error message on a visibility change in
an aspect expression between the freeze point and the end of the
declaration list, when the expression involves a call to a instance of
Unchecked_Conversion and the enclosing package declaration has a package
body with multiple subprogram bodies.

The following must compile quietly:

----
package body Par.Rep is
   procedure Nothing is begin null; end;
   procedure Rien is begin null; end;
end;
----
with Par.Loc;
package Par.Rep is
   type Rec is record
      X, Y : Integer;
   end record
      with Volatile;

   Thing2 : Unsigned_32 := 15;
   Thing3 : Rec
    with Volatile, Address => To_Address (Par.Loc.Flash_Base);
    procedure Nothing;
end;
----
pragma Restrictions (No_Elaboration_Code);
with interfaces;  use interfaces;
pragma unreferenced (interfaces);
with Tp;       use Tp;
pragma unreferenced (Tp);
package Par is
end Par;
----
with Ada.Unchecked_Conversion;
with System;
with Interfaces; use Interfaces;
package Tp is
subtype system_address is unsigned_32;
   function to_address is new
      ada.unchecked_conversion (system_address, system.address);
   function To_32 is new
      ada.unchecked_conversion (System.Address, System_Address);
end;
----
with TP; use TP;
package Par.Loc is
FLASH_BASE        : constant system_address := 16#0800_0000#;
end;

2018-10-09  Ed Schonberg  <schonberg@adacore.com>

gcc/ada/

* sem_ch6.adb (Fully_Conformant_Expressions): Handle properly
the conformance check on an aspect expression that includes a
call to an instance of Unchecked_Conversion, or more generally a
call to an intrinsic operation.

From-SVN: r264966

gcc/ada/ChangeLog
gcc/ada/sem_ch6.adb

index ccd9f16..e7ce7ee 100644 (file)
@@ -1,3 +1,10 @@
+2018-10-09  Ed Schonberg  <schonberg@adacore.com>
+
+       * sem_ch6.adb (Fully_Conformant_Expressions): Handle properly
+       the conformance check on an aspect expression that includes a
+       call to an instance of Unchecked_Conversion, or more generally a
+       call to an intrinsic operation.
+
 2018-10-09  Eric Botcazou  <ebotcazou@adacore.com>
 
        * repinfo.adb: Remove with/use clause for Stand.
index d0617fe..166987a 100644 (file)
@@ -8932,7 +8932,17 @@ package body Sem_Ch6 is
               or else
                 (Chars (Entity (E1)) = Chars (Entity (E2))
                   and then Ekind (Entity (E1)) = E_Loop_Parameter
-                  and then Ekind (Entity (E2)) = E_Loop_Parameter);
+                  and then Ekind (Entity (E2)) = E_Loop_Parameter)
+
+              --  A call to an instantiation of Unchecked_Conversion is
+              --  rewritten with the name of the generated function
+              --  created for the instance, and this must be special-cased.
+
+              or else
+                 (Ekind (Entity (E1)) = E_Function
+                   and then Is_Intrinsic_Subprogram (Entity (E1))
+                   and then Is_Generic_Instance (Entity (E1))
+                   and then Entity (E2) = Alias (Entity (E1)));
 
          elsif Nkind (E1) = N_Expanded_Name
            and then Nkind (E2) = N_Expanded_Name