Bug 10451 – Array of pointers to opaque struct gives forward reference errors.

Status
RESOLVED
Resolution
FIXED
Severity
major
Priority
P2
Component
dmd
Product
D
Version
D2
Platform
All
OS
All
Creation time
2013-06-23T08:42:00Z
Last change time
2013-10-02T05:56:44Z
Keywords
pull
Assigned to
nobody
Creator
aldacron

Comments

Comment #0 by aldacron — 2013-06-23T08:42:23Z
struct foo; struct bar { foo*[] foos; } The error only occurs when the array is declared as a struct field. When declared as a class member or in a function, there is no error.
Comment #1 by aldacron — 2013-08-11T07:23:09Z
I've got some new info on this. The error also occurs outside of structs if the array is initialized: ========= struct foo; void main() { foo*[] foos = []; } ========= Here's the full error spew that I get in both cases: ================== forref.d(3): Error: struct forrref.foo is forward referenced when looking for 't oHash' forref.d(3): Error: struct forrref.foo is forward referenced when looking for 'o pCmp' forref.d(3): Error: struct forrref.foo is forward referenced when looking for 't oString' forref.d(3): Error: struct forrref.foo unknown size forref.d(3): Error: struct forrref.foo no size yet for forward reference forref.d(3): Error: struct forrref.foo unknown size forref.d(3): Error: struct forrref.foo no size yet for forward reference ===================
Comment #2 by turkeyman — 2013-08-31T17:45:25Z
Comment #3 by acehreli — 2013-08-31T20:05:39Z
Comment #4 by turkeyman — 2013-08-31T23:00:46Z
(In reply to comment #3) > Manu meant this: :) > > http://d.puremagic.com/issues/show_bug.cgi?id=10766 Haha, thx ;)
Comment #5 by ibuclaw — 2013-09-18T04:18:33Z
This happens because, eg: array literals are initialised by the GC by calling _d_arrayliteralTX (typeinfo, dim); This requires that the struct has a complete runtime type information about a type. Something that does not get generated for opaque types, which makes this bug not the easiest to fix - and the same is with other array operations which also require typeinfo to be available.
Comment #6 by turkeyman — 2013-09-18T04:39:28Z
But the compiler doesn't need to know anything about the type to allocate an array of pointers. Surely the compiler can use/share the typeinfo of void* in this case?
Comment #7 by ibuclaw — 2013-09-18T05:41:37Z
(In reply to comment #6) > But the compiler doesn't need to know anything about the type to allocate an > array of pointers. Surely the compiler can use/share the typeinfo of void* in > this case? Sure we could use void* if is your expectation for typeid(foo*).toString to return "void*" =)
Comment #8 by turkeyman — 2013-09-18T05:46:42Z
Surely it can't be hard to synthesize a named pointer type... unless it's dereferenced, it shouldn't need an actual definition in the typeinfo. So it would just be a stub or dummy typeinfo that's empty?
Comment #9 by grogan.colin — 2013-09-18T05:48:42Z
A possible workaround to this is to create the struct like: struct foo {} Though, in this case it isn't an opaque struct and is merely a struct with no members.
Comment #10 by k.hara.pg — 2013-09-28T23:02:28Z
*** Issue 10766 has been marked as a duplicate of this issue. ***
Comment #11 by k.hara.pg — 2013-09-28T23:03:48Z
Comment #12 by github-bugzilla — 2013-09-29T12:23:40Z
Commits pushed to master at https://github.com/D-Programming-Language/dmd https://github.com/D-Programming-Language/dmd/commit/e7d3e97cdaf4653a39f7f9c68a4868ede2c4bb6b fix Issue 10451 - Array of pointers to opaque struct gives forward reference errors. https://github.com/D-Programming-Language/dmd/commit/f2cc07963d2ade375c056b48580d7c638d11f60c Merge pull request #2594 from 9rnsr/fix10451 Issue 10451 - Array of pointers to opaque struct gives forward reference errors.
Comment #13 by k.hara.pg — 2013-10-01T19:24:03Z
*** Issue 9795 has been marked as a duplicate of this issue. ***