Rory McGuire wrote: wrote:

Don <> changed:

           What    |Removed                     |Added
                 CC|                            |
            Summary|Is this a bug?              |Bypassing initializers with
                   |                            |goto -- Is this a bug?

--- Comment #1 from Don <> 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
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; }

void foo()
   goto xxx;
   Foo a = new Foo();
   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.

Reply via email to