Fix PR68497 (ICE with -fno-checking)
authorMikhail Maltsev <maltsevm@gmail.com>
Tue, 24 Nov 2015 12:18:21 +0000 (12:18 +0000)
committerMikhail Maltsev <miyuki@gcc.gnu.org>
Tue, 24 Nov 2015 12:18:21 +0000 (12:18 +0000)
gcc/

PR target/68497
* config/i386/i386.c (output_387_binary_op): Fix assertion for
-fno-checking case.

gcc/testsuite/

PR target/68497
* gcc.target/i386/pr68497.c: New test.

From-SVN: r230803

gcc/ChangeLog
gcc/config/i386/i386.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.target/i386/pr68497.c [new file with mode: 0644]

index cea194b0b830d5fed40b6c2687526e7bd110a7ab..02590a2eaea31bf6cb5c29b64fb9c795abe9171c 100644 (file)
@@ -1,3 +1,9 @@
+2015-11-24  Mikhail Maltsev  <maltsevm@gmail.com>
+
+       PR target/68497
+       * config/i386/i386.c (output_387_binary_op): Fix assertion for
+       -fno-checking case.
+
 2015-11-24  Trevor Saunders  <tbsaunde+gcc@tbsaunde.org>
 
        * tree-ssa-uncprop.c (struct val_ssa_equiv_hash_traits): Remove.
index cc4254427968255b8f67dcc5fae78e333a39846f..2ac6c259f415d894e4c60eb29c7c280af36c9b0a 100644 (file)
@@ -17675,18 +17675,20 @@ output_387_binary_op (rtx insn, rtx *operands)
 
   /* Even if we do not want to check the inputs, this documents input
      constraints.  Which helps in understanding the following code.  */
-  if (flag_checking
-      && STACK_REG_P (operands[0])
-      && ((REG_P (operands[1])
-          && REGNO (operands[0]) == REGNO (operands[1])
-          && (STACK_REG_P (operands[2]) || MEM_P (operands[2])))
-         || (REG_P (operands[2])
-             && REGNO (operands[0]) == REGNO (operands[2])
-             && (STACK_REG_P (operands[1]) || MEM_P (operands[1]))))
-      && (STACK_TOP_P (operands[1]) || STACK_TOP_P (operands[2])))
-    ; /* ok */
-  else
-    gcc_checking_assert (is_sse);
+  if (flag_checking)
+    {
+      if (STACK_REG_P (operands[0])
+         && ((REG_P (operands[1])
+              && REGNO (operands[0]) == REGNO (operands[1])
+              && (STACK_REG_P (operands[2]) || MEM_P (operands[2])))
+             || (REG_P (operands[2])
+                 && REGNO (operands[0]) == REGNO (operands[2])
+                 && (STACK_REG_P (operands[1]) || MEM_P (operands[1]))))
+         && (STACK_TOP_P (operands[1]) || STACK_TOP_P (operands[2])))
+       ; /* ok */
+      else
+       gcc_assert (is_sse);
+    }
 
   switch (GET_CODE (operands[3]))
     {
index 2b31f8c71b29ba917367e6a91f8d8557ba6d8aed..3ec74df4db362decbfd0fd9c20d81c20747c2201 100644 (file)
@@ -1,3 +1,8 @@
+2015-11-24  Mikhail Maltsev  <maltsevm@gmail.com>
+
+       PR target/68497
+       * gcc.target/i386/pr68497.c: New test.
+
 2015-11-24  Bilyan Borisov  <bilyan.borisov@arm.com>
 
        * gcc.target/aarch64/advsimd-intrinsics/vmulx_lane_f32_indices_1.c:
diff --git a/gcc/testsuite/gcc.target/i386/pr68497.c b/gcc/testsuite/gcc.target/i386/pr68497.c
new file mode 100644 (file)
index 0000000..0135cda
--- /dev/null
@@ -0,0 +1,8 @@
+/* { dg-do compile } */
+/* { dg-options "-fno-checking" } */
+
+long double
+foo (long double x, long double y)
+{
+  return x + y;
+}