[Issue 3551] nested struct => dmd adds a hidden pointer

d-bugmail at puremagic.com d-bugmail at puremagic.com
Wed Nov 25 02:21:54 PST 2009


http://d.puremagic.com/issues/show_bug.cgi?id=3551


Don <clugdbug at yahoo.com.au> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |clugdbug at yahoo.com.au


--- Comment #1 from Don <clugdbug at yahoo.com.au> 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: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------


More information about the Digitalmars-d-bugs mailing list