www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.bugs - [Issue 3723] New: Regression: forward referenced enum

reply d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=3723

           Summary: Regression: forward referenced enum
           Product: D
           Version: 1.054
          Platform: Other
        OS/Version: Windows
            Status: NEW
          Keywords: rejects-valid
          Severity: regression
          Priority: P2
         Component: DMD
        AssignedTo: nobody puremagic.com
        ReportedBy: clugdbug yahoo.com.au



This code worked on 1.053, fails to compile on 1.054, and on D2.
I suspect this was caused by the fix to bug 3611.
-----
FwdEnum this_fails;

enum :int
{
        E1 =  2
}

enum FwdEnum: int
{
        E2 =  E1
}
-----
bug.d(10): Error: undefined identifier E1

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
Jan 19 2010
next sibling parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=3723




The regression is caused by this addition to Type *TypeEnum::toBasetype().
Knowing this doesn't necessarily help in fixing the problem, though.

Type *TypeEnum::toBasetype()
{
+    if (sym->scope)
+    {
+    sym->semantic(NULL);    // attempt to resolve forward reference
+    }

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
Jan 19 2010
prev sibling next sibling parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=3723


Don <clugdbug yahoo.com.au> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
           Keywords|                            |patch



I've fixed this by changing the code in mtype.c, line 5984:

Type *TypeEnum::toBasetype()
{
    if (sym->scope)
    {
-    sym->semantic(NULL);    // attempt to resolve forward reference
+    sym->trySemantic(NULL);    // attempt to resolve forward reference
    }

and adding this code to enum.c:

void EnumDeclaration::trySemantic(Scope *sc)
{
    unsigned errors = global.errors;
    global.gag++;
    DsymbolTable *savetable = symtab;
    semantic(sc);
    global.gag--;
    if (errors != global.errors)
    {   
    global.errors = errors;
    symtab = savetable;
    }
}

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
Jan 20 2010
prev sibling next sibling parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=3723


Walter Bright <bugzilla digitalmars.com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |bugzilla digitalmars.com



15:02:43 PST ---
Changeset 353

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
Jan 24 2010
prev sibling parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=3723


Walter Bright <bugzilla digitalmars.com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|NEW                         |RESOLVED
         Resolution|                            |FIXED



22:42:12 PST ---
fixed dmd 1.056 and 2.040

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
Jan 30 2010