Launchpad has imported 14 comments from the remote bug at
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=28045.

If you reply to an imported comment from within Launchpad, your comment
will be sent to the remote bug automatically. Read more about
Launchpad's inter-bugtracker facilities at
https://help.launchpad.net/InterBugTracking.

------------------------------------------------------------------------
On 2006-06-15T19:12:03+00:00 Jerry James wrote:

This is a stripped-down bit of code representing a bad code generation
problem we've been having with XEmacs 21.5 + gcc 4.X + optimization.  I
can reproduce with Fedora Core 5's packaging of gcc 4.1.1 on the x86_64
platform, and with Ubuntu's packaging of gcc 4.0.3 on the i386 platform.

Compile the following code without optimization, and it reports that the
negation of 1 is -1, which is in bounds.  Compile with any -O flag
(confirmed for -O, -O2, -O3, and -Os) and the code reports that the
negation of 1 is -1, which is out of bounds.  If I break the &&
expression up into 2 consecutive if statements to see which bound is
supposedly violated, the optimized code reports that -1 is within each
bound individually.

Things that have no effect: int/long are interchangeable; the size of
the "tag" bitfield doesn't seem to matter, so long as the "tag" size and
the "val" size add up to "INT_BITS".

I also tried compiling with all of the flags turned on by -O, but
without -O itself.  Good code is generated in that case.

#include <stdio.h>

#define INT_BITS (sizeof(int) * 8)
#define MAX_VALUE (int)((1UL << (INT_BITS - 2)) - 1UL)
#define MIN_VALUE (-MAX_VALUE - 1)

struct tagged_int
{
  int tag: 2;
  int val: INT_BITS - 2;
};

static void
negate (struct tagged_int accum)
{
  printf ("min = %d, max = %d\n", MIN_VALUE, MAX_VALUE);
  printf ("The negation of 1 is %d, which is ", -(int)accum.val);
  if (-(int)accum.val <= MAX_VALUE && -(int)accum.val >= MIN_VALUE) {
    puts ("in bounds.");
  } else {
    puts ("out of bounds.");
  }
}

int
main ()
{
  struct tagged_int obj;

  obj.tag = 0;
  obj.val = 1L;
  negate(obj);
  return 0;
}

Reply at:
https://bugs.launchpad.net/ubuntu/+source/gcc-4.0/+bug/178637/comments/0

------------------------------------------------------------------------
On 2006-06-15T20:04:41+00:00 Rguenth wrote:

Works for me on the mainline.

Reply at:
https://bugs.launchpad.net/ubuntu/+source/gcc-4.0/+bug/178637/comments/1

------------------------------------------------------------------------
On 2006-06-17T21:04:29+00:00 Jerry James wrote:

Created attachment 11688
Testcase showing an optimizaton bug

Reply at:
https://bugs.launchpad.net/ubuntu/+source/gcc-4.0/+bug/178637/comments/2

------------------------------------------------------------------------
On 2006-06-17T21:05:09+00:00 Jerry James wrote:

I can confirm that both the mainline and the current 4.1 branch compile
the testcase correctly.  Nevertheless, both the current 4.1 branch and
the mainline (revision 114741) are still miscompiling XEmacs when any
optimization at all is used, so the testcase must be too simple.  I just
attached a more complex testcase that includes much of the actual code
from XEmacs.  I trimmed this down quite a bit from the original code,
but it's still over 600 lines.  This code illustrates the bug on both
the i386 and x86_64 platforms.  You have to link with the GMP library
(-lgmp) when compiling.

Reply at:
https://bugs.launchpad.net/ubuntu/+source/gcc-4.0/+bug/178637/comments/3

------------------------------------------------------------------------
On 2006-06-17T22:06:49+00:00 Pinskia wrote:

Reduced testcase:
struct a
{
   unsigned int bits : 1;
   signed long val : ((sizeof(long) * 8) - 1);
};
int Fnegate (struct a b)
{
  if ((-((long)b.val)) <= ((long) ((1UL << (((sizeof(long) * 8) - 1) - 1)) 
-1UL)) && (-((long)b.val)) >= (-(((long) ((1UL << (((sizeof(long) * 8) - 1) - 
1)) -1UL))) - 1))
     return 0 ;
     abort ();
}
int main ()
{
  struct a b = {1, 1};
  Fnegate (b);
  return 0;
}

Reply at:
https://bugs.launchpad.net/ubuntu/+source/gcc-4.0/+bug/178637/comments/4

------------------------------------------------------------------------
On 2006-06-18T10:58:42+00:00 Rguenth wrote:

operand_equal_p (bD.1525.valD.1524, (long intD.2) bD.1525.valD.1524, 0)

is true.  make_range preserved the cast to (long int) for a reason,
though.

If we fix operand_equal_p, we no longer fold the test, but keep

  if (-(long int) b.val <= 1073741823 && -(long int) b.val >= -1073741824)
    {
      return 0;
    }
  abort ();

so, I have a patch.

Reply at:
https://bugs.launchpad.net/ubuntu/+source/gcc-4.0/+bug/178637/comments/5

------------------------------------------------------------------------
On 2006-06-19T14:48:56+00:00 Rguenth wrote:

Subject: Bug 28045

Author: rguenth
Date: Mon Jun 19 14:48:47 2006
New Revision: 114772

URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=114772
Log:
2006-06-19  Richard Guenther  <[email protected]>

        PR middle-end/28045
        * fold-const.c (operand_equal_p): Check if the argument types
        have the same precision before stripping NOPs.

        * gcc.dg/torture/pr28045.c: New testcase.

Added:
    trunk/gcc/testsuite/gcc.dg/torture/pr28045.c
Modified:
    trunk/gcc/ChangeLog
    trunk/gcc/fold-const.c
    trunk/gcc/testsuite/ChangeLog


Reply at:
https://bugs.launchpad.net/ubuntu/+source/gcc-4.0/+bug/178637/comments/6

------------------------------------------------------------------------
On 2006-06-19T14:49:08+00:00 Rguenth wrote:

Fixed on the mainline.

Reply at:
https://bugs.launchpad.net/ubuntu/+source/gcc-4.0/+bug/178637/comments/7

------------------------------------------------------------------------
On 2006-06-19T16:27:46+00:00 Jerry James wrote:

On behalf of the XEmacs team, I thank you for your amazingly speedy
attention to this bug report.

Reply at:
https://bugs.launchpad.net/ubuntu/+source/gcc-4.0/+bug/178637/comments/8

------------------------------------------------------------------------
On 2006-06-23T09:52:53+00:00 Rguenth wrote:

Subject: Bug 28045

Author: rguenth
Date: Fri Jun 23 09:52:40 2006
New Revision: 114929

URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=114929
Log:
2006-06-23  Richard Guenther  <[email protected]>

        PR middle-end/28045
        * fold-const.c (operand_equal_p): Check if the argument types
        have the same precision before stripping NOPs.

        * gcc.dg/torture/pr28045.c: New testcase.

Added:
    branches/gcc-4_1-branch/gcc/testsuite/gcc.dg/torture/pr28045.c
      - copied unchanged from r114772, 
trunk/gcc/testsuite/gcc.dg/torture/pr28045.c
Modified:
    branches/gcc-4_1-branch/gcc/ChangeLog
    branches/gcc-4_1-branch/gcc/fold-const.c
    branches/gcc-4_1-branch/gcc/testsuite/ChangeLog


Reply at:
https://bugs.launchpad.net/ubuntu/+source/gcc-4.0/+bug/178637/comments/9

------------------------------------------------------------------------
On 2006-06-23T09:57:48+00:00 Rguenth wrote:

Subject: Bug 28045

Author: rguenth
Date: Fri Jun 23 09:57:37 2006
New Revision: 114930

URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=114930
Log:
2006-06-23  Richard Guenther  <[email protected]>

        PR middle-end/28045
        * fold-const.c (operand_equal_p): Check if the argument types
        have the same precision before stripping NOPs.

        * gcc.dg/torture/pr28045.c: New testcase.

Added:
    branches/gcc-4_0-branch/gcc/testsuite/gcc.dg/torture/pr28045.c
      - copied unchanged from r114772, 
trunk/gcc/testsuite/gcc.dg/torture/pr28045.c
Modified:
    branches/gcc-4_0-branch/gcc/ChangeLog
    branches/gcc-4_0-branch/gcc/fold-const.c
    branches/gcc-4_0-branch/gcc/testsuite/ChangeLog


Reply at:
https://bugs.launchpad.net/ubuntu/+source/gcc-4.0/+bug/178637/comments/10

------------------------------------------------------------------------
On 2006-06-23T09:57:52+00:00 Rguenth wrote:

Fixed.

Reply at:
https://bugs.launchpad.net/ubuntu/+source/gcc-4.0/+bug/178637/comments/11

------------------------------------------------------------------------
On 2006-06-29T21:37:33+00:00 Patchapp wrote:

Subject: Bug number PR28045

A patch for this bug has been added to the patch tracker.
The mailing list url for the patch is 
http://gcc.gnu.org/ml/gcc-patches/2006-06/msg01000.html


Reply at: 
https://bugs.launchpad.net/ubuntu/+source/gcc-4.0/+bug/178637/comments/12

------------------------------------------------------------------------
On 2014-02-16T13:16:58+00:00 Jackie-rosen wrote:

*** Bug 260998 has been marked as a duplicate of this bug. ***
Seen from the domain http://volichat.com
Page where seen: http://volichat.com/adult-chat-rooms
Marked for reference. Resolved as fixed @bugzilla.

Reply at:
https://bugs.launchpad.net/ubuntu/+source/gcc-4.0/+bug/178637/comments/22

-- 
You received this bug notification because you are a member of Ubuntu
Bugs, which is subscribed to Ubuntu.
https://bugs.launchpad.net/bugs/178637

Title:
  PR28045 (gcc optimization bug) still not fixed in dapper

To manage notifications about this bug go to:
https://bugs.launchpad.net/gcc/+bug/178637/+subscriptions

-- 
ubuntu-bugs mailing list
[email protected]
https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs

Reply via email to