mirror of
https://github.com/dlang/dmd.git
synced 2025-04-26 13:10:12 +03:00
60 lines
1.9 KiB
D
60 lines
1.9 KiB
D
/*
|
|
REQUIRED_ARGS: -preview=systemVariables
|
|
TEST_OUTPUT:
|
|
---
|
|
fail_compilation/systemvariables_struct.d(31): Error: accessing `@system` field `S.syst` is not allowed in a `@safe` function
|
|
fail_compilation/systemvariables_struct.d(32): Error: accessing `@system` field `S.syst` is not allowed in a `@safe` function
|
|
fail_compilation/systemvariables_struct.d(33): Error: accessing `@system` field `S.syst` is not allowed in a `@safe` function
|
|
fail_compilation/systemvariables_struct.d(36): Error: accessing `@system` field `S.syst` is not allowed in a `@safe` function
|
|
fail_compilation/systemvariables_struct.d(37): Error: accessing `@system` field `S.syst` is not allowed in a `@safe` function
|
|
fail_compilation/systemvariables_struct.d(38): Error: accessing `@system` field `S.syst` is not allowed in a `@safe` function
|
|
fail_compilation/systemvariables_struct.d(54): Error: accessing `@system` field `S2.syst` is not allowed in a `@safe` function
|
|
fail_compilation/systemvariables_struct.d(55): Error: accessing `@system` field `S2.syst` is not allowed in a `@safe` function
|
|
fail_compilation/systemvariables_struct.d(56): Error: accessing `@system` field `S.syst` is not allowed in a `@safe` function
|
|
fail_compilation/systemvariables_struct.d(57): Error: accessing `@system` field `S.syst` is not allowed in a `@safe` function
|
|
---
|
|
*/
|
|
|
|
// http://dlang.org/dips/1035
|
|
|
|
struct S
|
|
{
|
|
@system S* syst;
|
|
@safe S* safe;
|
|
}
|
|
|
|
void aggregate() @safe
|
|
{
|
|
S s0;
|
|
|
|
// write access
|
|
s0.syst = null;
|
|
__traits(getMember, s0, "syst") = null;
|
|
s0.tupleof[0] = null;
|
|
|
|
// read access
|
|
auto a0 = s0.syst;
|
|
auto a1 = __traits(getMember, s0, "syst");
|
|
auto a2 = s0.tupleof[0];
|
|
|
|
S s1;
|
|
s1 = s0; // allowed
|
|
}
|
|
|
|
struct S2
|
|
{
|
|
@system S syst;
|
|
@safe S safe;
|
|
}
|
|
|
|
@safe S2 gs2;
|
|
|
|
void aggregate2() @safe
|
|
{
|
|
gs2.syst.syst = null;
|
|
gs2.syst.safe = null;
|
|
gs2.safe.syst = null;
|
|
gs2.safe.syst.safe = null;
|
|
|
|
gs2.safe.safe = null; // allowed
|
|
}
|