digitalmars.D.bugs - [Issue 3723] New: Regression: forward referenced enum
- d-bugmail puremagic.com (31/31) Jan 19 2010 http://d.puremagic.com/issues/show_bug.cgi?id=3723
- d-bugmail puremagic.com (13/13) Jan 19 2010 http://d.puremagic.com/issues/show_bug.cgi?id=3723
- d-bugmail puremagic.com (31/31) Jan 20 2010 http://d.puremagic.com/issues/show_bug.cgi?id=3723
- d-bugmail puremagic.com (10/10) Jan 24 2010 http://d.puremagic.com/issues/show_bug.cgi?id=3723
- d-bugmail puremagic.com (11/11) Jan 30 2010 http://d.puremagic.com/issues/show_bug.cgi?id=3723
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
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
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
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
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









d-bugmail puremagic.com 