aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorSteve Baird <baird@adacore.com>2023-02-02 17:33:53 -0800
committerMarc Poulhiès <poulhies@adacore.com>2023-05-22 10:44:10 +0200
commit472f4cb52ac6f47926a19eb2c53cd848fa6b3730 (patch)
tree2d5d120219266252b2ccc4e7881421d3cf70b469 /gcc
parentf2cffc11f85691e26f80b76065411ec0a27f2a49 (diff)
downloadgcc-472f4cb52ac6f47926a19eb2c53cd848fa6b3730.zip
gcc-472f4cb52ac6f47926a19eb2c53cd848fa6b3730.tar.gz
gcc-472f4cb52ac6f47926a19eb2c53cd848fa6b3730.tar.bz2
ada: Accept Assert pragmas in expression functions
gcc/ada/ * sem_ch4.adb (Analyze_Expression_With_Actions.Check_Action_Ok): Accept an executable pragma occuring in a declare expression as per AI22-0045. This means Assert and Inspection_Point pragmas as well as any implementation-defined pragmas that the implementation chooses to categorize as executable. Currently Assume and Debug are the only such pragmas.
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ada/sem_ch4.adb19
1 files changed, 18 insertions, 1 deletions
diff --git a/gcc/ada/sem_ch4.adb b/gcc/ada/sem_ch4.adb
index e9c5b9f..5b013df 100644
--- a/gcc/ada/sem_ch4.adb
+++ b/gcc/ada/sem_ch4.adb
@@ -2411,10 +2411,27 @@ package body Sem_Ch4 is
return; -- ???For now; the RM rule is a bit more complicated
end if;
+ when N_Pragma =>
+ declare
+ -- See AI22-0045 pragma categorization.
+ subtype Executable_Pragma_Id is Pragma_Id
+ with Predicate => Executable_Pragma_Id in
+ -- language-defined executable pragmas
+ Pragma_Assert | Pragma_Inspection_Point
+
+ -- GNAT-defined executable pragmas
+ | Pragma_Assume | Pragma_Debug;
+ begin
+ if Get_Pragma_Id (A) in Executable_Pragma_Id then
+ return;
+ end if;
+ end;
+
when others =>
- null; -- Nothing else allowed, not even pragmas
+ null; -- Nothing else allowed
end case;
+ -- We could mention pragmas in the message text; let's not.
Error_Msg_N ("object renaming or constant declaration expected", A);
end Check_Action_OK;