]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
d: Fix ICE in dmd.expressionsem.resolveLoc
authorIain Buclaw <ibuclaw@gdcproject.org>
Thu, 16 Jan 2025 16:20:06 +0000 (17:20 +0100)
committerIain Buclaw <ibuclaw@gdcproject.org>
Thu, 16 Jan 2025 18:24:18 +0000 (19:24 +0100)
This was fixed in upstream, and merged in r15-6559-g332cf038fda109.
Backport the individual fix from the upstream merge for releases/gcc-14.

PR d/116373

gcc/d/ChangeLog:

* dmd/expressionsem.d (resolveLoc): Check for null pointer before
resolving bounds of slice.

gcc/testsuite/ChangeLog:

* gdc.dg/pr116373.d: New test.

(cherry picked from commit c7dab40d7569c51ac4e62ceea05c7c049da426bb)

gcc/d/dmd/expressionsem.d
gcc/testsuite/gdc.dg/pr116373.d [new file with mode: 0644]

index 7ae7f400d1661ba52c1e6af0d6f25a72466a5038..a6425d31143966ff3b2ffa1d4fa5b0e3cdd176c6 100644 (file)
@@ -15331,8 +15331,10 @@ Expression resolveLoc(Expression exp, const ref Loc loc, Scope* sc)
     Expression visitSlice(SliceExp exp)
     {
         exp.e1 = exp.e1.resolveLoc(loc, sc);
-        exp.lwr = exp.lwr.resolveLoc(loc, sc);
-        exp.upr = exp.upr.resolveLoc(loc, sc);
+        if (exp.lwr)
+            exp.lwr = exp.lwr.resolveLoc(loc, sc);
+        if (exp.upr)
+            exp.upr = exp.upr.resolveLoc(loc, sc);
 
         return exp;
     }
diff --git a/gcc/testsuite/gdc.dg/pr116373.d b/gcc/testsuite/gdc.dg/pr116373.d
new file mode 100644 (file)
index 0000000..b58863b
--- /dev/null
@@ -0,0 +1,8 @@
+// { dg-do compile }
+int[] x;
+
+void foo (int[] y = x[]) {}
+
+void main () {
+    foo();
+}