[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