From: Viljar Indus Date: Wed, 19 Mar 2025 09:28:13 +0000 (+0200) Subject: ada: Fix the detection of configuration pragmas X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=c8d739794646ace3c19e078a7bca67c0e3bdfbdf;p=thirdparty%2Fgcc.git ada: Fix the detection of configuration pragmas Some pragma nodes like the ones for Assertion_Policy are replaced by a Null_Statement. This is not taken into account when analyzing if the pragma is a configuration pragma. gcc/ada/ChangeLog: * sem_prag.adb (Is_Configuration_Pragma): Check that nodes preceding the pragma are pragma nodes or originally were pragma nodes. --- diff --git a/gcc/ada/sem_prag.adb b/gcc/ada/sem_prag.adb index 688ccc7c007..2fc3698a67b 100644 --- a/gcc/ada/sem_prag.adb +++ b/gcc/ada/sem_prag.adb @@ -8087,10 +8087,26 @@ package body Sem_Prag is -- the test below also permits use in a configuration pragma file. function Is_Configuration_Pragma return Boolean is + function Is_Pragma_Node (Prg : Node_Id) return Boolean is + (Nkind (Prg) = N_Pragma + or else + (Present (Original_Node (Prg)) + and then Nkind (Original_Node (Prg)) = N_Pragma)); + -- Returns true whether the node is a pragma or was originally a + -- pragma. + -- + -- Note that some pragmas like Assertion_Policy are rewritten as + -- Null_Statment nodes but we still need to make sure here that the + -- original node was a pragma node. + + -- Local variables + Lis : List_Id; Par : constant Node_Id := Parent (N); Prg : Node_Id; + -- Start of processing for Is_Configuration_Pragma + begin -- Don't evaluate List_Containing (N) if Parent (N) could be -- an N_Aspect_Specification node. @@ -8119,7 +8135,7 @@ package body Sem_Prag is loop if Prg = N then return True; - elsif Nkind (Prg) /= N_Pragma then + elsif not Is_Pragma_Node (Prg) then return False; end if;