[Ada] New aspect/pragma No_Caching for analysis of volatile data
authorYannick Moy <moy@adacore.com>
Mon, 12 Aug 2019 08:59:53 +0000 (08:59 +0000)
committerPierre-Marie de Rodat <pmderodat@gcc.gnu.org>
Mon, 12 Aug 2019 08:59:53 +0000 (08:59 +0000)
commit9dfc6c55085848a60d19825bdc0b7d345bdf8603
tree1aeb86d69692de5f00207e441462e5ade8f2c735
parent1debd630ed40eec6db2f4aab4524fde4643b70a7
[Ada] New aspect/pragma No_Caching for analysis of volatile data

A new aspect/pragma can be attached to volatile variables to indicate
that such a variable is not used for interactions with the external
world, but only that accesses to that variable should not be optimized
by the compiler. This is in particular useful for guarding against fault
injection. SPARK Reference manual has been updated to allow this use of
volatile data, see section 7.1.2, so that GNATprove can analyze such
variables as not volatile.

2019-08-12  Yannick Moy  <moy@adacore.com>

gcc/ada/

* aspects.adb, aspects.ads (Aspect_No_Caching): New aspect.
* contracts.adb, contracts.ads (Add_Contract_Item): Add handling
of No_Caching.
(Analyze_Object_Contract): Add handling of No_Caching.
* einfo.adb, einfo.ads
(Get_Pragma): Add handling of No_Caching.
* doc/gnat_rm/implementation_defined_aspects.rst,
doc/gnat_rm/implementation_defined_pragmas.rst: Document new
aspect/pragma.
* gnat_rm.texi: Regenerate.
* par-prag.adb (Prag): New pragma Pragma_No_Caching.
* sem_ch13.adb (Analyze_Aspect_Specifications,
Check_Aspect_At_Freeze_Point): Add handling of No_Caching.
* sem_prag.adb (Analyze_Pragma): Deal with pragma No_Caching.
* sem_prag.ads (Analyze_External_Property_In_Decl_Part): Now
applies to No_Caching.
* sem_util.adb, sem_util.ads (Is_Effectively_Volatile): Add
handling of No_Caching.
(No_Caching_Enabled): New query function.
* snames.ads-tmpl: New names for pragma.

gcc/testsuite/

* gnat.dg/no_caching.adb, gnat.dg/no_caching.ads: New testcase.

From-SVN: r274292
20 files changed:
gcc/ada/ChangeLog
gcc/ada/aspects.adb
gcc/ada/aspects.ads
gcc/ada/contracts.adb
gcc/ada/contracts.ads
gcc/ada/doc/gnat_rm/implementation_defined_aspects.rst
gcc/ada/doc/gnat_rm/implementation_defined_pragmas.rst
gcc/ada/einfo.adb
gcc/ada/einfo.ads
gcc/ada/gnat_rm.texi
gcc/ada/par-prag.adb
gcc/ada/sem_ch13.adb
gcc/ada/sem_prag.adb
gcc/ada/sem_prag.ads
gcc/ada/sem_util.adb
gcc/ada/sem_util.ads
gcc/ada/snames.ads-tmpl
gcc/testsuite/ChangeLog
gcc/testsuite/gnat.dg/no_caching.adb [new file with mode: 0644]
gcc/testsuite/gnat.dg/no_caching.ads [new file with mode: 0644]