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:
Eric Botcazou 2020-09-10 17:59:11 +02:00
parent 71465223b9
commit e63eb26d22
2 changed files with 20 additions and 2 deletions

View file

@ -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. */

View 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;