Fix bogus error on Value_Size clause for variant record type
This is a regression present on the mainline and 10 branch: the compiler rejects a Value_Size clause on a discriminated record type with variant. gcc/ada/ChangeLog: * gcc-interface/decl.c (set_rm_size): Do not take into account the Value_Size clause if it is not for the entity itself. gcc/testsuite/ChangeLog: * gnat.dg/specs/size_clause5.ads: New test.
This commit is contained in:
parent
71465223b9
commit
e63eb26d22
2 changed files with 20 additions and 2 deletions
|
@ -9083,10 +9083,12 @@ set_rm_size (Uint uint_size, tree gnu_type, Entity_Id gnat_entity)
|
|||
if (uint_size == No_Uint)
|
||||
return;
|
||||
|
||||
/* Only issue an error if a Value_Size clause was explicitly given.
|
||||
Otherwise, we'd be duplicating an error on the Size clause. */
|
||||
/* Only issue an error if a Value_Size clause was explicitly given for the
|
||||
entity; otherwise, we'd be duplicating an error on the Size clause. */
|
||||
gnat_attr_node
|
||||
= Get_Attribute_Definition_Clause (gnat_entity, Attr_Value_Size);
|
||||
if (Present (gnat_attr_node) && Entity (gnat_attr_node) != gnat_entity)
|
||||
gnat_attr_node = Empty;
|
||||
|
||||
/* Get the size as an INTEGER_CST. Issue an error if a size was specified
|
||||
but cannot be represented in bitsizetype. */
|
||||
|
|
16
gcc/testsuite/gnat.dg/specs/size_clause5.ads
Normal file
16
gcc/testsuite/gnat.dg/specs/size_clause5.ads
Normal file
|
@ -0,0 +1,16 @@
|
|||
-- { dg-do compile }
|
||||
|
||||
package Size_Clause5 is
|
||||
|
||||
type Arr is array (1 .. 16) of Boolean;
|
||||
|
||||
type RRec (D : Boolean) is record
|
||||
case D is
|
||||
when True => I : Integer;
|
||||
when False => A : Arr;
|
||||
end case;
|
||||
end record;
|
||||
for RRec'Object_Size use 160;
|
||||
for RRec'Value_Size use 160;
|
||||
|
||||
end Size_Clause5;
|
Loading…
Add table
Reference in a new issue