+2018-02-09 Eric Botcazou <ebotcazou@adacore.com>
+
+ * expr.c (optimize_bitfield_assignment_op): Remove obsolete assertion.
+
2018-02-09 Jakub Jelinek <jakub@redhat.com>
PR sanitizer/84285
}
else if (!REG_P (str_rtx) && GET_CODE (str_rtx) != SUBREG)
return false;
- else
- gcc_assert (!reverse);
/* If the bit field covers the whole REG/MEM, store_field
will likely generate better code. */
+2018-02-09 Eric Botcazou <ebotcazou@adacore.com>
+
+ * gnat.dg/sso8.adb: New test.
+ * gnat.dg/sso8_pkg.ads: New helper.
+
2018-02-09 Richard Biener <rguenther@suse.de>
PR tree-optimization/84278
--- /dev/null
+-- { dg-do run }
+-- { dg-options "-O" }
+
+with Interfaces; use Interfaces;
+with SSO8_Pkg; use SSO8_Pkg;
+
+procedure SSO8 is
+ Data : Rec;
+begin
+ Data.Array_Data (2) := True;
+ Val8 := Conv (Data);
+ if Val8 /= 32 then
+ raise Program_Error;
+ end if;
+end;
--- /dev/null
+with Interfaces;
+with System;
+with Unchecked_Conversion;
+
+package SSO8_Pkg is
+
+ Val8 : Interfaces.Unsigned_8;
+
+ type Two_Bit_Int is range 0 .. 3;
+ for Two_Bit_Int'size use 2;
+
+ type Arr is array (1 .. 5) of Boolean;
+ for Arr'scalar_storage_order use System.High_Order_First;
+ pragma Pack (Arr);
+
+ type Rec is record
+ Boolean_Data : Boolean;
+ Array_Data : Arr;
+ Two_Bit_Data : Two_Bit_Int;
+ end record;
+ for Rec use record
+ Boolean_Data at 0 range 0 .. 0;
+ Array_Data at 0 range 1 .. 5;
+ Two_Bit_Data at 0 range 6 .. 7;
+ end record;
+ for Rec'size use 8;
+ for Rec'bit_order use System.High_Order_First;
+ for Rec'scalar_storage_order use System.High_Order_First;
+
+ function Conv is new Unchecked_Conversion (Rec, Interfaces.Unsigned_8);
+
+end SSO8_Pkg;