lilypond-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Infinite loop with GCC 4.3


From: Han-Wen Nienhuys
Subject: Re: Infinite loop with GCC 4.3
Date: Mon, 26 May 2008 10:49:27 -0300

2008/5/26 Joe Neeman <address@hidden>:
> On Mon, 2008-05-26 at 07:53 +0200, John Mandereau wrote:
>> On 2008/05/26, Joe Neeman wrote:
>> > Attached is the smallest example that I could find that reproduces the
>> > problem. With g++ 4.3.0 on Fedora 9, I get an infinite loop with -O1 but
>> > immediate termination with -O0. With g++ 4.2.3 on Debian, I get
>> > termination regardless of the optimisation setting.
>> >
>> > I think it is also easy to argue that the program should terminate,
>> > regardless of rounding (the value of 'i' should be the same every time
>> > the loop executes. So on the second time through, 'x' should be at least
>> > as large as 'i').
>>
>> I agree.
>
> Well, it seems that I should have started by reading the gcc bug
> tracker. This is a very popular bug:
> http://gcc.gnu.org/bugzilla/show_bug.cgi?id=323
>
> The summary is that you cannot expect sane behaviour with the double
> data type using gcc (and apparently most other C compilers) on x86. In
> particular, doubles may be truncated from 80 bits to 64 bits at any
> time. Therefore, you can compare two (80-bit) doubles and find that they
> are not equal only for them to become equal on the very next line.
>
> The position of the gcc folks is that this is Intel's fault and so they
> will not fix it. This leaves us with a few options:
> 1) Change Real to be a long double instead of a double (on x86 only?)
> 2) Compile with -msse on x86
> 3) Find some way of forcing a truncation (as suggested in comment #88 of
> the above link)
> 4) Anything else?

comment #60 sounds promising too. We'd have to have a small bit of
system dependent code, but it is localized, so I can live with it.

-- 
Han-Wen Nienhuys - address@hidden - http://www.xs4all.nl/~hanwen




reply via email to

[Prev in Thread] Current Thread [Next in Thread]