From: Iain Buclaw Date: Thu, 16 Jan 2025 16:20:06 +0000 (+0100) Subject: d: Fix ICE in dmd.expressionsem.resolveLoc X-Git-Tag: releases/gcc-14.3.0~583 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=258d5c062719725310421d0b4f0d03110e3e88a2;p=thirdparty%2Fgcc.git d: Fix ICE in dmd.expressionsem.resolveLoc 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) --- diff --git a/gcc/d/dmd/expressionsem.d b/gcc/d/dmd/expressionsem.d index 7ae7f400d166..a6425d311439 100644 --- a/gcc/d/dmd/expressionsem.d +++ b/gcc/d/dmd/expressionsem.d @@ -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 index 000000000000..b58863bacf29 --- /dev/null +++ b/gcc/testsuite/gdc.dg/pr116373.d @@ -0,0 +1,8 @@ +// { dg-do compile } +int[] x; + +void foo (int[] y = x[]) {} + +void main () { + foo(); +}