[gcc r15-10311] ada: Reject pragma Attach_Handler on procedures in protected bodies
Eric Botcazou
ebotcazou@gcc.gnu.org
Thu Sep 11 10:36:11 GMT 2025
https://gcc.gnu.org/g:59d8156ed8562fbdd5683b2d0120d1fed4fd7063
commit r15-10311-g59d8156ed8562fbdd5683b2d0120d1fed4fd7063
Author: Piotr Trojanek <trojanek@adacore.com>
Date: Thu Jul 31 17:07:48 2025 +0200
ada: Reject pragma Attach_Handler on procedures in protected bodies
Pragma Attach_Handler and Interrupt_Handler are only legal for procedures
declared in protected definition. When given for procedures declared in
protected body, they were wrongly accepted and triggered an odd error message
from expansion.
gcc/ada/ChangeLog:
* sem_prag.adb (Check_Interrupt_Or_Attach_Handler): Refine test for
protected procedures; fix typo in comment.
Diff:
---
gcc/ada/sem_prag.adb | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/gcc/ada/sem_prag.adb b/gcc/ada/sem_prag.adb
index b866dba5e152..2ffabf41e8ac 100644
--- a/gcc/ada/sem_prag.adb
+++ b/gcc/ada/sem_prag.adb
@@ -6900,12 +6900,14 @@ package body Sem_Prag is
Handler_Proc := Find_Unique_Parameterless_Procedure (Arg1_X, Arg1);
Proc_Scope := Scope (Handler_Proc);
- if Ekind (Proc_Scope) /= E_Protected_Type then
+ if Nkind (Parent (Subprogram_Spec (Handler_Proc))) /=
+ N_Protected_Definition
+ then
Error_Pragma_Arg
("argument of pragma% must be protected procedure", Arg1);
end if;
- -- For pragma case (as opposed to access case), check placement.
+ -- For pragma case (as opposed to aspect case), check placement.
-- We don't need to do that for aspects, because we have the
-- check that they aspect applies an appropriate procedure.
More information about the Gcc-cvs
mailing list