]> git.ipfire.org Git - thirdparty/gcc.git/commit
[Ada] Improve integration of strub with type systems
authorAlexandre Oliva <oliva@adacore.com>
Wed, 27 Oct 2021 21:26:27 +0000 (18:26 -0300)
committerPierre-Marie de Rodat <derodat@adacore.com>
Tue, 9 Nov 2021 09:44:49 +0000 (09:44 +0000)
commitd235950e83965ed6389eb94b1cffb7393dcb1984
tree086c8bb0bf8a599bff945db1d15a8c516b7de39a
parent80d52cbe59b19577fa215a4357c327e707890e9b
[Ada] Improve integration of strub with type systems

gcc/ada/

* strub.adb, strub.ads: New files.
* exp_attr.adb (Access_Cases): Copy strub mode to subprogram type.
* exp_disp.adb (Expand_Dispatching_Call): Likewise.
* freeze.adb (Check_Inherited_Conditions): Check that strub modes
match overridden subprograms and interfaces.
(Freeze_All): Renaming declarations too.
* sem_attr.adb (Resolve_Attribute): Reject 'Access to
strub-annotated data object.
* sem_ch3.adb (Derive_Subprogram): Copy strub mode to
inherited subprogram.
* sem_prag.adb (Analyze_Pragma): Propagate Strub Machine_Attribute
from access-to-subprogram to subprogram type when required,
but not from access-to-data to data type.  Mark the entity that
got the pragma as having a gigi rep item.
* sem_res.adb (Resolve): Reject implicit conversions that
would change strub modes.
(Resolve_Type_Conversions): Reject checked conversions
between incompatible strub modes.
* doc/gnat_rm/security_hardening_features.rst: Update.
* gnat_rm.texi: Regenerate.
* libgnat/a-except.ads (Raise_Exception): Revert strub-callable
annotation in public subprogram.
* libgnat/s-arit128.ads (Multiply_With_Ovflo_Check128): Likewise.
* libgnat/s-arit64.ads (Multiply_With_Ovflo_Check64): Likewise.
* libgnat/s-secsta.ads (SS_Allocate): Likewise.
(SS_Mark, SS_Release): Likewise.
* gcc-interface/Make-lang.in (GNAT_ADA_OBJS): Add ada/strub.o.
16 files changed:
gcc/ada/doc/gnat_rm/security_hardening_features.rst
gcc/ada/exp_attr.adb
gcc/ada/exp_disp.adb
gcc/ada/freeze.adb
gcc/ada/gcc-interface/Make-lang.in
gcc/ada/gnat_rm.texi
gcc/ada/libgnat/a-except.ads
gcc/ada/libgnat/s-arit128.ads
gcc/ada/libgnat/s-arit64.ads
gcc/ada/libgnat/s-secsta.ads
gcc/ada/sem_attr.adb
gcc/ada/sem_ch3.adb
gcc/ada/sem_prag.adb
gcc/ada/sem_res.adb
gcc/ada/strub.adb [new file with mode: 0644]
gcc/ada/strub.ads [new file with mode: 0644]