[dmd-beta] Do a new release?
Don Clugston
dclugston at googlemail.com
Tue Dec 7 23:44:21 PST 2010
On 7 December 2010 14:56, Steve Schveighoffer <schveiguy at yahoo.com> wrote:
>> Don Clugston wrote:
>> > On 7 December 2010 00:18, Walter Bright <walter at digitalmars.com> wrote:
>> >
>> >> It's been a month, and we've got 64 bugs logged as fixed. Should we do a
>> >> release?
>> >>
>> >>
>> >
>> > I think we should get ready for a release.
>> >
>> > There is a backend wrong-code bug which I think is urgent.
>> > Bug 5294 "-O optimization breaks for loop"
>> > I've done some work on it but unfortunately haven't got a patch yet. I
>> > won't be able to do any more work on it for nearly a day.
>>
>> I'm not sure how to fix that one yet, but it has been there for 25 years
>> now, so I am not sure it is urgent!
>
> A bug like that is more urgent than memory corruption issues IMO. Blaming the
> compiler is the last thing anyone wants to do, so it's a bug likely to cause
> hours of frustration for anyone who encounters it.
>
> As an idea of how to temporarily fix it, could you disable the optimization that
> forces unsigned comparisons in the loop? That seems like a very small
> optimization we could afford to lose until you can fix this properly.
>
> -Steve
To disable it, gother.c, line 802:
else if (final >= 0)
{ /* 0 <= final < initial */
if (increment < 0 && ((final - initial) % increment) == 0 &&
!(final + increment < 0 &&
(relatop == OPge || relatop == OPlt)
)
)
{
makeuns:
- if (0 && !tyuns(rel->pelem->E2->Ety))
+ if ( !tyuns(rel->pelem->E2->Ety))
{
rel->pelem->E2->Ety = touns(rel->pelem->E2->Ety);
#ifdef DEBUG
But actually, I don't understand the value in making it an unsigned compare.
It seems that it could also be turned into (OPne final).
The conversion only happens if final will eventually be reached
((final-initial)%increment == 0)
which suggests to me that originally, it was converted into !=. I
wonder why it doesn't do that now.
Maybe it just doesn't help.
More information about the dmd-beta
mailing list