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