digitalmars.D.bugs - [Issue 217] New: typeof not working properly in internal/object.d
- d-bugmail puremagic.com (46/46) Jun 22 2006 http://d.puremagic.com/issues/show_bug.cgi?id=217
- d-bugmail puremagic.com (10/10) Sep 16 2007 http://d.puremagic.com/issues/show_bug.cgi?id=217
- d-bugmail puremagic.com (6/6) Sep 16 2007 http://d.puremagic.com/issues/show_bug.cgi?id=217
- d-bugmail puremagic.com (18/18) Oct 20 2007 http://d.puremagic.com/issues/show_bug.cgi?id=217
http://d.puremagic.com/issues/show_bug.cgi?id=217 Summary: typeof not working properly in internal/object.d Product: D Version: 0.161 Platform: PC OS/Version: Windows Status: NEW Severity: normal Priority: P3 Component: DMD AssignedTo: bugzilla digitalmars.com ReportedBy: sean f4.ca This bug appears related to the special handling DMD seems to have for compiling the object.d implementation file: internal/object.d. If the version blocks used to generate size_t and ptrdiff_t aliases (ie. lines 48-73) are removed and replaced by the more flexible aliases used in the global object.d header file: alias typeof(int.sizeof) size_t; alias typeof(cast(void*)0 - cast(void*)0) ptrdiff_t; alias size_t hash_t; Then attempting to rebuild Phobos will generate these errors: \bin\dmd\bin\dmd -c -O -release -nofloat -w internal\object.d internal\object.d(388): function object.memcpy (void*,void*,typeof(4u)) does not match argument types (ubyte*,void*,uint) internal\object.d(388): cannot implicitly convert expression (sz) of type uint to typeof(4u) internal\object.d(389): function object.memcpy (void*,void*,typeof(4u)) does not match argument types (void*,void*,uint) internal\object.d(389): cannot implicitly convert expression (sz) of type uint to typeof(4u) internal\object.d(390): function object.memcpy (void*,void*,typeof(4u)) does not match argument types (void*,ubyte*,uint) internal\object.d(390): cannot implicitly convert expression (sz) of type uint to typeof(4u) internal\object.d(537): function object.memcmp (void*,void*,typeof(4u)) does not match argument types (void*,void*,uint) internal\object.d(537): cannot implicitly convert expression (this.xsize) of type uint to typeof(4u) internal\object.d(555): function object.memcmp (void*,void*,typeof(4u)) does not match argument types (void*,void*,uint) internal\object.d(555): cannot implicitly convert expression (this.xsize) of type uint to typeof(4u) --- errorlevel 1 I can't reproduce this elsewhere so I'm marking this bug as low priority, but it should probably be fixed at some point. --
Jun 22 2006
http://d.puremagic.com/issues/show_bug.cgi?id=217 It looks like it's a forward declaration issue with respect to alias and extern(C) functions. As long as the alias is before the extern(C) functions that use the aliases, it's fine. For example, calloc uses size_t. In the next attachment is a diff against dmd 1.021's internal/object.d that builds successfully. This isn't to say that there isn't a bug here, since order isn't supposed to matter, right? --
Sep 16 2007
http://d.puremagic.com/issues/show_bug.cgi?id=217 Created an attachment (id=182) --> (http://d.puremagic.com/issues/attachment.cgi?id=182&action=view) change to using a less version specific set of aliases --
Sep 16 2007
http://d.puremagic.com/issues/show_bug.cgi?id=217 The attachment was applied in 1.022/2.006, but the underlying but wasn't fixed. Here's a reduced test case for it: --------- extern(C) void bar(foo b); alias typeof(int.sizeof) foo; void main() { bar(1); } --------- results in: bug217.d(3): function bug217.bar (typeof(4u)) does not match parameter types (int) bug217.d(3): Error: cannot implicitly convert expression (1) of type int to typeof(4u) bug217.d(3): Error: cannot cast int to typeof(4u) bug217.d(3): Error: integral constant must be scalar type, not typeof(4u) If the first two lines are reversed, it builds fine. --
Oct 20 2007