[Ada] Spurious error message on visibiliy change in aspect expression

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
This commit is contained in:
Ed Schonberg 2018-10-09 15:05:24 +00:00 committed by Pierre-Marie de Rodat
parent 96d268c284
commit e7e72f9b7a
2 changed files with 18 additions and 1 deletions

View 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.

View 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