Ada: Fix missing initialization of parent discriminants in tagged extension
Correctly initializes parent discriminants for Ada tagged extensions in aggregates.
This change corrects an issue where parent discriminants of Ada tagged extensions were not properly initialized in certain aggregate expressions. The fix simplifies discriminant initialization logic by removing redundant procedures and consolidating necessary functions. This ensures correct behavior for aggregates derived from tagged extensions, particularly in cases involving ACATS cdd2a01.
In Details
The Ada front-end's exp_aggr.adb had redundant discriminant initialization code. This commit removes two procedures, Initialize_Discriminants and Build_Record_Aggr_Code.Init_Visible_Discriminants, and renames Init_Hidden_Discriminants to Init_Parent_Discriminants. This refactoring cleans up the aggregate expansion logic for tagged extensions, ensuring all parent discriminants are correctly initialized.
- Ada tagged extension
- In Ada, a tagged extension is a type that inherits from a parent tagged type, allowing for object-oriented features like polymorphism. Discriminants are special components that can vary per object of the type.
- Aggregate
- In Ada, an aggregate is an expression that denotes a value of a composite type (like records or arrays) by specifying the values of its components.
- Discriminant
- A discriminant is a special component of a record type that can vary from object to object, defining the type's shape or size. It's similar to a parameter in other languages.