[Ada] Implement new legality rules introduced in C.6(12) by AI12-0363

Pierre-Marie de Rodat derodat@adacore.com
Fri Oct 23 08:26:40 GMT 2020


This removes the now obsolete legality rules specified by AI12-0128
and replaces them with the new legality rules specified by AI12-0363
pertaining to nonatomic subcomponents of full access types and objects.

This also introduces the new aspect Full_Access_Only in Ada 2020 mode
and revamps the implementation of GNAT's aspect Volatile_Full_Access
to make it closely resemble Full_Access_Only while preserving the
original semantics of the aspect.  They share a single implementation
and the only difference are the legality rules for Full_Access_Only.

Internally this renames various predicates tagged with Atomic_Or_VFA
to use the Full_Access tag instead, as "full access" is now defined
in the Ada 2020 RM.  This also makes a couple of cleanups in the
handling of representation items on entities.

There should be no code generation changes for existing programs.

Tested on x86_64-pc-linux-gnu, committed on trunk

gcc/ada/

	* doc/gnat_rm/implementation_defined_pragmas.rst (VFA): Remove uage
	restrictions in conjunction with Atomic and Aliased.
	* gnat_rm.texi: Regenerate.
	* aspects.ads (Aspect_Id): Add Aspect_Full_Access_Only.
	(Is_Representation_Aspect): Likewise.
	(Aspect_Names): Likewise.
	(Aspect_Delay): Likewise.
	* einfo.ads (Is_Atomic_Or_VFA): Rename into...
	(Is_Full_Access): ...this.
	(Is_Volatile_Full_Access): Document new usage for Full_Access_Only.
	* einfo.adb (Is_Atomic_Or_VFA): Rename into...
	(Is_Full_Access): ...this.
	* freeze.ads (Is_Atomic_VFA_Aggregate): Rename into...
	(Is_Full_Access_Aggregate): ...this.
	* freeze.adb (Is_Atomic_VFA_Aggregate): Rename into...
	(Is_Full_Access_Aggregate): ...this.  Adjust to above renaming.
	(Freeze_Array_Type): Likewise.
	(Freeze_Entity): Likewise.
	* exp_aggr.adb (Aggr_Assignment_OK_For_Backend): Likewise.
	(Expand_Record_Aggregate): Likewise.
	* exp_ch4.adb (Expand_N_Op_Eq): Likewise.
	* exp_ch5.adb (Expand_Assign_Array): Likewise.
	* exp_ch8.adb (Evaluation_Required): Likewise.
	* layout.adb (Layout_Type): Likewise.
	(Set_Composite_Alignment): Likewise.
	* sem_aux.ads (Has_Rep_Item): Delete.
	* sem_aux.adb (Has_Rep_Item): Likewise.
	* sem_attr.adb (Resolve_Attribute) <Attribute_Access>: Implement
	new legality rules in C.6(12).
	* sem_ch12.adb (Instantiate_Object): Likewise.
	* sem_res.adb (Resolve_Actuals): Likewise.
	* sem_ch13.adb (Inherit_Delayed_Rep_Aspects): Deal with aspect
	Full_Access_Only.
	(Check_False_Aspect_For_Derived_Type): Likewise.
	(Make_Pragma_From_Boolean_Aspect): Test for the presence of Expr.
	Deal with aspect Full_Access_Only.
	(Analyze_Aspects_At_Freeze_Point): Likewise.
	(Analyze_One_Aspect): Do not set Delay_Required to true even for
	Always_Delay boolean aspects if they have no expression.  Force
	Delay_Required to true for aspect Full_Access_Only in all cases.
	Reject aspect Full_Access_Only if not in Ada 2020 mode.
	(Check_Aspect_At_End_Of_Declarations): Deal with empty expression.
	(Check_Aspect_At_Freeze_Point): Likewise.
	(Rep_Item_Entity): Delete.
	(Inherit_Aspects_At_Freeze_Point): Align handling for Bit_Order
	with that for Scalar_Storage_Order.
	* sem_prag.adb (Check_Atomic_VFA): Delete.
	(Check_VFA_Conflicts): Likewise.
	(Check_Full_Access_Only): New procedure.
	(Process_Atomic_Independent_Shared_Volatile): Call to implement
	the new legality checks in C.6(8/2) and mark the entity last.
	(Analyze_Pragma) <Pragma_Atomic_Components>: Remove obsolete check.
	* sem_util.ads (Is_Atomic_Or_VFA_Object): Rename into...
	(Is_Full_Access_Object): ...this.
	(Is_Subcomponent_Of_Atomic_Object): Rename into...
	(Is_Subcomponent_Of_Full_Access_Object): ...this.
	* sem_util.adb (Inherit_Rep_Item_Chain): Use Present_In_Rep_Item.
	(Is_Atomic_Or_VFA_Object): Rename into...
	(Is_Full_Access_Object): ...this.
	(Is_Subcomponent_Of_Atomic_Object): Rename into...
	(Is_Subcomponent_Of_Full_Access_Object): ...this and adjust.
	* snames.ads-tmpl (Name_Full_Access_Only): New name of aspect.
	* gcc-interface/decl.c (gnat_to_gnu_entity): Adjust for renaming.
	(promote_object_alignment): Likewise.
	(gnat_to_gnu_field): Likewise.  Rename local variable and use
	specific qualifier in error message for Volatile_Full_Access.
	* gcc-interface/trans.c (lvalue_required_p): Likewise.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: patch.diff.gz
Type: application/gzip
Size: 16058 bytes
Desc: not available
URL: <https://gcc.gnu.org/pipermail/gcc-patches/attachments/20201023/a313fe4a/attachment-0001.gz>


More information about the Gcc-patches mailing list