The compiler can crash when compiling the prefixed form of subprogram calls for untagged types when extensions are enabled. Problems can also manifest in cases where such calls occur in the absence of extensions being enabled. The source of this is that the Direct_Primitive_Operations lists were conditionally being initialized, based on whether extensions are allowed or whether untagged types are involved. This set of changes is directed at making the lists be unconditionally initialized and inherited in most cases (note that there might still be some missing cases). Tested on x86_64-pc-linux-gnu, committed on trunk gcc/ada/ * sem_ch3.adb (Analyze_Full_Type_Declaration): If the full type has a primitives list but its base type doesn't, set the base type's list to the full type's list (covers certain constrained cases, such as for arrays). (Analyze_Incomplete_Type_Decl): Unconditionally initialize an incomplete type's primitives list. (Analyze_Subtype_Declaration): Unconditionally set a subtype's primitives list to the base type's list, so the lists are shared. (Build_Derived_Private_Type): Unconditionally initialize a derived private type's list to a new empty list. (Build_Derived_Record_Type): Unconditionally initialize a derived record type's list to a new empty list (now a single call for tagged and untagged cases). (Derived_Type_Declaration): Unconditionally initialize a derived type's list to a new empty list in error cases (when Parent_Type is undefined or illegal). (Process_Full_View): Unconditionally copy the primitive operations from the private view to the full view (rather than conditioning it on whether extensions are enabled). * sem_ch7.adb (New_Private_Type): Unconditionally initialize an untagged private type's primitives list to a new empty list.