This is the mail archive of the mailing list for the GCC project.

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[Ada] fix bugs in handling of generics

Tested on i686-linux, committed on trunk.

When a formal package P is declared as an instance of a generic package
G without a box, we must check that the parameters of the actual instance
I match those given in the declaration for P. The validation is performed
by constructing I2, a new instance of G, using the formal part of P, ana-
lyzing I2 in the context of the current instance, and verifying that its
actuals match the actuals of I. If G itself comes from  a prior formal
parameter, its identity in the instance must be retrieved from the current
instance mapping, and it is this identity that must be used in the
declaration of I2.
gnat.dg/env_compile_capacity.adb will now compile quietly.

Also improve the tree structure in some cases for better ASIS use.

AI-317 extends the functionality of formal packages, by allowing them
to be specified with a partial list of actuals, rather the all-or-none
approach of Ada 95. A formal package can be specified with a box (<>)
or individual generic associations can carry a box while others have
real actuals. The visibility rules for for generic formals of formal
packages generalize those of Ada95, namely a formal is visible in the
enclosing generic if it is specified with a box, explicitly or implicitly.
gnat.dg/layered_instance.adb will now compile quietly.

Finally, when a formal type is a derived type the analysis of its declaration
introduces a subtype if the parent is constrained. If the parent itself
is a derived type the ultimate ancestor may be unconstrained, but the
legality check must be performed against the given formal, to prevent
spurious errors.
See gnat.dg/specs/

2006-10-31  Ed Schonberg  <>
	    Hristian Kirtchev  <>
        *, sem_ch12.adb (Save_References): If node is an operator
	that has been constant-folded, preserve information of original tree,
	for ASIS uses.
	(Analyze_Formal_Derived_Type): Set the limited present flag of the newly
	generated private extension declaration if the formal derived type is
	synchronized. Carry synchronized present over to the generated private
	(Validate_Derived_Type_Instance): Ensure that the actual of a
	synchronized formal derived type is a synchronized tagged type.
	(Instantiate_Formal_Package): When creating the instantiation used to
	validate the actual package of a formal declared without a box, check
	whether the formal itself depends on a prior actual.
	(Instantiate_Formal_Subprogram): Create new entities for the defining
	identifiers of the formals in the renaming declaration, for ASIS use.
	(Instantiate_Formal_Subprogram, Instantiate_Formal_Type): When creating
	a renaming declaration or a subtype declaration for an actual in an
	instance, capture location information of declaration in generic, for
	ASIS use.
	(Instantiate_Formal_Package): Add comments on needed additional tests.
	AI-317 (partial parametrization) is fully implemented.
	(Validate_Private_Type_Instance): Add check for actual which
	must have preelaborable initialization
	Use new // insertion for some continuation messages
	(Analyze_Formal_Object_Declaration): Change usage of Expression to
	Default_Expression. Add type retrieval when the declaration has an
	access definition. Update premature usage of incomplete type check.
	(Check_Access_Definition): New subsidiary routine. Check whether the
	current compilation version is Ada 05 and the supplied node has an
	access definition.
	(Instantiate object): Alphabetize local variables. Handle the creation
	of new renaming declarations with respect to the kind of definition
	used - either an access definition or a subtype mark. Guard against
	unnecessary error message in the context of anonymous access types after
	they have been resolved. Add check for required null exclusion in a
	formal object declaration.
	(Switch_View): A private subtype of a non-private type needs to be
	switched (the base type can have been switched without its private
	dependents because of the last branch of Check_Private_View.
	(Check_Private_View): Do not recompute Base_Type (T), instead use cached
	value from BT.
	(Instantiate_Type): Emit an error message whenever a class-wide type of
	a tagged incomplete type is used as a generic actual.
	(Find_Actual_Type): Extend routine to handle a component type in a child
	unit that is imported from a formal package in a parent.
	(Validate_Derived_Type_Instance): Check that analyzed formal and actual
	agree on constrainedness, rather than checking against ultimate ancestor
	(Instantiate_Subprogram_Body): Create a cross-reference link to the
	generic body, for navigation purposes.

Attachment: difs
Description: Text document

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]