Skip to content
Snippets Groups Projects
Commit 2ae98c3a authored by Piotr Trojanek's avatar Piotr Trojanek Committed by Pierre-Marie de Rodat
Browse files

[Ada] Propagate null-exclusion to anonymous access types

When analyzing an array or record type declaration whose component has a
constrained access type, e.g.:

   type Buffer_Acc is not null access all String;

   type Buffer_Rec is record
      Data : Buffer_Acc (1 .. 10);
   end record;

   type Buffer_Arr is array (Boolean) of Buffer_Acc (1 .. 10);

we propagated various properties of the unconstrained access type (e.g.
the designated type, access-to-constant flag), but forgot to propagate
the null-exclusion.

For GNAT it didn't make a big difference, because the (anonymous)
component type was never subject to legality checks. The "value
tracking" optimisation machinery, which also deals with null values,
only works for entire objects and doesn't care about components.
However, GNATprove uses this flag when an access-to-component object is
dereferenced.

gcc/ada/

	* sem_ch3.adb (Constrain_Access): Propagate null-exclusion flag
	from parent type.
parent 8182602c
No related branches found
No related tags found
No related merge requests found
......@@ -13535,6 +13535,7 @@ package body Sem_Ch3 is
Set_Directly_Designated_Type (Def_Id, Desig_Subtype);
Set_Depends_On_Private (Def_Id, Has_Private_Component (Def_Id));
Set_Is_Access_Constant (Def_Id, Is_Access_Constant (T));
Set_Can_Never_Be_Null (Def_Id, Can_Never_Be_Null (T));
 
Conditional_Delay (Def_Id, T);
 
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment