diff --git a/src/dmd/declaration.d b/src/dmd/declaration.d index 9dd734b843..901d073dfa 100644 --- a/src/dmd/declaration.d +++ b/src/dmd/declaration.d @@ -89,15 +89,18 @@ bool modifyFieldVar(Loc loc, Scope* sc, VarDeclaration var, Expression e1) if (s) fd = s.isFuncDeclaration(); if (fd && - ((fd.isCtorDeclaration() && var.isField()) || - (fd.isStaticCtorDeclaration() && !var.isField())) && + ((var.isField() && (fd.isCtorDeclaration() || fd.isPostBlitDeclaration())) || + (!var.isField() && fd.isStaticCtorDeclaration())) && fd.toParentDecl() == var.toParent2() && (!e1 || e1.op == TOK.this_)) { bool result = true; - var.ctorinit = true; - //printf("setting ctorinit\n"); + if (!fd.isPostBlitDeclaration()) + { + var.ctorinit = true; + //printf("setting ctorinit\n"); + } if (var.isField() && sc.ctorflow.fieldinit.length && !sc.intypeof) { diff --git a/test/compilable/test11292.d b/test/compilable/test11292.d new file mode 100644 index 0000000000..44d130b8fe --- /dev/null +++ b/test/compilable/test11292.d @@ -0,0 +1,5 @@ +struct S +{ + immutable int x; + this(this) { x = 1; } +}