[Issue 3549] Bypassing initializers with goto -- Is this a bug?

Don nospam at nospam.com
Wed Nov 25 02:08:44 PST 2009


Rory McGuire wrote:
> d-bugmail at puremagic.com wrote:
>  
>> http://d.puremagic.com/issues/show_bug.cgi?id=3549
>>
>>
>> Don <clugdbug at yahoo.com.au> changed:
>>
>>            What    |Removed                     |Added
>> ----------------------------------------------------------------------------
>>                  CC|                            |clugdbug at yahoo.com.au
>>             Summary|Is this a bug?              |Bypassing initializers with
>>                    |                            |goto -- Is this a bug?
>>
>>
>> --- Comment #1 from Don <clugdbug at yahoo.com.au> 2009-11-24 20:00:14 PST ---
>> I don't know. That's an interesting case for safe D. In safe D, either the
>> initializers must be executed, or bypassing them must be banned. The code 
> below
>> is an example of memory corruption. But as @safe isn't yet implemented (so far
>> it only checks for use of asm, AFAIK), it's not a bug yet.
>>
>> -----
>> class Foo { int x; }
>>
>> @safe
>> void foo()
>> {
>>    goto xxx;
>>    Foo a = new Foo();
>> xxx:
>>    a.x = 8;
>> }
>>
>>
> 
> I would say that it is definitely a bug, if D is supposed to initialize memory 
> to zero when it is allocated.
> The assignments obviously replace the initialize to zero, which makes sense 
> except in this example. I can only think of goto being the problem how else 
> could you skip the initialization.
> Perhaps the compiler should initialize to zero if there is a goto even if the 
> initialization is overridden except for void initialization.
> 
> This should even be allowed in D1 let alone D2 or SafeD.
> 
> :) just my two cents.

The quote that Stewart found makes it completely clear: this is an 
illegal use of goto, and it should fail to compile.
Nice and simple.


More information about the Digitalmars-d-bugs mailing list