Commit 6ba50b2c by Iain Buclaw

d/dmd: Merge upstream dmd 39edbe17e

Backported fix from upstream dmd 2.079 for an internal compiler error
that occurred during semantic analysis on a recursive field initializer.

Fixes https://gcc.gnu.org/PR88989

Reviewed-on: https://github.com/dlang/dmd/pull/9284

From-SVN: r268740
parent 4b23af6d
e21c07e84bd9668e1c0fc1f45e514c5fd76988e7
39edbe17e7b5c761d780c9d1d4376a06df7bf3d8
The first line of this file holds the git revision number of the last
merge done from the dlang/dmd repository.
......@@ -723,6 +723,13 @@ bool AggregateDeclaration::fill(Loc loc, Expressions *elements, bool ctorinit)
else if (vx->_init)
{
assert(!vx->_init->isVoidInitializer());
if (vx->inuse) // https://issues.dlang.org/show_bug.cgi?id=18057
{
vx->error(loc, "recursive initialization of field");
errors = true;
e = NULL;
}
else
e = vx->getConstInitializer(false);
}
else
......
......@@ -7731,3 +7731,14 @@ bool foo17407()
static assert(!foo17407);
/**************************************************/
// https://issues.dlang.org/show_bug.cgi?id=18057
// Recursive field initializer causes segfault.
struct RBNode(T)
{
RBNode!T *copy = new RBNode!T;
}
static assert(!__traits(compiles, { alias bug18057 = RBNode!int; }));
/**
TEST_OUTPUT:
---
fail_compilation/fail18057.d(16): Error: template instance RBNode!int `RBNode` is not a template declaration, it is a struct
fail_compilation/fail18057.d(13): Error: variable fail18057.RBNode.copy recursive initialization of field
---
*/
// https://issues.dlang.org/show_bug.cgi?id=18057
// Recursive field initializer causes segfault.
struct RBNode
{
RBNode *copy = new RBNode;
}
alias bug18057 = RBNode!int;
/**
TEST_OUTPUT:
---
fail_compilation/fail18057b.d(12): Error: variable `fail18057b.Recursive.field` recursive initialization of field
---
*/
// https://issues.dlang.org/show_bug.cgi?id=18057
// Recursive field initializer causes segfault.
struct Recursive
{
int field = Recursive();
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment