[Issue 3549] Bypassing initializers with goto -- Is this a bug?
Rory McGuire
rjmcguire at gmail.com
Wed Nov 25 01:39:48 PST 2009
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.
More information about the Digitalmars-d-bugs
mailing list