]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR rtl-optimization/70160 (gcc ICE at -O2 (seg fault) and above on valid code...
authorIlya Enkovich <enkovich.gnu@gmail.com>
Fri, 11 Mar 2016 11:25:29 +0000 (11:25 +0000)
committerIlya Enkovich <ienkovich@gcc.gnu.org>
Fri, 11 Mar 2016 11:25:29 +0000 (11:25 +0000)
gcc/

PR target/70160
* config/i386/i386.c (scalar_chain::convert_reg): Skip uses
of uninitialized values.

gcc/testsuite/

PR target/70160
* gcc.target/i386/pr70160.c: New test.

Co-Authored-By: Jakub Jelinek <jakub@redhat.com>
From-SVN: r234135

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

index 6e85072e916b321506512f2ece39504ac31b0ea5..9c92d9bb236a346b9081dc068dc679ab1e3ed562 100644 (file)
@@ -1,3 +1,10 @@
+2016-03-11  Ilya Enkovich  <enkovich.gnu@gmail.com>
+           Jakub Jelinek  <jakub@redhat.com>
+
+       PR target/70160
+       * config/i386/i386.c (scalar_chain::convert_reg): Skip uses
+       of uninitialized values.
+
 2016-03-11  Andreas Krebbel  <krebbel@linux.vnet.ibm.com>
 
        * config/s390/s390.md ("trunctddd2"): Turn former define_insn into
index fa7d3ff65daed24baafdc6c29014db06b28c511a..3d8dbc48e5f3202cfc57974ecb7c4079c074d77f 100644 (file)
@@ -3372,8 +3372,11 @@ scalar_chain::convert_reg (unsigned regno)
            bitmap_clear_bit (conv, DF_REF_INSN_UID (ref));
          }
       }
-    else if (NONDEBUG_INSN_P (DF_REF_INSN (ref)))
+    /* Skip debug insns and uninitialized uses.  */
+    else if (DF_REF_CHAIN (ref)
+            && NONDEBUG_INSN_P (DF_REF_INSN (ref)))
       {
+       gcc_assert (scopy);
        replace_rtx (DF_REF_INSN (ref), reg, scopy);
        df_insn_rescan (DF_REF_INSN (ref));
       }
index 254b6bccff37d2c658ebad8757d0fe66c584f8dd..f850e462aab9d4b5b55c45dbe2f8d0df77c49de1 100644 (file)
@@ -1,3 +1,8 @@
+2016-03-11  Ilya Enkovich  <enkovich.gnu@gmail.com>
+
+       PR target/70160
+       * gcc.target/i386/pr70160.c: New test.
+
 2016-03-11  Andreas Krebbel  <krebbel@linux.vnet.ibm.com>
 
        * gcc.target/s390/dfp-1.c: New test.
diff --git a/gcc/testsuite/gcc.target/i386/pr70160.c b/gcc/testsuite/gcc.target/i386/pr70160.c
new file mode 100644 (file)
index 0000000..725e955
--- /dev/null
@@ -0,0 +1,19 @@
+/* { dg-do compile { target { ia32 } } } */
+/* { dg-options "-O2 -msse2 -Wno-uninitialized -Wno-maybe-uninitialized" } */
+
+long long a;
+void fn1();
+void fn2(unsigned t, int a_int, unsigned p)
+{
+  long long x;
+  int i, j = 1;
+  t = i;
+  for (; j;) {
+    a = x;
+    x = 1 + t;
+    j += a_int;
+    fn1();
+    if (x == 1)
+      return;
+  }
+}