dmd/compiler/test/fail_compilation/test23145.d

49 lines
1.3 KiB
D

/* REQUIRED_ARGS: -preview=dip1000
TEST_OUTPUT:
---
fail_compilation/test23145.d(117): Error: `scope` allocation of `c` with a non-`scope` constructor is not allowed in a `@safe` function
fail_compilation/test23145.d(111): is the location of the constructor
fail_compilation/test23145.d(124): Error: `scope` allocation of `c` with a non-`scope` constructor is not allowed in a `@safe` function
fail_compilation/test23145.d(111): is the location of the constructor
fail_compilation/test23145.d(125): Error: `@safe` function `test23145.bax` cannot call `@system` function `test23145.inferred`
fail_compilation/test23145.d(131): and `scope` allocation of `c` with a non-`scope` constructor makes it fail to infer `@safe`
fail_compilation/test23145.d(129): `test23145.inferred` is declared here
---
*/
// https://issues.dlang.org/show_bug.cgi?id=23145
#line 100
class D
{
C c;
}
class C
{
D d;
int x=3;
this(int i) scope @safe @nogc;
this(D d) @safe @nogc;
}
C foo(D d) @nogc @safe
{
scope e = new C(1); // ok
scope c = new C(d); // error
return c.d.c;
}
C bax(D d) @safe
{
scope e = new C(1); // ok
scope c = new C(d); // error
inferred(d);
return c.d.c;
}
auto inferred(D d)
{
scope c = new C(d); // infer system
}