ada: Support new SPARK aspect Exit_Cases
The aspect Exit_Cases allows annotating a subprogram with a list of cases specifying, for all input which satisfy a guard, how the subprogram is allowed to terminate. For now, it can only be either returning normally or propagating an exception. This contract is not checked at runtime, it is only meant for static verification in SPARK. gcc/ada/ChangeLog: * aspects.ads: Add aspect Aspect_Exit_Cases. * contracts.adb (Analyze_Entry_Or_Subprogram_Contract): Handle Exit_Cases. (Expand_Subprogram_Contract): Idem. * einfo-utils.adb (Get_Pragma): Allow Pragma_Exit_Cases. * einfo-utils.ads (Get_Pragma): Idem. * exp_prag.adb (Expand_Pragma_Exit_Cases): Ignore the pragma, currently we don't expand it. * exp_prag.ads (Expand_Pragma_Exit_Cases): Idem. * inline.adb (Remove_Aspects_And_Pragmas): Add Exit_Cases to the list. (Remove_Items): Idem. * par-prag.adb (Last_Arg_Is_Reason): Idem. * sem_ch12.adb: Idem. * sem_ch13.adb: Idem. * sem_util.adb: Idem. * sem_util.ads: Idem. * sinfo.ads: Idem. * snames.ads-tmpl: Add names Name_Exit_Cases, Name_Exception_Raised, and Name_Normal_Return as well as pragma Pragma_Exit_Cases. * sem_prag.adb (Analyze_Exit_Cases_In_Decl_Part): Make sure that a pragma or aspect Exit_Cases is well formed. (Analyze_Pragma): Make sure that a pragma or aspect Exit_Cases is at the right place. * sem_prag.ads (Analyze_Exit_Cases_In_Decl_Part): Declaration. * doc/gnat_rm/implementation_defined_pragmas.rst: Document the Exit_Cases pragma. * doc/gnat_rm/implementation_defined_aspects.rst: Document the Exit_Cases aspect. * gnat_rm.texi: Regenerate.
Showing
- gcc/ada/aspects.ads 6 additions, 0 deletionsgcc/ada/aspects.ads
- gcc/ada/contracts.adb 7 additions, 0 deletionsgcc/ada/contracts.adb
- gcc/ada/doc/gnat_rm/implementation_defined_aspects.rst 12 additions, 0 deletionsgcc/ada/doc/gnat_rm/implementation_defined_aspects.rst
- gcc/ada/doc/gnat_rm/implementation_defined_pragmas.rst 22 additions, 2 deletionsgcc/ada/doc/gnat_rm/implementation_defined_pragmas.rst
- gcc/ada/einfo-utils.adb 1 addition, 0 deletionsgcc/ada/einfo-utils.adb
- gcc/ada/einfo-utils.ads 1 addition, 0 deletionsgcc/ada/einfo-utils.ads
- gcc/ada/exp_prag.adb 91 additions, 0 deletionsgcc/ada/exp_prag.adb
- gcc/ada/exp_prag.ads 4 additions, 0 deletionsgcc/ada/exp_prag.ads
- gcc/ada/gnat_rm.texi 877 additions, 835 deletionsgcc/ada/gnat_rm.texi
- gcc/ada/inline.adb 2 additions, 0 deletionsgcc/ada/inline.adb
- gcc/ada/par-prag.adb 1 addition, 0 deletionsgcc/ada/par-prag.adb
- gcc/ada/sem_ch12.adb 1 addition, 0 deletionsgcc/ada/sem_ch12.adb
- gcc/ada/sem_ch13.adb 18 additions, 3 deletionsgcc/ada/sem_ch13.adb
- gcc/ada/sem_prag.adb 467 additions, 0 deletionsgcc/ada/sem_prag.adb
- gcc/ada/sem_prag.ads 7 additions, 0 deletionsgcc/ada/sem_prag.ads
- gcc/ada/sem_util.adb 1 addition, 0 deletionsgcc/ada/sem_util.adb
- gcc/ada/sem_util.ads 1 addition, 0 deletionsgcc/ada/sem_util.ads
- gcc/ada/sinfo.ads 1 addition, 0 deletionsgcc/ada/sinfo.ads
- gcc/ada/snames.ads-tmpl 4 additions, 0 deletionsgcc/ada/snames.ads-tmpl
Loading
Please register or sign in to comment