1 // REQUIRED_ARGS: -o- 2 3 /***************** CatExp *******************/ 4 5 /* 6 TEST_OUTPUT: 7 --- 8 fail_compilation/nogc2.d(20): Error: cannot use operator `~` in `@nogc` function `nogc2.testCat` 9 fail_compilation/nogc2.d(21): Error: cannot use operator `~` in `@nogc` function `nogc2.testCat` 10 fail_compilation/nogc2.d(22): Error: cannot use operator `~` in `@nogc` function `nogc2.testCat` 11 fail_compilation/nogc2.d(24): Error: cannot use operator `~` in `@nogc` function `nogc2.testCat` 12 fail_compilation/nogc2.d(25): Error: cannot use operator `~` in `@nogc` function `nogc2.testCat` 13 fail_compilation/nogc2.d(26): Error: cannot use operator `~` in `@nogc` function `nogc2.testCat` 14 fail_compilation/nogc2.d(27): Error: cannot use operator `~` in `@nogc` function `nogc2.testCat` 15 fail_compilation/nogc2.d(28): Error: cannot use operator `~` in `@nogc` function `nogc2.testCat` 16 --- 17 */ testCat(int[]a,string s)18@nogc void testCat(int[] a, string s) 19 { 20 int[] a1 = a ~ a; 21 int[] a2 = a ~ 1; 22 int[] a3 = 1 ~ a; 23 24 string s1 = s ~ s; 25 string s2 = s ~ "a"; 26 string s3 = "a" ~ s; 27 string s4 = s ~ 'c'; 28 string s5 = 'c' ~ s; 29 30 string s6 = "a" ~ "b"; // no error 31 string s7 = "a" ~ 'c'; // no error 32 string s8 = 'c' ~ "b"; // no error 33 } 34 35 /***************** CatAssignExp *******************/ 36 37 /* 38 TEST_OUTPUT: 39 --- 40 fail_compilation/nogc2.d(47): Error: cannot use operator `~=` in `@nogc` function `nogc2.testCatAssign` 41 fail_compilation/nogc2.d(49): Error: cannot use operator `~=` in `@nogc` function `nogc2.testCatAssign` 42 fail_compilation/nogc2.d(50): Error: cannot use operator `~=` in `@nogc` function `nogc2.testCatAssign` 43 --- 44 */ testCatAssign(int[]a,string s)45@nogc void testCatAssign(int[] a, string s) 46 { 47 a ~= 1; 48 49 s ~= "a"; 50 s ~= 'c'; 51 } 52 53 /***************** ArrayLiteralExp *******************/ 54 55 @nogc int* barA(); 56 57 /* 58 TEST_OUTPUT: 59 --- 60 fail_compilation/nogc2.d(69): Error: array literal in `@nogc` function `nogc2.testArray` may cause a GC allocation 61 fail_compilation/nogc2.d(70): Error: array literal in `@nogc` function `nogc2.testArray` may cause a GC allocation 62 --- 63 */ testArray()64@nogc void testArray() 65 { 66 enum arrLiteral = [null, null]; 67 68 int* p; 69 auto a = [p, p, barA()]; 70 a = arrLiteral; 71 } 72 73 /***************** AssocArrayLiteralExp *******************/ 74 75 /* 76 TEST_OUTPUT: 77 --- 78 fail_compilation/nogc2.d(86): Error: associative array literal in `@nogc` function `nogc2.testAssocArray` may cause a GC allocation 79 fail_compilation/nogc2.d(87): Error: associative array literal in `@nogc` function `nogc2.testAssocArray` may cause a GC allocation 80 --- 81 */ testAssocArray()82@nogc void testAssocArray() 83 { 84 enum aaLiteral = [10: 100]; 85 86 auto aa = [1:1, 2:3, 4:5]; 87 aa = aaLiteral; 88 } 89 90 /***************** IndexExp *******************/ 91 92 /* 93 TEST_OUTPUT: 94 --- 95 fail_compilation/nogc2.d(101): Error: indexing an associative array in `@nogc` function `nogc2.testIndex` may cause a GC allocation 96 fail_compilation/nogc2.d(102): Error: indexing an associative array in `@nogc` function `nogc2.testIndex` may cause a GC allocation 97 --- 98 */ testIndex(int[int]aa)99@nogc void testIndex(int[int] aa) 100 { 101 aa[1] = 0; 102 int n = aa[1]; 103 } 104