1 // REQUIRED_ARGS: -o-
2 
3 /*
4 TEST_OUTPUT:
5 ---
6 fail_compilation/fail_arrayop1.d(11): Error: invalid array operation `a + a` (possible missing [])
7 ---
8 */
test2199(int[]a)9 void test2199(int[] a)  // Issue 2199 - Segfault using array operation in function call (from fail266.d)
10 {
11     test2199(a + a);
12 }
13 
14 /*
15 TEST_OUTPUT:
16 ---
17 fail_compilation/fail_arrayop1.d(29): Error: invalid array operation `-a` (possible missing [])
18 ---
19 */
fail323()20 void fail323()      // from fail323.d, maybe was a part of issue 3471 fix?
21 {
22     void foo(double[]) {}
23 
24     auto a = new double[10],
25          b = a.dup,
26          c = a.dup,
27          d = a.dup;
28 
29     foo(-a);
30     // a[] = -(b[] * (c[] + 4)) + 5 * d[]; // / 3;
31 }
32 
33 /*
34 TEST_OUTPUT:
35 ---
36 fail_compilation/fail_arrayop1.d(54): Error: invalid array operation `-a` (possible missing [])
37 fail_compilation/fail_arrayop1.d(55): Error: invalid array operation `~a` (possible missing [])
38 fail_compilation/fail_arrayop1.d(56): Error: invalid array operation `a + a` (possible missing [])
39 fail_compilation/fail_arrayop1.d(57): Error: invalid array operation `a - a` (possible missing [])
40 fail_compilation/fail_arrayop1.d(58): Error: invalid array operation `a * a` (possible missing [])
41 fail_compilation/fail_arrayop1.d(59): Error: invalid array operation `a / a` (possible missing [])
42 fail_compilation/fail_arrayop1.d(60): Error: invalid array operation `a % a` (possible missing [])
43 fail_compilation/fail_arrayop1.d(61): Error: invalid array operation `a ^^ a` (possible missing [])
44 fail_compilation/fail_arrayop1.d(62): Error: invalid array operation `a & a` (possible missing [])
45 fail_compilation/fail_arrayop1.d(63): Error: invalid array operation `a | a` (possible missing [])
46 fail_compilation/fail_arrayop1.d(64): Error: invalid array operation `a ^ a` (possible missing [])
47 ---
48 */
test3903()49 void test3903()
50 {
51     int[] a = [1, 2];
52     int[] r;
53 
54     r = -a;
55     r = ~a;
56     r = a + a;
57     r = a - a;
58     r = a * a;
59     r = a / a;
60     r = a % a;
61     r = a ^^ a;
62     r = a & a;
63     r = a | a;
64     r = a ^ a;
65 }
66 
67 /*
68 TEST_OUTPUT:
69 ---
70 fail_compilation/fail_arrayop1.d(85): Error: invalid array operation `a += a[]` (possible missing [])
71 fail_compilation/fail_arrayop1.d(86): Error: invalid array operation `a -= a[]` (possible missing [])
72 fail_compilation/fail_arrayop1.d(87): Error: invalid array operation `a *= a[]` (possible missing [])
73 fail_compilation/fail_arrayop1.d(88): Error: invalid array operation `a /= a[]` (possible missing [])
74 fail_compilation/fail_arrayop1.d(89): Error: invalid array operation `a %= a[]` (possible missing [])
75 fail_compilation/fail_arrayop1.d(90): Error: invalid array operation `a ^= a[]` (possible missing [])
76 fail_compilation/fail_arrayop1.d(91): Error: invalid array operation `a &= a[]` (possible missing [])
77 fail_compilation/fail_arrayop1.d(92): Error: invalid array operation `a |= a[]` (possible missing [])
78 fail_compilation/fail_arrayop1.d(93): Error: invalid array operation `a ^^= a[]` (possible missing [])
79 ---
80 */
test9459()81 void test9459()
82 {
83     int[] a = [1, 2, 3];
84 
85     a += a[];
86     a -= a[];
87     a *= a[];
88     a /= a[];
89     a %= a[];
90     a ^= a[];
91     a &= a[];
92     a |= a[];
93     a ^^= a[];
94 }
95 
96 /*
97 TEST_OUTPUT:
98 ---
99 fail_compilation/fail_arrayop1.d(111): Error: invalid array operation `x1[] = x2[] * x3[]` because `X` doesn't support necessary arithmetic operations
100 fail_compilation/fail_arrayop1.d(115): Error: invalid array operation `s2[] += s1[]` because `string` is not a scalar type
101 fail_compilation/fail_arrayop1.d(119): Error: invalid array operation `pa1[] *= pa2[]` for element type `int*`
102 ---
103 */
test11376()104 void test11376()
105 {
106     struct X { }
107 
108     auto x1 = [X()];
109     auto x2 = [X()];
110     auto x3 = [X()];
111     x1[] = x2[] * x3[];
112 
113     string[] s1;
114     string[] s2;
115     s2[] += s1[];
116 
117     int*[] pa1;
118     int*[] pa2;
119     pa1[] *= pa2[];
120 }
121 
122 /*
123 TEST_OUTPUT:
124 ---
125 fail_compilation/fail_arrayop1.d(131): Error: invalid array operation `a[] <<= 1` (possible missing [])
126 ---
127 */
test11566()128 void test11566()
129 {
130     int[] a;
131     a[] <<= 1;
132 }
133 
134 /*
135 TEST_OUTPUT:
136 ---
137 fail_compilation/fail_arrayop1.d(147): Error: invalid array operation `a + b` (possible missing [])
138 fail_compilation/fail_arrayop1.d(148): Error: invalid array operation `x + y` (possible missing [])
139 fail_compilation/fail_arrayop1.d(149): Error: invalid array operation `"hel" + "lo."` (possible missing [])
140 ---
141 */
test14649()142 void test14649()
143 {
144     char[] a, b, r;
145     string x, y;
146 
147     r[] = a + b;
148     r[] = x + y;
149     r[] = "hel" + "lo.";
150 }
151