From: Arnaud Charlet Date: Tue, 20 Aug 2019 09:47:58 +0000 (+0000) Subject: [Ada] Document requirements for Pragma Lock_Free X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=2beee64ae080305808720f839b6ca7bc280aed74;p=gcc.git [Ada] Document requirements for Pragma Lock_Free 2019-08-20 Arnaud Charlet gcc/ada/ * doc/gnat_rm/implementation_defined_pragmas.rst: Document requirements for Pragma Lock_Free. * gnat_rm.texi: Regenerate. From-SVN: r274717 --- diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog index 8485a9c0d09..a6f680c9ea7 100644 --- a/gcc/ada/ChangeLog +++ b/gcc/ada/ChangeLog @@ -1,3 +1,9 @@ +2019-08-20 Arnaud Charlet + + * doc/gnat_rm/implementation_defined_pragmas.rst: Document + requirements for Pragma Lock_Free. + * gnat_rm.texi: Regenerate. + 2019-08-20 Philippe Gil * bindgen.adb (Gen_Main): Set gnat_argc/gnat_argv to argc/argv diff --git a/gcc/ada/doc/gnat_rm/implementation_defined_pragmas.rst b/gcc/ada/doc/gnat_rm/implementation_defined_pragmas.rst index a4ff222e146..baa13fce0dd 100644 --- a/gcc/ada/doc/gnat_rm/implementation_defined_pragmas.rst +++ b/gcc/ada/doc/gnat_rm/implementation_defined_pragmas.rst @@ -3649,6 +3649,24 @@ the implementation of protected operations must be implemented without locks. Compilation fails if the compiler cannot generate lock-free code for the operations. +The current conditions required to support this pragma are: + +* Protected type declarations may not contain entries +* Protected subprogram declarations may not have nonelementary parameters + +In addition, each protected subprogram body must satisfy: + +* May reference only one protected component +* May not reference nonconstant entities outside the protected subprogram + scope. +* May not contain address representation items, allocators, or quantified + expressions. +* May not contain delay, goto, loop, or procedure-call statements. +* May not contain exported and imported entities +* May not dereferenced access values +* Function calls and attribute references must be static + + Pragma Loop_Invariant ===================== diff --git a/gcc/ada/gnat_rm.texi b/gcc/ada/gnat_rm.texi index be31ed89584..3c561ed1b04 100644 --- a/gcc/ada/gnat_rm.texi +++ b/gcc/ada/gnat_rm.texi @@ -5115,6 +5115,47 @@ the implementation of protected operations must be implemented without locks. Compilation fails if the compiler cannot generate lock-free code for the operations. +The current conditions required to support this pragma are: + + +@itemize * + +@item +Protected type declarations may not contain entries + +@item +Protected subprogram declarations may not have nonelementary parameters +@end itemize + +In addition, each protected subprogram body must satisfy: + + +@itemize * + +@item +May reference only one protected component + +@item +May not reference nonconstant entities outside the protected subprogram +scope. + +@item +May not contain address representation items, allocators, or quantified +expressions. + +@item +May not contain delay, goto, loop, or procedure-call statements. + +@item +May not contain exported and imported entities + +@item +May not dereferenced access values + +@item +Function calls and attribute references must be static +@end itemize + @node Pragma Loop_Invariant,Pragma Loop_Optimize,Pragma Lock_Free,Implementation Defined Pragmas @anchor{gnat_rm/implementation_defined_pragmas pragma-loop-invariant}@anchor{98} @section Pragma Loop_Invariant