diff mbox series

[12,committed] d: Merge upstream dmd 88de5e369.

Message ID 20220505191245.412638-1-ibuclaw@gdcproject.org
State New
Headers show
Series [12,committed] d: Merge upstream dmd 88de5e369. | expand

Commit Message

Iain Buclaw May 5, 2022, 7:12 p.m. UTC
Hi,

This patch merges the D front-end with upstream dmd 88de5e369,
synchronizing the latest regression fixes from the stable v2.100.0
branch that were found in production and industry codebases.

D front-end changes:

    - Merge regression fixes in v2.100.0 branch.

Bootstrapped and regression tested on x86_64-linux-gnu/-m32/-mx32, and
committed to the releases/gcc-12 branch.

Regards,
Iain.

---
gcc/d/ChangeLog:

	* dmd/MERGE: Merge upstream dmd 88de5e369.
---
 gcc/d/dmd/MERGE                               |  2 +-
 gcc/d/dmd/traits.d                            |  2 +-
 gcc/d/dmd/typesem.d                           |  8 ++++++--
 gcc/testsuite/gdc.test/compilable/test23087.d |  9 +++++++++
 gcc/testsuite/gdc.test/compilable/test23089.d |  7 +++++++
 gcc/testsuite/gdc.test/runnable/test23083.d   | 16 ++++++++++++++++
 6 files changed, 40 insertions(+), 4 deletions(-)
 create mode 100644 gcc/testsuite/gdc.test/compilable/test23087.d
 create mode 100644 gcc/testsuite/gdc.test/compilable/test23089.d
 create mode 100644 gcc/testsuite/gdc.test/runnable/test23083.d
diff mbox series

Patch

diff --git a/gcc/d/dmd/MERGE b/gcc/d/dmd/MERGE
index 984e375479b..73697fba8e6 100644
--- a/gcc/d/dmd/MERGE
+++ b/gcc/d/dmd/MERGE
@@ -1,4 +1,4 @@ 
-081d61e157f0064dc93c757d61cd998d3cb5288f
+88de5e369b2c322e55174ae4f3bef5ad0c0c0930
 
 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/traits.d b/gcc/d/dmd/traits.d
index 04e1c47d16e..db77107e4ae 100644
--- a/gcc/d/dmd/traits.d
+++ b/gcc/d/dmd/traits.d
@@ -1515,7 +1515,7 @@  Expression semanticTraits(TraitsExp e, Scope* sc)
 
         if (tf)
         {
-            link = fd ? fd.linkage : tf.linkage;
+            link = fd ? fd.toAliasFunc().linkage : tf.linkage;
         }
         else
         {
diff --git a/gcc/d/dmd/typesem.d b/gcc/d/dmd/typesem.d
index f63b17752ed..5db7d43371e 100644
--- a/gcc/d/dmd/typesem.d
+++ b/gcc/d/dmd/typesem.d
@@ -3637,12 +3637,16 @@  Expression dotExp(Type mt, Scope* sc, Expression e, Identifier ident, int flag)
             }
             else
             {
+                Expression e0;
+                Expression ev = e;
+                ev = extractSideEffect(sc, "__tup", e0, ev);
+
                 const length = cast(size_t)mt.dim.toUInteger();
                 auto exps = new Expressions();
                 exps.reserve(length);
                 foreach (i; 0 .. length)
-                    exps.push(new IndexExp(e.loc, e, new IntegerExp(e.loc, i, Type.tsize_t)));
-                e = new TupleExp(e.loc, exps);
+                    exps.push(new IndexExp(e.loc, ev, new IntegerExp(e.loc, i, Type.tsize_t)));
+                e = new TupleExp(e.loc, e0, exps);
             }
         }
         else
diff --git a/gcc/testsuite/gdc.test/compilable/test23087.d b/gcc/testsuite/gdc.test/compilable/test23087.d
new file mode 100644
index 00000000000..6927ddf04df
--- /dev/null
+++ b/gcc/testsuite/gdc.test/compilable/test23087.d
@@ -0,0 +1,9 @@ 
+// https://issues.dlang.org/show_bug.cgi?id=23087
+struct S
+{
+    this(bool) {}
+    this(bool, int) {}
+}
+
+static foreach (ctor; __traits(getOverloads, S, "__ctor"))
+    static assert(__traits(getLinkage, ctor) == "D");
diff --git a/gcc/testsuite/gdc.test/compilable/test23089.d b/gcc/testsuite/gdc.test/compilable/test23089.d
new file mode 100644
index 00000000000..1bc29138573
--- /dev/null
+++ b/gcc/testsuite/gdc.test/compilable/test23089.d
@@ -0,0 +1,7 @@ 
+// https://issues.dlang.org/show_bug.cgi?id=23089
+extern(System) int i23089;
+
+extern(System):
+
+alias F23089 = void function(int);
+F23089 f23089;
diff --git a/gcc/testsuite/gdc.test/runnable/test23083.d b/gcc/testsuite/gdc.test/runnable/test23083.d
new file mode 100644
index 00000000000..41c881f30a5
--- /dev/null
+++ b/gcc/testsuite/gdc.test/runnable/test23083.d
@@ -0,0 +1,16 @@ 
+// https://issues.dlang.org/show_bug.cgi?id=23083
+int calls = 0;
+
+int[2] f()
+{
+    calls++;
+    return [123, 456];
+}
+
+void g(int a, int b) {}
+
+void main()
+{
+    g(f().tupleof);
+    assert(calls == 1);
+}