+2010-11-10 Martin Jambor <mjambor@suse.cz>
+
+ PR tree-optimization/46351
+ PR tree-optimization/46377
+ * tree-sra.c (type_internals_preclude_sra_p): Disqualify types with
+ aggregate bit-fields.
+
2010-11-10 Joseph Myers <joseph@codesourcery.com>
* doc/tm.texi.in (TARGET_OPTION_TRANSLATE_TABLE): Remove.
+2010-11-10 Martin Jambor <mjambor@suse.cz>
+
+ PR tree-optimization/46351
+ PR tree-optimization/46377
+ * gnat.dg/opt10.adb: New file.
+ * gnat.dg/opt10_pkg.ads: Likewise.
+ * gnat.dg/opt11.adb: Likewise.
+ * gnat.dg/opt11.ads: Likewise.
+
2010-11-10 Eric Botcazou <ebotcazou@adacore.com>
* gnat.dg/boolean_conv.adb: New test.
--- /dev/null
+-- { dg-do compile }
+-- { dg-options "-O2 }
+
+with Opt10_Pkg; use Opt10_Pkg;
+
+procedure Opt10 is
+
+ procedure Compare_Rep_Data (MA, MB : Rep_Message) is
+ begin
+ if MA.Data /= MB.Data then
+ raise Program_Error;
+ end if;
+ end;
+
+ procedure Check_Rep_For (Bit : Boolean) is
+ MA, MB : Rep_Message;
+ begin
+ Safe_Assign (MA, Bit);
+ Safe_Assign (MB, Bit);
+ Compare_Rep_Data (MA, MB);
+ end;
+
+begin
+ Check_Rep_For (Bit => False);
+end;
+
--- /dev/null
+package Opt10_Pkg is
+
+ type Rep_Message is record
+ Bit : Boolean;
+ Data : String (1 .. 4);
+ end record;
+ for Rep_Message use record
+ Bit at 0 range 0 .. 0;
+ Data at 0 range 1 .. 32;
+ end record;
+
+ procedure Safe_Assign (M : in out Rep_Message; Bit : Boolean);
+
+end;
--- /dev/null
+-- { dg-compile }
+-- { dg-options "-O" }
+
+package body Opt11 is
+
+ procedure Proc is
+ R : Rec;
+ begin
+ R := (others => <>);
+ end;
+
+end Opt11;
--- /dev/null
+package Opt11 is
+
+ type String_Ptr is access constant String;
+
+ type Form_Type is (Qualified, Unqualified);
+
+ type Rec is record
+ N1, N2, N3 : Natural;
+ Fixed : String_Ptr;
+ Form : Form_Type;
+ Is_Local : Boolean := True;
+ end record;
+ pragma Pack (Rec);
+
+ procedure Proc;
+
+end Opt11;
if (TREE_THIS_VOLATILE (fld)
|| !DECL_FIELD_OFFSET (fld) || !DECL_SIZE (fld)
|| !host_integerp (DECL_FIELD_OFFSET (fld), 1)
- || !host_integerp (DECL_SIZE (fld), 1))
+ || !host_integerp (DECL_SIZE (fld), 1)
+ || (DECL_BIT_FIELD (fld) && AGGREGATE_TYPE_P (ft)))
return true;
if (AGGREGATE_TYPE_P (ft)