blob: 2a3ea8a99e0f1b3256f66032d30a2e561646b1c4 [file] [log] [blame]
// REQUIRED_ARGS: -o-
/***************** CatExp *******************/
/*
TEST_OUTPUT:
---
fail_compilation/nogc2.d(20): Error: cannot use operator `~` in `@nogc` function `nogc2.testCat`
fail_compilation/nogc2.d(21): Error: cannot use operator `~` in `@nogc` function `nogc2.testCat`
fail_compilation/nogc2.d(22): Error: cannot use operator `~` in `@nogc` function `nogc2.testCat`
fail_compilation/nogc2.d(24): Error: cannot use operator `~` in `@nogc` function `nogc2.testCat`
fail_compilation/nogc2.d(25): Error: cannot use operator `~` in `@nogc` function `nogc2.testCat`
fail_compilation/nogc2.d(26): Error: cannot use operator `~` in `@nogc` function `nogc2.testCat`
fail_compilation/nogc2.d(27): Error: cannot use operator `~` in `@nogc` function `nogc2.testCat`
fail_compilation/nogc2.d(28): Error: cannot use operator `~` in `@nogc` function `nogc2.testCat`
---
*/
@nogc void testCat(int[] a, string s)
{
int[] a1 = a ~ a;
int[] a2 = a ~ 1;
int[] a3 = 1 ~ a;
string s1 = s ~ s;
string s2 = s ~ "a";
string s3 = "a" ~ s;
string s4 = s ~ 'c';
string s5 = 'c' ~ s;
string s6 = "a" ~ "b"; // no error
string s7 = "a" ~ 'c'; // no error
string s8 = 'c' ~ "b"; // no error
}
/***************** CatAssignExp *******************/
/*
TEST_OUTPUT:
---
fail_compilation/nogc2.d(47): Error: cannot use operator `~=` in `@nogc` function `nogc2.testCatAssign`
fail_compilation/nogc2.d(49): Error: cannot use operator `~=` in `@nogc` function `nogc2.testCatAssign`
fail_compilation/nogc2.d(50): Error: cannot use operator `~=` in `@nogc` function `nogc2.testCatAssign`
---
*/
@nogc void testCatAssign(int[] a, string s)
{
a ~= 1;
s ~= "a";
s ~= 'c';
}
/***************** ArrayLiteralExp *******************/
@nogc int* barA();
/*
TEST_OUTPUT:
---
fail_compilation/nogc2.d(69): Error: array literal in `@nogc` function `nogc2.testArray` may cause a GC allocation
fail_compilation/nogc2.d(70): Error: array literal in `@nogc` function `nogc2.testArray` may cause a GC allocation
---
*/
@nogc void testArray()
{
enum arrLiteral = [null, null];
int* p;
auto a = [p, p, barA()];
a = arrLiteral;
}
/***************** AssocArrayLiteralExp *******************/
/*
TEST_OUTPUT:
---
fail_compilation/nogc2.d(86): Error: associative array literal in `@nogc` function `nogc2.testAssocArray` may cause a GC allocation
fail_compilation/nogc2.d(87): Error: associative array literal in `@nogc` function `nogc2.testAssocArray` may cause a GC allocation
---
*/
@nogc void testAssocArray()
{
enum aaLiteral = [10: 100];
auto aa = [1:1, 2:3, 4:5];
aa = aaLiteral;
}
/***************** IndexExp *******************/
/*
TEST_OUTPUT:
---
fail_compilation/nogc2.d(101): Error: indexing an associative array in `@nogc` function `nogc2.testIndex` may cause a GC allocation
fail_compilation/nogc2.d(102): Error: indexing an associative array in `@nogc` function `nogc2.testIndex` may cause a GC allocation
---
*/
@nogc void testIndex(int[int] aa)
{
aa[1] = 0;
int n = aa[1];
}