decl.c (components_to_record): Zero the alignment of the qualified union built for the variant part upon...

* decl.c (components_to_record): Zero the alignment of the qualified
	union built for the variant part upon creating it.

From-SVN: r134917
This commit is contained in:
Eric Botcazou 2008-05-03 19:47:22 +00:00 committed by Eric Botcazou
parent 88f36b7eb6
commit 8f85525e41
5 changed files with 60 additions and 0 deletions

View File

@ -1,3 +1,8 @@
2008-05-03 Eric Botcazou <ebotcazou@adacore.com>
* decl.c (components_to_record): Zero the alignment of the qualified
union built for the variant part upon creating it.
2008-05-03 Eric Botcazou <ebotcazou@adacore.com>
* decl.c (maybe_pad_type): Try to get a form of the type with integral

View File

@ -6322,6 +6322,7 @@ components_to_record (tree gnu_record_type, Node_Id component_list,
= make_node (unchecked_union ? UNION_TYPE : QUAL_UNION_TYPE);
TYPE_NAME (gnu_union_type) = gnu_union_name;
TYPE_ALIGN (gnu_union_type) = 0;
TYPE_PACKED (gnu_union_type) = TYPE_PACKED (gnu_record_type);
}

View File

@ -1,3 +1,8 @@
2008-05-03 Eric Botcazou <ebotcazou@adacore.com>
* gnat.dg/discr6_pkg.ads: New helper.
* gnat.dg/discr6.adb: New test.
2008-05-03 Eric Botcazou <ebotcazou@adacore.com>
* gnat.dg/alignment4.adb: Adjust.

View File

@ -0,0 +1,33 @@
-- { dg-do compile }
-- { dg-options "-gnatdm -gnatws" }
with Discr6_Pkg;
procedure Discr6 is
type T_Bit is range 0..1;
type T_Entier_16 is range -2**15 .. 2**15-1;
package My_Q is new Discr6_Pkg(T_Entier_16);
type T_Valeur is (BIT, Entier_16);
type R(D : T_Valeur) is record
case D is
when BIT => V_BIT : T_Bit;
when Entier_16 => V_E16 : T_Entier_16;
end case;
end record;
for R use record
V_BIT at 0 range 0..7;
V_E16 at 0 range 0..15;
D at 8 range 0..7;
end record;
for R'size use 128;
A : R(Entier_16);
I : Integer;
begin
I := My_Q.X(A.V_E16);
end;

View File

@ -0,0 +1,16 @@
generic
type T(<>) is private;
package Discr6_Pkg is
function X (A : T) return Integer;
pragma Interface(C, X);
pragma IMPORT_FUNCTION (
INTERNAL => X,
EXTERNAL => X,
PARAMETER_TYPES => (T),
MECHANISM => (Descriptor(S)));
end Discr6_Pkg;