From 5a36cae275ad84cc7e623f2f5829bdad767e3f6a Mon Sep 17 00:00:00 2001 From: Iain Buclaw Date: Mon, 25 Jan 2021 13:50:55 +0100 Subject: d: Merge upstream dmd 609c3ce2d, phobos 3dd5df686 D front-end changes: - Contracts for pre- and postconditions are now implicitly "this" const, so that state can no longer be altered in these functions. - Inside a constructor scope, assigning to aggregate declaration members is done by considering the first assignment as initialization and subsequent assignments as modifications of the constructed object. For const/immutable fields the initialization is accepted in the constructor but subsequent modifications are not. However this rule did not apply when inside a constructor scope there is a call to a different constructor. This been changed so it is now an error when there's a double initialization of immutable fields inside a constructor. Phobos changes: - Don't run unit-tests for unsupported clocks in std.datetime. The phobos and phobos_shared tests now add -fversion=Linux_Pre_2639 if required. - Deprecate public extern(C) bindings for getline and getdelim in std.stdio. The correct module for bindings is core.sys.posix.stdio. Reviewed-on: https://github.com/dlang/dmd/pull/12153 https://github.com/dlang/phobos/pull/7768 gcc/d/ChangeLog: * dmd/MERGE: Merge upstream dmd 609c3ce2d. * d-compiler.cc (Compiler::loadModule): Rename to ... (Compiler::onParseModule): ... this. (Compiler::onImport): New function. * d-lang.cc (d_parse_file): Remove call to Compiler::loadModule. libphobos/ChangeLog: * src/MERGE: Merge upstream phobos 3dd5df686. * testsuite/libphobos.phobos/phobos.exp: Add compiler flag -fversion=Linux_Pre_2639 if target is linux_pre_2639. * testsuite/libphobos.phobos_shared/phobos_shared.exp: Likewise. --- gcc/d/dmd/expressionsem.c | 7 +++++++ 1 file changed, 7 insertions(+) (limited to 'gcc/d/dmd/expressionsem.c') diff --git a/gcc/d/dmd/expressionsem.c b/gcc/d/dmd/expressionsem.c index a4ff0b4..7cebd9a 100644 --- a/gcc/d/dmd/expressionsem.c +++ b/gcc/d/dmd/expressionsem.c @@ -3344,6 +3344,13 @@ public: return setError(); } + // https://issues.dlang.org/show_bug.cgi?id=18719 + // If `exp` is a call expression to another constructor + // then it means that all struct/class fields will be + // initialized after this call. + for (size_t i = 0; i < sc->fieldinit_dim; i++) + sc->fieldinit[i] |= CSXthis_ctor; + if (!sc->intypeof && !(sc->callSuper & CSXhalt)) { if (sc->noctor || sc->callSuper & CSXlabel) -- cgit v1.1