Fix memory corruption with vector and variant record
The problem is that Has_Constrained_Partial_View must be tested on the base type of the designated type of an allocator. gcc/ada/ChangeLog: * gcc-interface/trans.c (gnat_to_gnu) <N_Allocator>: Minor tweaks. Call Has_Constrained_Partial_View on base type of designated type.
This commit is contained in:
parent
b523ee1f4b
commit
d63fbcf800
1 changed files with 12 additions and 6 deletions
|
@ -7154,9 +7154,8 @@ gnat_to_gnu (Node_Id gnat_node)
|
|||
|
||||
case N_Allocator:
|
||||
{
|
||||
tree gnu_init = NULL_TREE;
|
||||
tree gnu_type;
|
||||
bool ignore_init_type = false;
|
||||
tree gnu_type, gnu_init;
|
||||
bool ignore_init_type;
|
||||
|
||||
gnat_temp = Expression (gnat_node);
|
||||
|
||||
|
@ -7165,15 +7164,22 @@ gnat_to_gnu (Node_Id gnat_node)
|
|||
contains both the type and an initial value for the object. */
|
||||
if (Nkind (gnat_temp) == N_Identifier
|
||||
|| Nkind (gnat_temp) == N_Expanded_Name)
|
||||
gnu_type = gnat_to_gnu_type (Entity (gnat_temp));
|
||||
{
|
||||
ignore_init_type = false;
|
||||
gnu_init = NULL_TREE;
|
||||
gnu_type = gnat_to_gnu_type (Entity (gnat_temp));
|
||||
}
|
||||
|
||||
else if (Nkind (gnat_temp) == N_Qualified_Expression)
|
||||
{
|
||||
const Entity_Id gnat_desig_type
|
||||
= Designated_Type (Underlying_Type (Etype (gnat_node)));
|
||||
|
||||
ignore_init_type = Has_Constrained_Partial_View (gnat_desig_type);
|
||||
gnu_init = gnat_to_gnu (Expression (gnat_temp));
|
||||
/* The flag is effectively only set on the base types. */
|
||||
ignore_init_type
|
||||
= Has_Constrained_Partial_View (Base_Type (gnat_desig_type));
|
||||
|
||||
gnu_init = gnat_to_gnu (Expression (gnat_temp));
|
||||
gnu_init = maybe_unconstrained_array (gnu_init);
|
||||
|
||||
gigi_checking_assert (!Do_Range_Check (Expression (gnat_temp)));
|
||||
|
|
Loading…
Add table
Reference in a new issue