From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 1873) id 729163954424; Tue, 3 May 2022 17:37:17 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 729163954424 MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset="utf-8" From: Iain Buclaw To: gcc-cvs@gcc.gnu.org Subject: [gcc r12-8330] d: Merge upstream dmd 081d61e15, druntime 9c0d4f91, phobos dba1bbe27. X-Act-Checkin: gcc X-Git-Author: Iain Buclaw X-Git-Refname: refs/heads/releases/gcc-12 X-Git-Oldrev: 38f8e13027095b24ef6c432d62101fc43ccd0cde X-Git-Newrev: c0b7ecae5f33b11b6a10c9a2345281c7e1eec3f5 Message-Id: <20220503173717.729163954424@sourceware.org> Date: Tue, 3 May 2022 17:37:17 +0000 (GMT) X-BeenThere: gcc-cvs@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-cvs mailing list List-Unsubscribe: , List-Archive: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 03 May 2022 17:37:17 -0000 https://gcc.gnu.org/g:c0b7ecae5f33b11b6a10c9a2345281c7e1eec3f5 commit r12-8330-gc0b7ecae5f33b11b6a10c9a2345281c7e1eec3f5 Author: Iain Buclaw Date: Tue May 3 17:53:08 2022 +0200 d: Merge upstream dmd 081d61e15, druntime 9c0d4f91, phobos dba1bbe27. D front-end changes: - Import dmd v2.100.0-rc.1. D runtime changes: - Import druntime v2.100.0-rc.1. Phobos changes: - Import v2.100.0-rc.1. gcc/d/ChangeLog: * dmd/MERGE: Merge upstream dmd 081d61e15. * dmd/VERSION: Update version to v2.100.0-rc.1. libphobos/ChangeLog: * libdruntime/MERGE: Merge upstream druntime 9c0d4f91. * src/MERGE: Merge upstream phobos dba1bbe27. Diff: --- gcc/d/dmd/MERGE | 2 +- gcc/d/dmd/VERSION | 2 +- gcc/d/dmd/cparse.d | 10 +++++++++- gcc/d/dmd/declaration.h | 3 +++ gcc/d/dmd/dinterpret.d | 17 ++++++++++++++--- gcc/d/dmd/dmangle.d | 6 +++++- gcc/d/dmd/func.d | 18 ++++++++++++++++++ gcc/d/dmd/semantic3.d | 2 +- libphobos/libdruntime/MERGE | 2 +- libphobos/libdruntime/core/simd.d | 2 ++ libphobos/src/MERGE | 2 +- 11 files changed, 56 insertions(+), 10 deletions(-) diff --git a/gcc/d/dmd/MERGE b/gcc/d/dmd/MERGE index d18119193d4..984e375479b 100644 --- a/gcc/d/dmd/MERGE +++ b/gcc/d/dmd/MERGE @@ -1,4 +1,4 @@ -313d28b3db7523e67880ae3baf8ef28ce9abe9bd +081d61e157f0064dc93c757d61cd998d3cb5288f The first line of this file holds the git revision number of the last merge done from the dlang/dmd repository. diff --git a/gcc/d/dmd/VERSION b/gcc/d/dmd/VERSION index 2450fd55ef8..0ad60f92b8f 100644 --- a/gcc/d/dmd/VERSION +++ b/gcc/d/dmd/VERSION @@ -1 +1 @@ -v2.100.0-beta.1 +v2.100.0-rc.1 diff --git a/gcc/d/dmd/cparse.d b/gcc/d/dmd/cparse.d index 2b2046f3da3..56447869c36 100644 --- a/gcc/d/dmd/cparse.d +++ b/gcc/d/dmd/cparse.d @@ -1662,6 +1662,14 @@ final class CParser(AST) : Parser!AST return; } + if (!tspec) + { + error("no type for declarator before `%s`", token.toChars()); + panic(); + nextToken(); + return; + } + if (tspec && specifier.mod & MOD.xconst) { tspec = toConst(tspec); @@ -2498,7 +2506,7 @@ final class CParser(AST) : Parser!AST private AST.Type cparseDeclarator(DTR declarator, AST.Type t, out Identifier pident, ref Specifier specifier) { - //printf("cparseDeclarator(%d)\n", declarator); + //printf("cparseDeclarator(%d, %p)\n", declarator, t); AST.Types constTypes; // all the Types that will need `const` applied to them constTypes.setDim(0); diff --git a/gcc/d/dmd/declaration.h b/gcc/d/dmd/declaration.h index 441a966cf4d..7e51b057dc1 100644 --- a/gcc/d/dmd/declaration.h +++ b/gcc/d/dmd/declaration.h @@ -655,6 +655,7 @@ public: bool isNRVO() const; void isNRVO(bool v); bool isNaked() const; + void isNaked(bool v); bool isGenerated() const; void isGenerated(bool v); bool isIntroducing() const; @@ -664,7 +665,9 @@ public: bool hasDualContext() const; bool hasAlwaysInlines() const; bool isCrtCtor() const; + void isCrtCtor(bool v); bool isCrtDtor() const; + void isCrtDtor(bool v); virtual bool isNested() const; AggregateDeclaration *isThis(); diff --git a/gcc/d/dmd/dinterpret.d b/gcc/d/dmd/dinterpret.d index 3cfc07ab910..e96f1806982 100644 --- a/gcc/d/dmd/dinterpret.d +++ b/gcc/d/dmd/dinterpret.d @@ -674,8 +674,20 @@ private Expression interpretFunction(UnionExp* pue, FuncDeclaration fd, InterSta } } // If fell off the end of a void function, return void - if (!e && tf.next.ty == Tvoid) - e = CTFEExp.voidexp; + if (!e) + { + if (tf.next.ty == Tvoid) + e = CTFEExp.voidexp; + else + { + /* missing a return statement can happen with C functions + * https://issues.dlang.org/show_bug.cgi?id=23056 + */ + fd.error("no return value from function"); + e = CTFEExp.cantexp; + } + } + if (tf.isref && e.op == EXP.variable && e.isVarExp().var == fd.vthis) e = thisarg; if (tf.isref && fd.hasDualContext() && e.op == EXP.index) @@ -695,7 +707,6 @@ private Expression interpretFunction(UnionExp* pue, FuncDeclaration fd, InterSta } } } - assert(e !is null); // Leave the function --ctfeGlobals.callDepth; diff --git a/gcc/d/dmd/dmangle.d b/gcc/d/dmd/dmangle.d index 1f895e03af0..3d9730348f5 100644 --- a/gcc/d/dmd/dmangle.d +++ b/gcc/d/dmd/dmangle.d @@ -1335,9 +1335,13 @@ void realToMangleBuffer(OutBuffer* buf, real_t value) private extern (D) const(char)[] externallyMangledIdentifier(Declaration d) { + assert(!d.mangleOverride, "mangle overrides should have been handled earlier"); + const par = d.toParent(); //toParent() skips over mixin templates if (!par || par.isModule() || d.linkage == LINK.cpp || - (d.linkage == LINK.c && d.isCsymbol() && d.isFuncDeclaration())) + (d.linkage == LINK.c && d.isCsymbol() && + (d.isFuncDeclaration() || + (d.isVarDeclaration() && d.isDataseg() && d.storage_class & STC.extern_)))) { if (d.linkage != LINK.d && d.localNum) d.error("the same declaration cannot be in multiple scopes with non-D linkage"); diff --git a/gcc/d/dmd/func.d b/gcc/d/dmd/func.d index 8d8395188b6..2e9c2bff1e0 100644 --- a/gcc/d/dmd/func.d +++ b/gcc/d/dmd/func.d @@ -1474,6 +1474,12 @@ extern (C++) class FuncDeclaration : Declaration return !!(this.flags & FUNCFLAG.naked); } + final void isNaked(bool v) @safe pure nothrow @nogc + { + if (v) this.flags |= FUNCFLAG.naked; + else this.flags &= ~FUNCFLAG.naked; + } + final bool isGenerated() const scope @safe pure nothrow @nogc { return !!(this.flags & FUNCFLAG.generated); @@ -1520,11 +1526,23 @@ extern (C++) class FuncDeclaration : Declaration return !!(this.flags & FUNCFLAG.CRTCtor); } + final void isCrtCtor(bool v) @safe pure nothrow @nogc + { + if (v) this.flags |= FUNCFLAG.CRTCtor; + else this.flags &= ~FUNCFLAG.CRTCtor; + } + final bool isCrtDtor() const scope @safe pure nothrow @nogc { return !!(this.flags & FUNCFLAG.CRTDtor); } + final void isCrtDtor(bool v) @safe pure nothrow @nogc + { + if (v) this.flags |= FUNCFLAG.CRTDtor; + else this.flags &= ~FUNCFLAG.CRTDtor; + } + /************************************** * The function is doing something that may allocate with the GC, * so mark it as not nogc (not no-how). diff --git a/gcc/d/dmd/semantic3.d b/gcc/d/dmd/semantic3.d index 511957649f7..2e459b1857f 100644 --- a/gcc/d/dmd/semantic3.d +++ b/gcc/d/dmd/semantic3.d @@ -327,7 +327,7 @@ private extern(C++) final class Semantic3Visitor : Visitor sc2.scontinue = null; sc2.sw = null; sc2.fes = funcdecl.fes; - sc2.linkage = LINK.d; + sc2.linkage = funcdecl.isCsymbol() ? LINK.c : LINK.d; sc2.stc &= STC.flowThruFunction; sc2.visibility = Visibility(Visibility.Kind.public_); sc2.explicitVisibility = 0; diff --git a/libphobos/libdruntime/MERGE b/libphobos/libdruntime/MERGE index c94634f4770..9bab8ed6395 100644 --- a/libphobos/libdruntime/MERGE +++ b/libphobos/libdruntime/MERGE @@ -1,4 +1,4 @@ -e361d200b287a68344095f306cf5ea3a63c080e1 +9c0d4f914e0817c9ee4eafc5a45c41130aa6b981 The first line of this file holds the git revision number of the last merge done from the dlang/druntime repository. diff --git a/libphobos/libdruntime/core/simd.d b/libphobos/libdruntime/core/simd.d index 11a47118319..94b230d1493 100644 --- a/libphobos/libdruntime/core/simd.d +++ b/libphobos/libdruntime/core/simd.d @@ -480,6 +480,7 @@ version (D_SIMD) /***** * For "store" operations of the form: * op1 op= op2 + * such as MOVLPS. * Returns: * op2 * These cannot be marked as pure, as semantic() doesn't check them. @@ -487,6 +488,7 @@ version (D_SIMD) @safe void16 __simd_sto(XMM opcode, void16 op1, void16 op2); @safe void16 __simd_sto(XMM opcode, double op1, void16 op2); /// @safe void16 __simd_sto(XMM opcode, float op1, void16 op2); /// + @safe void16 __simd_sto(XMM opcode, void16 op1, long op2); /// /// unittest diff --git a/libphobos/src/MERGE b/libphobos/src/MERGE index 3218ace50a0..c51d237983d 100644 --- a/libphobos/src/MERGE +++ b/libphobos/src/MERGE @@ -1,4 +1,4 @@ -ac296f80cda437483b743f953dc69cb1271c82df +dba1bbe271a9b2d7f24edeebbc77846e29904e41 The first line of this file holds the git revision number of the last merge done from the dlang/phobos repository.