http://d.puremagic.com/issues/show_bug.cgi?id=3551
Don <clugd...@yahoo.com.au> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |clugd...@yahoo.com.au --- Comment #1 from Don <clugd...@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: -------