* expr.c (optimize_bitfield_assignment_op): Remove obsolete assertion.
authorEric Botcazou <ebotcazou@adacore.com>
Fri, 9 Feb 2018 09:50:14 +0000 (09:50 +0000)
committerEric Botcazou <ebotcazou@gcc.gnu.org>
Fri, 9 Feb 2018 09:50:14 +0000 (09:50 +0000)
From-SVN: r257519

gcc/ChangeLog
gcc/expr.c
gcc/testsuite/ChangeLog
gcc/testsuite/gnat.dg/sso8.adb [new file with mode: 0644]
gcc/testsuite/gnat.dg/sso8_pkg.ads [new file with mode: 0644]

index f255810..7ed08fa 100644 (file)
@@ -1,3 +1,7 @@
+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
index 36a6c72..876883e 100644 (file)
@@ -4726,8 +4726,6 @@ optimize_bitfield_assignment_op (poly_uint64 pbitsize,
     }
   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.  */
index 8772c42..544ebef 100644 (file)
@@ -1,3 +1,8 @@
+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
diff --git a/gcc/testsuite/gnat.dg/sso8.adb b/gcc/testsuite/gnat.dg/sso8.adb
new file mode 100644 (file)
index 0000000..003077c
--- /dev/null
@@ -0,0 +1,15 @@
+-- { 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;
diff --git a/gcc/testsuite/gnat.dg/sso8_pkg.ads b/gcc/testsuite/gnat.dg/sso8_pkg.ads
new file mode 100644 (file)
index 0000000..e9227e6
--- /dev/null
@@ -0,0 +1,32 @@
+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;