From feb0e6d041fb6b7616451a3b32aad350d2ebc338 Mon Sep 17 00:00:00 2001 From: ibuclaw Date: Sun, 16 Jun 2019 07:47:34 +0000 Subject: [PATCH] PR d/90660 d/dmd: Merge upstream dmd bbc5ea66a Fixes segmentation fault in TypeQualified::resolveHelper. Reviewed-on: https://github.com/dlang/dmd/pull/10000 git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@272339 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/d/dmd/MERGE | 2 +- gcc/d/dmd/mtype.c | 4 ++++ gcc/testsuite/gdc.test/fail_compilation/fail19913.d | 13 +++++++++++++ 3 files changed, 18 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/gdc.test/fail_compilation/fail19913.d diff --git a/gcc/d/dmd/MERGE b/gcc/d/dmd/MERGE index b81cfc64d705..99499252279f 100644 --- a/gcc/d/dmd/MERGE +++ b/gcc/d/dmd/MERGE @@ -1,4 +1,4 @@ -423758078f8fcd945815a5294806915a8a01d392 +bbc5ea66ab41ebd14abd9a0fbb9ca6ef6b2dcb14 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/mtype.c b/gcc/d/dmd/mtype.c index d0e73967d45f..058738ec8252 100644 --- a/gcc/d/dmd/mtype.c +++ b/gcc/d/dmd/mtype.c @@ -6734,6 +6734,10 @@ void TypeQualified::resolveHelper(Loc loc, Scope *sc, goto L3; if (VarDeclaration *v = s->isVarDeclaration()) { + // https://issues.dlang.org/show_bug.cgi?id=19913 + // v->type would be null if it is a forward referenced member. + if (v->type == NULL) + v->semantic(sc); if (v->storage_class & (STCconst | STCimmutable | STCmanifest) || v->type->isConst() || v->type->isImmutable()) { diff --git a/gcc/testsuite/gdc.test/fail_compilation/fail19913.d b/gcc/testsuite/gdc.test/fail_compilation/fail19913.d new file mode 100644 index 000000000000..b0f31b5aea40 --- /dev/null +++ b/gcc/testsuite/gdc.test/fail_compilation/fail19913.d @@ -0,0 +1,13 @@ +/* PERMUTE_ARGS: + * TEST_OUTPUT: +--- +fail_compilation/fail19913.d(11): Error: no property `b` for type `int` +fail_compilation/fail19913.d(11): Error: mixin `fail19913.S.b!()` is not defined +--- + */ + +struct S +{ + mixin a.b; + enum { a } +} -- 2.39.2