diff options
author | Arnaud Charlet <charlet@adacore.com> | 2020-06-11 14:31:54 -0400 |
---|---|---|
committer | Pierre-Marie de Rodat <derodat@adacore.com> | 2020-07-16 05:18:19 -0400 |
commit | ca320dabf052c6fa53c25d77646e2edfffc18594 (patch) | |
tree | 23c9bf7b95b823a94830b5998499d7775e192281 | |
parent | 7a21651f336cfc5475e1373b3fae6b792e45fc16 (diff) | |
download | gcc-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.
-rw-r--r-- | gcc/ada/sem_ch8.adb | 16 |
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 |