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