ada: Implement built-in-place expansion of two-pass array aggregates

These are array aggregates containing only component associations that are
iterated with iterator specifications, as per RM 4.3.3(20.2/5-20.4/5).

It is implemented for the array aggregates that are used to initialize an
object, as specified by RM 7.6(17.2/3-17.3/3) for immutably limited types
and types that need finalization, but for all types like other aggregates.

gcc/ada/ChangeLog:

	* exp_aggr.adb (Build_Two_Pass_Aggr_Code): New function containing
	most of the code initially present in Two_Pass_Aggregate_Expansion.
	(Two_Pass_Aggregate_Expansion): Remove redundant N parameter.
	Implement built-in-place expansion for (static) object declarations
	and allocators, using Build_Two_Pass_Aggr_Code for the main work.
	(Expand_Array_Aggregate): Adjust Two_Pass_Aggregate_Expansion call.
	Replace Etype (N) by Typ in a couple of places.
	* exp_ch3.adb (Expand_Freeze_Array_Type): Remove special case for
	two-pass array aggregates.
	(Expand_N_Object_Declaration): Do not adjust the object when it is
	initialized by a two-pass array aggregate.
	* exp_ch4.adb (Expand_Allocator_Expression): Apply the processing
	used for container aggregates to two-pass array aggregates.
	* exp_ch6.adb (Validate_Subprogram_Calls): Skip calls present in
	initialization expressions of N_Object_Declaration nodes that have
	No_Initialization set.
	* sem_ch3.adb (Analyze_Object_Declaration): Detect the cases of an
	array originally initialized by an aggregate consistently.
5 files changed