Bug 52653 - GCC 4.6.* bug on i386 Linux and mingw platforms
Summary: GCC 4.6.* bug on i386 Linux and mingw platforms
Status: RESOLVED DUPLICATE of bug 50708
Alias: None
Product: gcc
Classification: Unclassified
Component: middle-end (show other bugs)
Version: 4.6.1
: P3 normal
Target Milestone: ---
Assignee: Not yet assigned to anyone
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2012-03-21 10:37 UTC by Borut Ražem
Modified: 2012-03-28 14:23 UTC (History)
1 user (show)

See Also:
Host:
Target:
Build:
Known to work:
Known to fail:
Last reconfirmed: 2012-03-21 00:00:00


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Borut Ražem 2012-03-21 10:37:39 UTC
The following code hangs the gcc 4.6.* compiler on i386 Linux and mingw platforms.

Content of t.c:
----8<----
#define double2ul(val)  (((val) < 0) ? (((val) < -2147483647.0) ? 0x80000000UL : (unsigned long) -((long) -(val))) : (unsigned long) (val))

extern double bar ();

/* This seems to be a GCC 4.6.[012] bug on i386 Linux and mingw platforms
 */
void
foo (void)
{
  int x = 100000 >> double2ul (bar ());
}
---->8----

Command:
gcc -c t.c

Compiler hangs on OS version:
$ uname -srvmpo
Linux 2.6.32-5-686 #1 SMP Wed Jan 11 12:29:30 UTC 2012 i686 unknown GNU/Linux

Compiler version:
$ gcc --version
gcc (GCC) 4.6.1
Copyright (C) 2011 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

It compiles correctly on OS version:
$ uname -srvmpo
Linux 3.0.0-16-generic #29-Ubuntu SMP Tue Feb 14 12:48:51 UTC 2012 x86_64 x86_64 GNU/Linux

Compiler version$ gcc --version
gcc (Ubuntu/Linaro 4.6.1-9ubuntu3) 4.6.1
Copyright (C) 2011 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

Borut
Comment 1 Mikael Pettersson 2012-03-21 10:50:31 UTC
I can reproduce the gcc hang on i686-linux with 4.6.3.  4.5.3 and older don't hang.
Comment 2 Richard Biener 2012-03-21 11:50:52 UTC
We iterate endlessly between lshift_double and rshift_double if
-count == count.
Comment 3 Mikael Pettersson 2012-03-21 12:55:55 UTC
It's caused by r158372, but silent with 4.7.0 on i686.  Duplicate of PR50708.
Comment 4 Richard Biener 2012-03-28 14:23:40 UTC
.

*** This bug has been marked as a duplicate of bug 50708 ***