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
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 + }
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; } }
Changeset 353
fixed dmd 1.056 and 2.040
AltStyle によって変換されたページ (->オリジナル) / アドレス: モード: デフォルト 音声ブラウザ ルビ付き 配色反転 文字拡大 モバイル