From: Justin Squirek <squi...@adacore.com> 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. Tested on x86_64-pc-linux-gnu, committed on master. --- gcc/ada/sem_prag.adb | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/gcc/ada/sem_prag.adb b/gcc/ada/sem_prag.adb index fa2a4cbed39..a2996137648 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; -- 2.43.2