Scoped local variables

Denton Cockburn diboss at hotmail.com
Fri Dec 7 17:58:06 PST 2007


On Fri, 07 Dec 2007 17:03:19 -0500, Jason House wrote:

> Frank Benoit Wrote:
> 
>> It is a bug. I can reproduce it on linux/dmd. Would you mind to file a
>> bug report?
> 
> Before I'd do, I'd like to know if the following things make a
> difference:
> 
> 1. Tango vs. Phobos
> 2. Latest D 1.x vs. latest D 2.x
> 
> 
> 
>> 
>> Jason House schrieb:
>> > Denton Cockburn Wrote:
>> > 
>> >> On Fri, 07 Dec 2007 09:52:07 -0500, Jason House wrote:
>> >>
>> >>> I'm having my code crash when I add in scope variables.  While it
>> >>> works in some cases, it doesn't in others.  I've whittled down my
>> >>> current problem to code that looks like:
>> >>>
>> >>> unittest{
>> >>>   scope T t = new T();
>> >>> }
>> >>>
>> >>> "T" has a bunch of arrays that it allocates and fills when it's
>> >>> constructed.  I'm currently confused how this code would cause a
>> >>> crash. Any insights would be much appreciated.
>> >> Need more information.
>> >> What's the message given when it crashes?
>> > 
>> > It's a windows error:
>> > housebot-0.7 has encountered a problem and needs to close.  We are
>> > sorry for the inconvenience. If you were in the middle of something,
>> > the information you were working on might be lost.
>> > 
>> > 
>> >> Is the cause of the crash the fact that it's scoped?
>> > 
>> > As best as I can tell.
>> > 
>> >> Have you tried without scope?
>> > 
>> > Yes, it works flawlessly without the scope.
>> > 
>> >> Are you sure it's not in the constructor of T?
>> > 
>> > I am now.  I stripped it down to an empty constructor and removed all
>> > member variables.
>> > 
>> > Since posting, I've reduced this down to a simple example.  This
>> > example sometimes crashes dmd itself instead of producing a crashing
>> > executable. I'm using dmd 1.018 with Tango 0.99.  Now that I know
>> > it's dmd and not me, I may try upgrading the version of dmd that I
>> > use.
>> > 
>> > version=crash;
>> > //version=work1;
>> > //version=work2;
>> > //version=work3;
>> > 
>> > interface I{
>> > }
>> > 
>> > class C : public I{
>> > }
>> > 
>> > unittest{
>> >         version(crash) scope I def = new C;
>> >         version(work1) scope C def = new C;
>> >         version(work2)       I def = new C;
>> >         version(work3)       C def = new C;
>> > }
>> > 
>> > int main(){
>> >         return 0;
>> > }

1.023 on linux using phobos, it works fine.

Could it be a tango runtime issue?


More information about the Digitalmars-d-learn mailing list