diff --git a/src/declaration.c b/src/declaration.c index 0914ef00abe2..f027216efc34 100644 --- a/src/declaration.c +++ b/src/declaration.c @@ -1202,6 +1202,12 @@ void VarDeclaration::semantic(Scope *sc) const char *s = (storage_class & STCimmutable) ? "immutable" : "const"; fprintf(stderr, "%s: %s.%s is %s field\n", p ? p : "", ad->toPrettyChars(), toChars(), s); } + storage_class |= STCfield; +#if DMDV2 + if (tbn->ty == Tstruct && ((TypeStruct *)tbn)->sym->noDefaultCtor || + tbn->ty == Tclass && ((TypeClass *)tbn)->sym->noDefaultCtor) + aad->noDefaultCtor = TRUE; +#endif #else if (storage_class & (STCconst | STCimmutable) && init) { @@ -1212,7 +1218,6 @@ void VarDeclaration::semantic(Scope *sc) storage_class |= STCstatic; } else -#endif { storage_class |= STCfield; #if DMDV2 @@ -1221,6 +1226,7 @@ void VarDeclaration::semantic(Scope *sc) aad->noDefaultCtor = TRUE; #endif } +#endif } InterfaceDeclaration *id = parent->isInterfaceDeclaration(); diff --git a/src/expression.c b/src/expression.c index 63ba0bb2fa14..12e27db0c6cb 100644 --- a/src/expression.c +++ b/src/expression.c @@ -7785,9 +7785,7 @@ Expression *DotVarExp::semantic(Scope *sc) accessCheck(loc, sc, e1, var); VarDeclaration *v = var->isVarDeclaration(); -#if PULL93 - if (v && (v->isDataseg() || (v->storage_class & STCmanifest))) -#endif + if (!PULL93 || v && (v->isDataseg() || (v->storage_class & STCmanifest))) { Expression *e = expandVar(WANTvalue, v); if (e) diff --git a/src/mars.c b/src/mars.c index 79d0ed08a7b1..f83b52be8390 100644 --- a/src/mars.c +++ b/src/mars.c @@ -684,7 +684,7 @@ Language changes listed by -transition=id:\n\ if (strcmp(p + 12, "tls") == 0) global.params.vtls = 1; #if PULL93 - else if (strcmp(p + 12, "field") == 0) + if (strcmp(p + 12, "field") == 0) global.params.vfield = 1; #endif }