Skip to content
Snippets Groups Projects
  • Steve Baird's avatar
    fd4f48b3
    ada: Finalization not performed for component of protected type · fd4f48b3
    Steve Baird authored
    In some cases involving a discriminated protected type with an array
    component that is subject to a discriminant-dependent index constraint,
    where the element type of the array requires finalization and the array
    type has not yet been frozen at the point of the declaration of the protected
    type, finalization of an object of the protected type may incorrectly omit
    finalization of the array component. One case where this scenario can arise
    is an instantiation of Ada.Containers.Bounded_Synchronized_Queues, passing in
    an Element type that requires finalization.
    
    gcc/ada/
    
    	* exp_ch7.adb (Make_Final_Call): Add assertion that if no
    	finalization call is generated, then the type of the object being
    	finalized does not require finalization.
    	* freeze.adb (Freeze_Entity): If freezing an already-frozen
    	subtype, do not assume that nothing needs to be done. In the case
    	of a frozen subtype of a non-frozen type or subtype (which is
    	possible), freeze the non-frozen entity.
    fd4f48b3
    History
    ada: Finalization not performed for component of protected type
    Steve Baird authored
    In some cases involving a discriminated protected type with an array
    component that is subject to a discriminant-dependent index constraint,
    where the element type of the array requires finalization and the array
    type has not yet been frozen at the point of the declaration of the protected
    type, finalization of an object of the protected type may incorrectly omit
    finalization of the array component. One case where this scenario can arise
    is an instantiation of Ada.Containers.Bounded_Synchronized_Queues, passing in
    an Element type that requires finalization.
    
    gcc/ada/
    
    	* exp_ch7.adb (Make_Final_Call): Add assertion that if no
    	finalization call is generated, then the type of the object being
    	finalized does not require finalization.
    	* freeze.adb (Freeze_Entity): If freezing an already-frozen
    	subtype, do not assume that nothing needs to be done. In the case
    	of a frozen subtype of a non-frozen type or subtype (which is
    	possible), freeze the non-frozen entity.