dmd/compiler/test/fail_compilation/systemvariables.d
Dennis 9b94878c85
Make safe error messages consistent (#20654)
Co-authored-by: Dennis Korpel <dennis@sarc.nl>
2025-01-08 13:46:38 +08:00

57 lines
2.3 KiB
D

/*
REQUIRED_ARGS: -preview=systemVariables
TEST_OUTPUT:
---
fail_compilation/systemvariables.d(39): Error: access `@system` variable `gInt` is not allowed in a `@safe` function
fail_compilation/systemvariables.d(29): `gInt` is declared here
fail_compilation/systemvariables.d(40): Error: access `@system` variable `gInt` is not allowed in a `@safe` function
fail_compilation/systemvariables.d(29): `gInt` is declared here
fail_compilation/systemvariables.d(41): Error: access `@system` variable `gArr` is not allowed in a `@safe` function
fail_compilation/systemvariables.d(31): `gArr` is declared here
fail_compilation/systemvariables.d(42): Error: access `@system` variable `gArr` is not allowed in a `@safe` function
fail_compilation/systemvariables.d(31): `gArr` is declared here
fail_compilation/systemvariables.d(43): Error: access `@system` variable `gInt` is not allowed in a `@safe` function
fail_compilation/systemvariables.d(29): `gInt` is declared here
fail_compilation/systemvariables.d(46): Error: access `@system` variable `lSys` is not allowed in a `@safe` function
fail_compilation/systemvariables.d(45): `lSys` is declared here
fail_compilation/systemvariables.d(47): Error: access `@system` variable `lSys` is not allowed in a `@safe` function
fail_compilation/systemvariables.d(45): `lSys` is declared here
fail_compilation/systemvariables.d(48): Error: access `@system` variable `lSys` is not allowed in a `@safe` function
fail_compilation/systemvariables.d(45): `lSys` is declared here
fail_compilation/systemvariables.d(50): Error: access `@system` variable `eInt` is not allowed in a `@safe` function
fail_compilation/systemvariables.d(30): `eInt` is declared here
---
*/
// http://dlang.org/dips/1035
@system int gInt;
@system enum int eInt = 3;
@system { int[] gArr; }
alias aliasToSys = gInt;
void increment(ref int x) @safe { x++; }
void incrementP(int* x) @safe { (*x)++; }
void basic() @safe
{
gInt = 0; // error
gInt++; // error
gArr ~= 30; // error
const c = gArr[0]; // error
aliasToSys++; // error
@system int lSys = 0;
lSys = 0; // error
increment(lSys); // error
incrementP(&lSys); // error
int a = eInt; // error
int b = typeof(eInt).max; // allowed
void f() @trusted
{
lSys = 0; // allowed
}
}