diff options
author | Ilya Enkovich <enkovich.gnu@gmail.com> | 2016-03-11 11:25:29 +0000 |
---|---|---|
committer | Ilya Enkovich <ienkovich@gcc.gnu.org> | 2016-03-11 11:25:29 +0000 |
commit | 0f9befa1413555608a7f1d1c6bb1982101314a7c (patch) | |
tree | 518a468eb8868ce98f1f9ca61f5129cf12c430c0 /gcc | |
parent | 432d4670c0457098bc6e0e70963881c232350daa (diff) | |
download | gcc-0f9befa1413555608a7f1d1c6bb1982101314a7c.zip gcc-0f9befa1413555608a7f1d1c6bb1982101314a7c.tar.gz gcc-0f9befa1413555608a7f1d1c6bb1982101314a7c.tar.bz2 |
re PR rtl-optimization/70160 (gcc ICE at -O2 (seg fault) and above on valid code on x86_64-linux-gnu)
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
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/config/i386/i386.c | 5 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gcc.target/i386/pr70160.c | 19 |
4 files changed, 35 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 6e85072..9c92d9b 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -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 diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c index fa7d3ff..3d8dbc4 100644 --- a/gcc/config/i386/i386.c +++ b/gcc/config/i386/i386.c @@ -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)); } diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 254b6bc..f850e46 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -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 index 0000000..725e955 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr70160.c @@ -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; + } +} |