* tree-sra.c (sra_type_can_be_decomposed_p) <RECORD_TYPE>: Make sure
that the bitfield is of integral type before testing its precision.
From-SVN: r136009
+2008-05-27 Eric Botcazou <ebotcazou@adacore.com>
+
+ * tree-sra.c (sra_type_can_be_decomposed_p) <RECORD_TYPE>: Make sure
+ that the bitfield is of integral type before testing its precision.
+
2008-05-27 Trevor Smigiel <trevor_smigiel@playstation.sony.com>
Sa Liu <saliu@de.ibm.com>
+2008-05-27 Eric Botcazou <ebotcazou@adacore.com>
+
+ * gnat.dg/pack9.ad[sb]: New test.
+
2008-05-27 Arnaud Charlet <charlet@adacore.com>
* gnat.dg/sync1.ad[sb]: New test.
--- /dev/null
+-- { dg-do compile }
+-- { dg-options "-O2 -gnatp -cargs --param sra-max-structure-size=24 --param sra-max-structure-count=6 -fdump-tree-final_cleanup" }
+
+package body Pack9 is
+
+ procedure Copy (X, Y : R2_Ptr) is
+ T : R2 := Y.all;
+ begin
+ if T.I2 /= Y.I2 then
+ raise Program_Error;
+ end if;
+ X.all := T;
+ end;
+
+end Pack9;
+
+-- { dg-final { scan-tree-dump-not "__gnat_rcheck" "final_cleanup" } }
+-- { dg-final { cleanup-tree-dump "final_cleanup" } }
--- /dev/null
+package Pack9 is
+
+ type R1 is record
+ I : Integer;
+ C : Character;
+ end record;
+
+ type R2 is record
+ I1, I2 : Integer;
+ A : R1;
+ end record;
+ pragma Pack(R2);
+
+ type R2_Ptr is access all R2;
+
+ procedure Copy (X, Y : R2_Ptr);
+
+end Pack9;
{
/* Reject incorrectly represented bit fields. */
if (DECL_BIT_FIELD (t)
+ && INTEGRAL_TYPE_P (TREE_TYPE (t))
&& (tree_low_cst (DECL_SIZE (t), 1)
!= TYPE_PRECISION (TREE_TYPE (t))))
goto fail;