aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorArnaud Charlet <charlet@adacore.com>2020-06-11 14:31:54 -0400
committerPierre-Marie de Rodat <derodat@adacore.com>2020-07-16 05:18:19 -0400
commitca320dabf052c6fa53c25d77646e2edfffc18594 (patch)
tree23c9bf7b95b823a94830b5998499d7775e192281 /gcc
parent7a21651f336cfc5475e1373b3fae6b792e45fc16 (diff)
downloadgcc-ca320dabf052c6fa53c25d77646e2edfffc18594.zip
gcc-ca320dabf052c6fa53c25d77646e2edfffc18594.tar.gz
gcc-ca320dabf052c6fa53c25d77646e2edfffc18594.tar.bz2
[Ada] AI12-0132 Freezing of renames_as_body
gcc/ada/ * sem_ch8.adb (Analyze_Subprogram_Renaming): A renames-as-body freezes the expression of any expression function that it renames.
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ada/sem_ch8.adb16
1 files changed, 16 insertions, 0 deletions
diff --git a/gcc/ada/sem_ch8.adb b/gcc/ada/sem_ch8.adb
index 695ff73..8411f5b 100644
--- 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