[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