public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug tree-optimization/58759] New: wrong code (segfaults) at -O2 on x86_64-linux-gnu in 32-bit mode
@ 2013-10-16 22:00 su at cs dot ucdavis.edu
  2013-10-17  8:46 ` [Bug tree-optimization/58759] [4.9 Regression] " mpolacek at gcc dot gnu.org
                   ` (6 more replies)
  0 siblings, 7 replies; 8+ messages in thread
From: su at cs dot ucdavis.edu @ 2013-10-16 22:00 UTC (permalink / raw)
  To: gcc-bugs

http://gcc.gnu.org/bugzilla/show_bug.cgi?id=58759

            Bug ID: 58759
           Summary: wrong code (segfaults) at -O2 on x86_64-linux-gnu in
                    32-bit mode
           Product: gcc
           Version: 4.9.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: tree-optimization
          Assignee: unassigned at gcc dot gnu.org
          Reporter: su at cs dot ucdavis.edu

The current gcc trunk miscompiles the following code on x86_64-linux at -O2 in
32-bit mode. 

This is a regression from 4.8.x. 


$ gcc-trunk -v
Using built-in specs.
COLLECT_GCC=gcc-trunk
COLLECT_LTO_WRAPPER=/usr/local/gcc-trunk/libexec/gcc/x86_64-unknown-linux-gnu/4.9.0/lto-wrapper
Target: x86_64-unknown-linux-gnu
Configured with: ../gcc-trunk/configure
--enable-languages=c,c++,objc,obj-c++,fortran,lto --disable-werror
--enable-checking=release --with-gmp=/usr/local/gcc-trunk
--with-mpfr=/usr/local/gcc-trunk --with-mpc=/usr/local/gcc-trunk
--with-cloog=/usr/local/gcc-trunk --prefix=/usr/local/gcc-trunk
Thread model: posix
gcc version 4.9.0 20131016 (experimental) [trunk revision 203716] (GCC) 
$ 
$ gcc-trunk -m32 -Os small.c; a.out
$ gcc-trunk -m32 -O3 small.c; a.out
$ gcc-trunk -m64 -O2 small.c; a.out
$ 
$ gcc-trunk -m32 -O2 small.c; a.out
Segmentation fault (core dumped)
$ 
$ gcc-4.8 -m32 -O2 small.c; a.out
$ 


-------------------------------------------


int a, b, c, d, e, f, h, l, m, n, k, o;
long long g;

struct S
{
  int f1;
  int f2;
  int f3;
  int f4;
};

static struct S i = {0,0,0,0}, j;

void
foo ()
{
  m = 1 & d;
  n = b + c;
  o = k >> 1;
  f = 0 == e;
}

int
main ()
{
  for (; h < 1; h++)
    {
      g = 1 | (0 > 1 - a ? 0 : a);
      foo ();
      for (l = 0; l < 3; l++)
    j = i;
    }
  return 0;
}


^ permalink raw reply	[flat|nested] 8+ messages in thread

* [Bug tree-optimization/58759] [4.9 Regression] wrong code (segfaults) at -O2 on x86_64-linux-gnu in 32-bit mode
  2013-10-16 22:00 [Bug tree-optimization/58759] New: wrong code (segfaults) at -O2 on x86_64-linux-gnu in 32-bit mode su at cs dot ucdavis.edu
@ 2013-10-17  8:46 ` mpolacek at gcc dot gnu.org
  2013-10-17 14:31 ` [Bug rtl-optimization/58759] " mpolacek at gcc dot gnu.org
                   ` (5 subsequent siblings)
  6 siblings, 0 replies; 8+ messages in thread
From: mpolacek at gcc dot gnu.org @ 2013-10-17  8:46 UTC (permalink / raw)
  To: gcc-bugs

http://gcc.gnu.org/bugzilla/show_bug.cgi?id=58759

Marek Polacek <mpolacek at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|UNCONFIRMED                 |NEW
   Last reconfirmed|                            |2013-10-17
                 CC|                            |mpolacek at gcc dot gnu.org
   Target Milestone|---                         |4.9.0
            Summary|wrong code (segfaults) at   |[4.9 Regression] wrong code
                   |-O2 on x86_64-linux-gnu in  |(segfaults) at -O2 on
                   |32-bit mode                 |x86_64-linux-gnu in 32-bit
                   |                            |mode
     Ever confirmed|0                           |1

--- Comment #1 from Marek Polacek <mpolacek at gcc dot gnu.org> ---
Confirmed.


^ permalink raw reply	[flat|nested] 8+ messages in thread

* [Bug rtl-optimization/58759] [4.9 Regression] wrong code (segfaults) at -O2 on x86_64-linux-gnu in 32-bit mode
  2013-10-16 22:00 [Bug tree-optimization/58759] New: wrong code (segfaults) at -O2 on x86_64-linux-gnu in 32-bit mode su at cs dot ucdavis.edu
  2013-10-17  8:46 ` [Bug tree-optimization/58759] [4.9 Regression] " mpolacek at gcc dot gnu.org
@ 2013-10-17 14:31 ` mpolacek at gcc dot gnu.org
  2013-10-20 15:08 ` mikpelinux at gmail dot com
                   ` (4 subsequent siblings)
  6 siblings, 0 replies; 8+ messages in thread
From: mpolacek at gcc dot gnu.org @ 2013-10-17 14:31 UTC (permalink / raw)
  To: gcc-bugs

http://gcc.gnu.org/bugzilla/show_bug.cgi?id=58759

--- Comment #2 from Marek Polacek <mpolacek at gcc dot gnu.org> ---
Seem to be RTL cprop, more specifically, local_cprop_pass.


^ permalink raw reply	[flat|nested] 8+ messages in thread

* [Bug rtl-optimization/58759] [4.9 Regression] wrong code (segfaults) at -O2 on x86_64-linux-gnu in 32-bit mode
  2013-10-16 22:00 [Bug tree-optimization/58759] New: wrong code (segfaults) at -O2 on x86_64-linux-gnu in 32-bit mode su at cs dot ucdavis.edu
  2013-10-17  8:46 ` [Bug tree-optimization/58759] [4.9 Regression] " mpolacek at gcc dot gnu.org
  2013-10-17 14:31 ` [Bug rtl-optimization/58759] " mpolacek at gcc dot gnu.org
@ 2013-10-20 15:08 ` mikpelinux at gmail dot com
  2013-10-21 15:52 ` law at redhat dot com
                   ` (3 subsequent siblings)
  6 siblings, 0 replies; 8+ messages in thread
From: mikpelinux at gmail dot com @ 2013-10-20 15:08 UTC (permalink / raw)
  To: gcc-bugs

http://gcc.gnu.org/bugzilla/show_bug.cgi?id=58759

Mikael Pettersson <mikpelinux at gmail dot com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |law at gcc dot gnu.org

--- Comment #3 from Mikael Pettersson <mikpelinux at gmail dot com> ---
Started with trunk @ r202933, still occurs with trunk @ r203877.  Author CC:d.


^ permalink raw reply	[flat|nested] 8+ messages in thread

* [Bug rtl-optimization/58759] [4.9 Regression] wrong code (segfaults) at -O2 on x86_64-linux-gnu in 32-bit mode
  2013-10-16 22:00 [Bug tree-optimization/58759] New: wrong code (segfaults) at -O2 on x86_64-linux-gnu in 32-bit mode su at cs dot ucdavis.edu
                   ` (2 preceding siblings ...)
  2013-10-20 15:08 ` mikpelinux at gmail dot com
@ 2013-10-21 15:52 ` law at redhat dot com
  2013-10-24 20:36 ` vmakarov at gcc dot gnu.org
                   ` (2 subsequent siblings)
  6 siblings, 0 replies; 8+ messages in thread
From: law at redhat dot com @ 2013-10-21 15:52 UTC (permalink / raw)
  To: gcc-bugs

http://gcc.gnu.org/bugzilla/show_bug.cgi?id=58759

Jeffrey A. Law <law at redhat dot com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |law at redhat dot com

--- Comment #4 from Jeffrey A. Law <law at redhat dot com> ---
I don't offhand see how this can be a jump threading problem.

./xgcc -B./ -O2 -fdbg-cnt=registered_jump_thread:0 j.c -m32 -g
-fdump-tree-all-blocks-vops-details -dap -S
[law@lugnut gcc]$ ./xgcc -B./ -O2 -fdbg-cnt=registered_jump_thread:0 j.c -m32 
dbg_cnt 'registered_jump_thread' set to 0
[law@lugnut gcc]$ ./a.out
Segmentation fault (core dumped)


Note carefully the -fdbg-cnt flag.  That turns off jump threading.

Using gdb and the raw assembly code we have the following faulting instruction
(shortly after the call to foo():

        movl    %edx, i+12

Hmm, that's strange since "i" is in readonly memory:

        .section        .rodata
        .align 4
        .type   i, @object
        .size   i, 16
i:

If we look at the faulting instruction in the .reload dump we have:

(insn 100 105 47 6 (set (mem/u/c:SI (const:SI (plus:SI (symbol_ref:SI ("i")
[flags 0x2]  <var_decl 0x7f5ee20427b8 i>)
                    (const_int 12 [0xc]))) [4 i+12 S4 A32])
        (reg:SI 1 dx [127])) j.c:30 86 {*movsi_internal}
     (nil))

Yup, that's a write to readonly memory.


^ permalink raw reply	[flat|nested] 8+ messages in thread

* [Bug rtl-optimization/58759] [4.9 Regression] wrong code (segfaults) at -O2 on x86_64-linux-gnu in 32-bit mode
  2013-10-16 22:00 [Bug tree-optimization/58759] New: wrong code (segfaults) at -O2 on x86_64-linux-gnu in 32-bit mode su at cs dot ucdavis.edu
                   ` (3 preceding siblings ...)
  2013-10-21 15:52 ` law at redhat dot com
@ 2013-10-24 20:36 ` vmakarov at gcc dot gnu.org
  2013-10-25 21:34 ` vmakarov at gcc dot gnu.org
  2013-11-05 15:05 ` rguenth at gcc dot gnu.org
  6 siblings, 0 replies; 8+ messages in thread
From: vmakarov at gcc dot gnu.org @ 2013-10-24 20:36 UTC (permalink / raw)
  To: gcc-bugs

http://gcc.gnu.org/bugzilla/show_bug.cgi?id=58759

Vladimir Makarov <vmakarov at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |vmakarov at gcc dot gnu.org

--- Comment #6 from Vladimir Makarov <vmakarov at gcc dot gnu.org> ---
(In reply to Jeffrey A. Law from comment #5)
>
> We've had numerous problems with reload in the past trying to store into
> readonly memory due to reloading values with known equivalent memory
> locations (as is the case here).  I wouldn't be surprised to see some of the
> same problems showing up in IRA.
> 
> Vlad, can you take a look?

I've just started to work on it.  I guess this is the 2nd PR on the same
problem (another one is

http://gcc.gnu.org/bugzilla/show_bug.cgi?id=58826

).

Most probably the fix will be ready at the beginning of next week.


^ permalink raw reply	[flat|nested] 8+ messages in thread

* [Bug rtl-optimization/58759] [4.9 Regression] wrong code (segfaults) at -O2 on x86_64-linux-gnu in 32-bit mode
  2013-10-16 22:00 [Bug tree-optimization/58759] New: wrong code (segfaults) at -O2 on x86_64-linux-gnu in 32-bit mode su at cs dot ucdavis.edu
                   ` (4 preceding siblings ...)
  2013-10-24 20:36 ` vmakarov at gcc dot gnu.org
@ 2013-10-25 21:34 ` vmakarov at gcc dot gnu.org
  2013-11-05 15:05 ` rguenth at gcc dot gnu.org
  6 siblings, 0 replies; 8+ messages in thread
From: vmakarov at gcc dot gnu.org @ 2013-10-25 21:34 UTC (permalink / raw)
  To: gcc-bugs

http://gcc.gnu.org/bugzilla/show_bug.cgi?id=58759

--- Comment #7 from Vladimir Makarov <vmakarov at gcc dot gnu.org> ---
Author: vmakarov
Date: Fri Oct 25 21:34:26 2013
New Revision: 204080

URL: http://gcc.gnu.org/viewcvs?rev=204080&root=gcc&view=rev
Log:
2013-10-25  Vladimir Makarov  <vmakarov@redhat.com>

    PR rtl-optimization/58759
    * lra-constraints.c (lra_constraints): Remove wrong condition to
    remove insn setting up an equivalent pseudo.

2013-10-25  Vladimir Makarov  <vmakarov@redhat.com>

    PR rtl-optimization/58759
    * gcc.target/i386/pr58759.c: New.


Added:
    trunk/gcc/testsuite/gcc.target/i386/pr58759.c
Modified:
    trunk/gcc/ChangeLog
    trunk/gcc/lra-constraints.c
    trunk/gcc/testsuite/ChangeLog


^ permalink raw reply	[flat|nested] 8+ messages in thread

* [Bug rtl-optimization/58759] [4.9 Regression] wrong code (segfaults) at -O2 on x86_64-linux-gnu in 32-bit mode
  2013-10-16 22:00 [Bug tree-optimization/58759] New: wrong code (segfaults) at -O2 on x86_64-linux-gnu in 32-bit mode su at cs dot ucdavis.edu
                   ` (5 preceding siblings ...)
  2013-10-25 21:34 ` vmakarov at gcc dot gnu.org
@ 2013-11-05 15:05 ` rguenth at gcc dot gnu.org
  6 siblings, 0 replies; 8+ messages in thread
From: rguenth at gcc dot gnu.org @ 2013-11-05 15:05 UTC (permalink / raw)
  To: gcc-bugs

http://gcc.gnu.org/bugzilla/show_bug.cgi?id=58759

Richard Biener <rguenth at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|NEW                         |RESOLVED
         Resolution|---                         |FIXED

--- Comment #8 from Richard Biener <rguenth at gcc dot gnu.org> ---
Assuming fixed.


^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2013-11-05 15:05 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2013-10-16 22:00 [Bug tree-optimization/58759] New: wrong code (segfaults) at -O2 on x86_64-linux-gnu in 32-bit mode su at cs dot ucdavis.edu
2013-10-17  8:46 ` [Bug tree-optimization/58759] [4.9 Regression] " mpolacek at gcc dot gnu.org
2013-10-17 14:31 ` [Bug rtl-optimization/58759] " mpolacek at gcc dot gnu.org
2013-10-20 15:08 ` mikpelinux at gmail dot com
2013-10-21 15:52 ` law at redhat dot com
2013-10-24 20:36 ` vmakarov at gcc dot gnu.org
2013-10-25 21:34 ` vmakarov at gcc dot gnu.org
2013-11-05 15:05 ` rguenth at gcc dot gnu.org

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).