From e7e72f9b7a03cc9756ee5bff4c1b39a226228222 Mon Sep 17 00:00:00 2001 From: Ed Schonberg Date: Tue, 9 Oct 2018 15:05:24 +0000 Subject: [PATCH] [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 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 | 7 +++++++ gcc/ada/sem_ch6.adb | 12 +++++++++++- 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog index ccd9f16..e7ce7ee 100644 --- a/gcc/ada/ChangeLog +++ b/gcc/ada/ChangeLog @@ -1,3 +1,10 @@ +2018-10-09 Ed Schonberg + + * 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 * repinfo.adb: Remove with/use clause for Stand. diff --git a/gcc/ada/sem_ch6.adb b/gcc/ada/sem_ch6.adb index d0617fe..166987a 100644 --- a/gcc/ada/sem_ch6.adb +++ b/gcc/ada/sem_ch6.adb @@ -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 -- 2.7.4