On 6/11/2010 9:40 PM, Don Clugston wrote:
> On 12 June 2010 04:18, Walter Bright <[email protected]> wrote:
>>
>> Brad Roberts wrote:
>>>
>>> On Fri, 11 Jun 2010, Walter Bright wrote:
>>>>
>>>> I'm working on that now, so please no more changes unless there's some
>>>> disaster. Thanks!
>>>
>>> It looks like from the startsWith thread, that the problem is at the
>>> compiler level regression.  Have you followed that issue and if so, found a
>>> fix?  I haven't seen a dmd submit with a fix yet.
>>>
>>> Just making sure we've handled all the discovered issues.
>>
>> As far as I know, nobody has figured out where the problem is.
> 
> The original startWith() bug was a Phobos change, which is now fixed.
> The CustomFloat bug has been fixed. Is there another regression?
> _______________________________________________

The attached email is the last one I saw on the startsWith thread.  It was in
the dmd-beta list earlier today.

--- Begin Message ---
Hi,

I've tried to untangle the startsWith code, and here's the minimal test case I could come up with so far:

///////////////////////
template binaryFunImpl(bool b)
{
       template Body()
       {
           static assert(b);
           alias bool BodyType;
       }
       alias Body!().BodyType  ReturnType;  // line 9
}

uint startsWith(A)(A a) if (is(binaryFunImpl!(true ).ReturnType)) { return 1; } uint startsWith(A)(A a) if (is(binaryFunImpl!(false).ReturnType)) { return 0; } // line 13

const uint var = startsWith(1);
///////////////////////
dmd produces:

test.d(6): Error: static assert  (b) is false
test.d(9):        instantiated from here: Body!()
test.d(13):        instantiated from here: binaryFunImpl!(false)

The error does not show up if var is not const. Also, dmd 2.032 to 2.045 do not produce this error (2.046 fails), so it must be some compiler regression.

As it seems, the compile time evaluation of startsWith uses the wrong specialization. Maybe, it is just not gagging error output?

Any other ideas? I have not yet dived too deep into the template code of the compiler, but if nobody has a better clue (and time), I can give it a try.

Rainer

Andrei Alexandrescu wrote:
Thanks. It may take a while before I can tend to this. Could someone else look at it?

Andrei

On 06/10/2010 12:53 PM, Rainer Schuetze wrote:
Sorry, but it still doesn't work. The error occurs when the expression
is evaluated at compile time, so the code added to the unittest does not
cover the issue.

Rainer

Andrei Alexandrescu wrote:
Apologies. svn up should fix it, and bring some more goodies too :o).

Andrei

On 06/10/2010 10:14 AM, Don Clugston wrote:
const bool fails = startsWith("ab", "a");
_______________________________________________
dmd-beta mailing list
[email protected]
http://lists.puremagic.com/mailman/listinfo/dmd-beta


_______________________________________________
dmd-beta mailing list
[email protected]
http://lists.puremagic.com/mailman/listinfo/dmd-beta


_______________________________________________
dmd-beta mailing list
[email protected]
http://lists.puremagic.com/mailman/listinfo/dmd-beta

--- End Message ---
_______________________________________________
phobos mailing list
[email protected]
http://lists.puremagic.com/mailman/listinfo/phobos

Reply via email to