re PR d/90660 (ICE in TypeQualified::resolveHelper, at d/dmd/mtype.c:6738)
authorIain Buclaw <ibuclaw@gcc.gnu.org>
Sun, 16 Jun 2019 07:47:34 +0000 (07:47 +0000)
committerIain Buclaw <ibuclaw@gcc.gnu.org>
Sun, 16 Jun 2019 07:47:34 +0000 (07:47 +0000)
PR d/90660
d/dmd: Merge upstream dmd bbc5ea66a

Fixes segmentation fault in TypeQualified::resolveHelper.

Reviewed-on: https://github.com/dlang/dmd/pull/10000

From-SVN: r272339

gcc/d/dmd/MERGE
gcc/d/dmd/mtype.c
gcc/testsuite/gdc.test/fail_compilation/fail19913.d [new file with mode: 0644]

index b81cfc64d70564b7adc9aeff6116a9cec0d079d5..99499252279f8d4657e6e4507c33f3093a458bc6 100644 (file)
@@ -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.
index d0e73967d45f1c70bb5d6f4547df506e15ec0d86..058738ec8252f2a6d41df4ab8ba53962591f7930 100644 (file)
@@ -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 (file)
index 0000000..b0f31b5
--- /dev/null
@@ -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 }
+}