From ee4f5a04ffa272cf9c9fa4a134fc71559d0851b3 Mon Sep 17 00:00:00 2001 From: RazvanN7 Date: Fri, 24 May 2024 12:47:02 +0300 Subject: [PATCH] Fix Bugzilla Issue 24560 - dmd crash on imported function with default parameter containing new --- compiler/src/dmd/expressionsem.d | 15 +++++++++++++++ compiler/test/compilable/test24560.d | 12 ++++++++++++ 2 files changed, 27 insertions(+) create mode 100644 compiler/test/compilable/test24560.d diff --git a/compiler/src/dmd/expressionsem.d b/compiler/src/dmd/expressionsem.d index 9b6a45019b..481806d392 100644 --- a/compiler/src/dmd/expressionsem.d +++ b/compiler/src/dmd/expressionsem.d @@ -15286,6 +15286,9 @@ Expression resolveLoc(Expression exp, const ref Loc loc, Scope* sc) Expression visitStructLiteral(StructLiteralExp exp) { + if (!exp.elements) + return exp; + foreach (ref element; *exp.elements) { if (element) @@ -15304,6 +15307,9 @@ Expression resolveLoc(Expression exp, const ref Loc loc, Scope* sc) if (exp.lowering) exp.lowering = exp.lowering.resolveLoc(loc, sc); + if (!exp.arguments) + return exp; + foreach (ref element; *exp.arguments) { if (element) @@ -15315,6 +15321,9 @@ Expression resolveLoc(Expression exp, const ref Loc loc, Scope* sc) Expression visitCall(CallExp exp) { + if (!exp.arguments) + return exp; + foreach (ref element; *exp.arguments) { if (element) @@ -15328,6 +15337,9 @@ Expression resolveLoc(Expression exp, const ref Loc loc, Scope* sc) { exp.e1 = exp.e1.resolveLoc(loc, sc); + if (!exp.arguments) + return exp; + foreach (ref element; *exp.arguments) { if (element) @@ -15361,6 +15373,9 @@ Expression resolveLoc(Expression exp, const ref Loc loc, Scope* sc) if (exp.basis) exp.basis = exp.basis.resolveLoc(loc, sc); + if (!exp.elements) + return exp; + foreach (ref element; *exp.elements) { if (element) diff --git a/compiler/test/compilable/test24560.d b/compiler/test/compilable/test24560.d new file mode 100644 index 0000000000..a4a4926622 --- /dev/null +++ b/compiler/test/compilable/test24560.d @@ -0,0 +1,12 @@ +// https://issues.dlang.org/show_bug.cgi?id=24560 + +class C { } +struct S +{ + static void fun(C heur = new C) { } +} + +void main() +{ + S.fun(); +}