Bug 1160 – enums can not be forward referenced

Status
RESOLVED
Resolution
FIXED
Severity
normal
Priority
P2
Component
dmd
Product
D
Version
D1 (retired)
Platform
x86
OS
All
Creation time
2007-04-18T03:43:00Z
Last change time
2014-02-16T15:22:36Z
Keywords
rejects-valid
Assigned to
bugzilla
Creator
aarti
Blocks
340, 390

Comments

Comment #0 by aarti — 2007-04-18T03:43:20Z
//related to: http://dstress.kuehne.cn/run/forward_reference_[07-11].d //doesn't work in almost all contexts interface Test { Policy fn(); } //same for classes, unions and structs enum Policy {Default, Cached, Direct} void main() { }
Comment #1 by tomas — 2008-01-10T16:52:39Z
the simplest test case is something like this: X x; enum X { Y }; Fails to compile with 'enum is forward referenced' error. This issue came up on IRC and I decided to take a look what was going on. The issue is that the basetype cannot be resolved. A working workaround is: X x; enum X : int { Y }; This patch (against LLVMDC, might not match 100%) ... Index: dmd/declaration.c =================================================================== --- dmd/declaration.c (revision 135) +++ dmd/declaration.c (working copy) @@ -642,6 +642,7 @@ Dsymbol *parent = toParent(); FuncDeclaration *fd = parent->isFuncDeclaration(); + type->semantic(loc,sc); Type *tb = type->toBasetype(); if (tb->ty == Tvoid && !(storage_class & STClazy)) { error("voids have no value"); ... also fixes the problem. I have no idea what other problems it might introduce though... Also I doubt it will fix all the variations of this issue. I haven't looked enough at the semantics code in DMD to fix this properly. However, this seems like something that shouldn't be *that* hard to fix... Why not put in the works for Type::toBaseType to be able to run semantics? Please enlighten me (us) as to why this is implemented as it is right now!
Comment #2 by bugzilla — 2008-01-15T04:07:43Z
The patch doesn't work generally because the context (sc) for the type may be very different from the context for the enum.
Comment #3 by bugzilla — 2009-12-29T03:19:59Z
Changeset 318
Comment #4 by bugzilla — 2009-12-31T11:10:28Z
Fixed dmd 1.054 and 2.038