Don <> changed:

           What    |Removed                     |Added
                 CC|                            |

--- Comment #1 from Don <> 2009-11-25 02:21:53 PST ---
(In reply to comment #0)
> Take this code:
> void main() {
>     struct X {
>         int x;
>         int bar() { return x; }
>     }
>     X s;
> }
> dmd2 adds a hidden pointer to struct X. That means s.sizeof==8. For extra
> buggyness, the hidden pointer appears in s.tupleof.
> This silently breaks many uses of structs. Especially it breaks C
> compatibility, the bit-layout for asm code, and whatever you think of.
> At the very least, dmd should never add a hidden pointer if that hidden 
> pointer
> gets is not needed.
> Actually, I consider this an anti-feature, because dmd should NEVER add
> (non-static) hidden fields to structs. The request to fix or remove this
> feature is part of this bug report. The language spec should also be fixed.
> Note that even if the hidden pointer is added only if needed, this is still
> bug-prone, because it requires complicated semantic analysis just to tell,
> whether the struct's size got messed up.
> I propose to add a "dynamic" attribute for nested structs. If a struct is
> tagged with "dynamic", it can reference variables from its enclosing scope, 
> and
> may need a hidden pointer.

In the spec, that's what static structs are for. Nested _anything_ has this
behaviour. Declare it as a static struct if you don't want the hidden pointer.
Please close this bug as invalid, and create a new one: "static nested structs
are not implemented".

Configure issuemail:
------- You are receiving this mail because: -------

Reply via email to