From: Bob Duff Date: Wed, 17 Nov 2021 17:06:32 +0000 (-0500) Subject: [Ada] Fix crash on pragma Compile_Time_Warning/Error X-Git-Tag: basepoints/gcc-13~2633 X-Git-Url: https://gcc.gnu.org/git/?a=commitdiff_plain;h=9ce9322ccc4aa873d732554c895b821c90017511;p=gcc.git [Ada] Fix crash on pragma Compile_Time_Warning/Error gcc/ada/ * sem_prag.adb (Process_Compile_Time_Warning_Or_Error): Do not follow the Corresponding_Spec pointer if Acts_As_Spec is True, because Corresponding_Spec is Empty in that case, so we would exit the loop prematurely, and incorrectly think we are not inside a generic unit when we are. --- diff --git a/gcc/ada/sem_prag.adb b/gcc/ada/sem_prag.adb index 1d5cc2535bdf..9fdec53b3741 100644 --- a/gcc/ada/sem_prag.adb +++ b/gcc/ada/sem_prag.adb @@ -7827,11 +7827,15 @@ package body Sem_Prag is if Compile_Time_Known_Value (Arg1x) then Validate_Compile_Time_Warning_Or_Error (N, Sloc (Arg1)); + else while Present (P) and then Nkind (P) not in N_Generic_Declaration loop - if Nkind (P) in N_Package_Body | N_Subprogram_Body then - P := Corresponding_Spec (P); + if (Nkind (P) = N_Subprogram_Body and then not Acts_As_Spec (P)) + or else Nkind (P) = N_Package_Body + then + P := Parent (Corresponding_Spec (P)); + else P := Parent (P); end if;