diff options
author | Justin Squirek <squirek@adacore.com> | 2024-01-09 15:08:08 +0000 |
---|---|---|
committer | Marc Poulhiès <poulhies@adacore.com> | 2024-05-07 09:55:53 +0200 |
commit | 8a116c6539b044ec20bd9fd604887a0a2e21a10e (patch) | |
tree | 55d0cf8eec4547766c13208daba05962fb6b19a4 | |
parent | 41ebf2e641f85560452cb4cea35a7f3f013982bc (diff) | |
download | gcc-8a116c6539b044ec20bd9fd604887a0a2e21a10e.zip gcc-8a116c6539b044ec20bd9fd604887a0a2e21a10e.tar.gz gcc-8a116c6539b044ec20bd9fd604887a0a2e21a10e.tar.bz2 |
ada: Bad internal naming when using pragma Compile_Time_Error
This patch fixes an error in the compiler whereby the presence of a condition
which tests the size of a type not known at compile time within an instance
of pragma Compile_Time_Error causes incorrect internal names to be generated
for said type during expansion.
gcc/ada/
* sem_prag.adb (Defer_Compile_Time_Warning_Error_To_BE): Better
handle itypes such that the tree copy required for the expansion
of the pragma doesn't cause ordering problems with internal names.
-rw-r--r-- | gcc/ada/sem_prag.adb | 18 |
1 files changed, 17 insertions, 1 deletions
diff --git a/gcc/ada/sem_prag.adb b/gcc/ada/sem_prag.adb index fa2a4cb..a299613 100644 --- a/gcc/ada/sem_prag.adb +++ b/gcc/ada/sem_prag.adb @@ -33812,7 +33812,23 @@ package body Sem_Prag is -- as 0. if not In_Extended_Main_Code_Unit (N) then - Insert_Library_Level_Action (New_Copy_Tree (N)); + -- We've created an Itype for the string in this pragma and + -- may have made other Itypes. When we copy the entire tree + -- of this pragma, we'll make a second copy of them in its + -- unit, which will mess up the numbering of the remaining + -- internal names. + + declare + Saved_Current_Sem_Unit : constant Unit_Number_Type := + Current_Sem_Unit; + New_N : Node_Id; + + begin + Current_Sem_Unit := Main_Unit; + New_N := New_Copy_Tree (N); + Current_Sem_Unit := Saved_Current_Sem_Unit; + Insert_Library_Level_Action (New_N); + end; end if; end Defer_Compile_Time_Warning_Error_To_BE; |