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:
parent
88f36b7eb6
commit
8f85525e41
|
@ -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
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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;
|
|
@ -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;
|
Loading…
Reference in New Issue