[Ada] AI12-0132 Freezing of renames_as_body

Message ID 20200716092052.GA146642@adacore.com
State New
Headers show
Series
  • [Ada] AI12-0132 Freezing of renames_as_body
Related show

Commit Message

Pierre-Marie de Rodat July 16, 2020, 9:20 a.m.
This AI clarifies that a renames-as-body freezes the expression of any
expression function that it renames.

Tested on x86_64-pc-linux-gnu, committed on trunk

gcc/ada/

	* sem_ch8.adb (Analyze_Subprogram_Renaming): A renames-as-body
	freezes the expression of any expression function that it
	renames.

Patch

diff --git a/gcc/ada/sem_ch8.adb b/gcc/ada/sem_ch8.adb
--- a/gcc/ada/sem_ch8.adb
+++ b/gcc/ada/sem_ch8.adb
@@ -3160,6 +3160,22 @@  package body Sem_Ch8 is
             Error_Msg_NE ("subprogram& is not overriding", N, Rename_Spec);
          end if;
 
+         --  AI12-0132: a renames-as-body freezes the expression of any
+         --  expression function that it renames.
+
+         if Is_Entity_Name (Nam)
+           and then Is_Expression_Function (Entity (Nam))
+           and then not Inside_A_Generic
+         then
+            Freeze_Expr_Types
+              (Def_Id => Entity (Nam),
+               Typ    => Etype (Entity (Nam)),
+               Expr   =>
+                 Expression
+                   (Original_Node (Unit_Declaration_Node (Entity (Nam)))),
+               N      => N);
+         end if;
+
       --  Normal subprogram renaming (not renaming as body)
 
       else