From: Eric Botcazou Date: Tue, 4 Apr 2023 17:25:11 +0000 (+0200) Subject: ada: Fix internal error with pragma Compile_Time_{Warning,Error} X-Git-Tag: releases/gcc-13.3.0~908 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=5ac700a00ffe73f4b7eb11f691c63a56a17c49c4;p=thirdparty%2Fgcc.git ada: Fix internal error with pragma Compile_Time_{Warning,Error} This happens when the pragmas are deferred to the back-end from an external unit to the main unit that is generic, because the back-end does not compile a main unit that is generic. gcc/ada/ * sem_prag.adb (Process_Compile_Time_Warning_Or_Error): Do not defer anything to the back-end when the main unit is generic. --- diff --git a/gcc/ada/sem_prag.adb b/gcc/ada/sem_prag.adb index 266a433d6c40..87c30c81faaf 100644 --- a/gcc/ada/sem_prag.adb +++ b/gcc/ada/sem_prag.adb @@ -7826,7 +7826,9 @@ package body Sem_Prag is -- then. For example, if the expression is "Record_Type'Size /= 32" -- it might be known after the back end has determined the size of -- Record_Type. We do not defer validation if we're inside a generic - -- unit, because we will have more information in the instances. + -- unit, because we will have more information in the instances, and + -- this ultimately applies to the main unit itself, because it is not + -- compiled by the back end when it is generic. if Compile_Time_Known_Value (Arg1x) then Validate_Compile_Time_Warning_Or_Error (N, Sloc (Arg1)); @@ -7844,7 +7846,10 @@ package body Sem_Prag is end if; end loop; - if No (P) then + if No (P) + and then + Nkind (Unit (Cunit (Main_Unit))) not in N_Generic_Declaration + then Defer_Compile_Time_Warning_Error_To_BE (N); end if; end if;