Commit 8f85525e by Eric Botcazou Committed by Eric Botcazou

decl.c (components_to_record): Zero the alignment of the qualified union built…

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
parent 88f36b7e
2008-05-03 Eric Botcazou <ebotcazou@adacore.com> 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 * decl.c (maybe_pad_type): Try to get a form of the type with integral
mode even if the alignment is not a factor of the original size. But mode even if the alignment is not a factor of the original size. But
make sure to create the inner field with the original size. Reorder. make sure to create the inner field with the original size. Reorder.
...@@ -6322,6 +6322,7 @@ components_to_record (tree gnu_record_type, Node_Id component_list, ...@@ -6322,6 +6322,7 @@ components_to_record (tree gnu_record_type, Node_Id component_list,
= make_node (unchecked_union ? UNION_TYPE : QUAL_UNION_TYPE); = make_node (unchecked_union ? UNION_TYPE : QUAL_UNION_TYPE);
TYPE_NAME (gnu_union_type) = gnu_union_name; TYPE_NAME (gnu_union_type) = gnu_union_name;
TYPE_ALIGN (gnu_union_type) = 0;
TYPE_PACKED (gnu_union_type) = TYPE_PACKED (gnu_record_type); TYPE_PACKED (gnu_union_type) = TYPE_PACKED (gnu_record_type);
} }
......
2008-05-03 Eric Botcazou <ebotcazou@adacore.com> 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. * gnat.dg/alignment4.adb: Adjust.
* gnat.dg/alignment5.adb: Likewise. * gnat.dg/alignment5.adb: Likewise.
* gnat.dg/alignment6.adb: XFAIL. * gnat.dg/alignment6.adb: XFAIL.
-- { 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;
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;
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment