aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorIain Buclaw <ibuclaw@gdcproject.org>2020-06-23 22:43:27 +0200
committerIain Buclaw <ibuclaw@gdcproject.org>2020-06-25 17:02:46 +0200
commit1d19c9cd3dd99ba8885c0fc93223918399f73939 (patch)
tree78211460720b0f1dfee3e55e33fe8c053201cdc8 /gcc
parente52f5d0786fce4ef6ae5937ab33e871c59da3c99 (diff)
downloadgcc-1d19c9cd3dd99ba8885c0fc93223918399f73939.zip
gcc-1d19c9cd3dd99ba8885c0fc93223918399f73939.tar.gz
gcc-1d19c9cd3dd99ba8885c0fc93223918399f73939.tar.bz2
d: Merge upstream dmd 90450f3ef.
Fixes a regression caused by an incomplete backport of converting the Expression semantic pass to a Visitor. Reviewed-on: https://github.com/dlang/dmd/pull/11314 gcc/d/ChangeLog: PR d/95250 * dmd/MERGE: Merge upstream dmd 90450f3ef. gcc/testsuite/ChangeLog: PR d/95250 * gdc.dg/pr95250.d: New test.
Diffstat (limited to 'gcc')
-rw-r--r--gcc/d/dmd/MERGE2
-rw-r--r--gcc/d/dmd/expressionsem.c1
-rw-r--r--gcc/testsuite/gdc.dg/pr95250.d18
3 files changed, 20 insertions, 1 deletions
diff --git a/gcc/d/dmd/MERGE b/gcc/d/dmd/MERGE
index 0e48f42..0d50149 100644
--- a/gcc/d/dmd/MERGE
+++ b/gcc/d/dmd/MERGE
@@ -1,4 +1,4 @@
-5fc1806cd7dd281e944022df2e11ef6b04ee4339
+90450f3ef6ab8551b5f383d8c6190f80034dbf93
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/expressionsem.c b/gcc/d/dmd/expressionsem.c
index e3a5cb3..ac6b5bc 100644
--- a/gcc/d/dmd/expressionsem.c
+++ b/gcc/d/dmd/expressionsem.c
@@ -6883,6 +6883,7 @@ public:
if (Expression *ex = binSemanticProp(exp, sc))
{
result = ex;
+ return;
}
Expression *e = exp->op_overload(sc);
if (e)
diff --git a/gcc/testsuite/gdc.dg/pr95250.d b/gcc/testsuite/gdc.dg/pr95250.d
new file mode 100644
index 0000000..c8810c4
--- /dev/null
+++ b/gcc/testsuite/gdc.dg/pr95250.d
@@ -0,0 +1,18 @@
+// https://gcc.gnu.org/bugzilla/show_bug.cgi?id=95250
+// { dg-do compile }
+
+template Unsigned(T)
+{
+ static assert(false, "Type " ~ T.stringof ~
+ " does not have an Unsigned counterpart");
+}
+
+
+void* f95250(T)(T a, T b)
+{
+ alias UnsignedVoid = Unsigned!(T);
+ return cast(T)(cast(T)(cast(UnsignedVoid)(a-b) / 2));
+}
+
+static assert(is(typeof(f!(void*)(null, null)) == void*));
+// { dg-error "static assert \(.*\) is false" "" { target *-*-* } .-1 }