1 /*
2 TEST_OUTPUT:
3 ---
4 fail_compilation/diag10862.d(28): Error: assignment cannot be used as a condition, perhaps `==` was meant?
5 fail_compilation/diag10862.d(29): Error: assignment cannot be used as a condition, perhaps `==` was meant?
6 fail_compilation/diag10862.d(30): Error: assignment cannot be used as a condition, perhaps `==` was meant?
7 fail_compilation/diag10862.d(31): Error: assignment cannot be used as a condition, perhaps `==` was meant?
8 fail_compilation/diag10862.d(32): Error: assignment cannot be used as a condition, perhaps `==` was meant?
9 fail_compilation/diag10862.d(34): Error: assignment cannot be used as a condition, perhaps `==` was meant?
10 fail_compilation/diag10862.d(35): Error: assignment cannot be used as a condition, perhaps `==` was meant?
11 fail_compilation/diag10862.d(36): Error: assignment cannot be used as a condition, perhaps `==` was meant?
12 fail_compilation/diag10862.d(37): Error: assignment cannot be used as a condition, perhaps `==` was meant?
13 fail_compilation/diag10862.d(39): Error: assignment cannot be used as a condition, perhaps `==` was meant?
14 fail_compilation/diag10862.d(40): Error: assignment cannot be used as a condition, perhaps `==` was meant?
15 fail_compilation/diag10862.d(41): Error: assignment cannot be used as a condition, perhaps `==` was meant?
16 fail_compilation/diag10862.d(42): Error: assignment cannot be used as a condition, perhaps `==` was meant?
17 fail_compilation/diag10862.d(44): Error: assignment cannot be used as a condition, perhaps `==` was meant?
18 fail_compilation/diag10862.d(45): Error: assignment cannot be used as a condition, perhaps `==` was meant?
19 fail_compilation/diag10862.d(46): Error: assignment cannot be used as a condition, perhaps `==` was meant?
20 fail_compilation/diag10862.d(47): Error: assignment cannot be used as a condition, perhaps `==` was meant?
21 fail_compilation/diag10862.d(49): Error: undefined identifier `semanticError`
22 ---
23 */
test1()24 void test1()
25 {
26 int a, b;
27
28 if (a = b) {}
29 if ((a = b) = 0) {}
30 if ((a = b) = (a = b)) {}
31 if (a = 0, b = 0) {} // Bugzilla 15384
32 if (auto x = a = b) {} // this is error, today
33
34 while (a = b) {}
35 while ((a = b) = 0) {}
36 while ((a = b) = (a = b)) {}
37 while (a = 0, b = 0) {} // Bugzilla 15384
38
39 do {} while (a = b);
40 do {} while ((a = b) = 0);
41 do {} while ((a = b) = (a = b));
42 do {} while (a = 0, b = 0); // Bugzilla 15384
43
44 for (; a = b; ) {}
45 for (; (a = b) = 0; ) {}
46 for (; (a = b) = (a = b); ) {}
47 for (; a = 0, b = 0; ) {} // Bugzilla 15384
48
49 semanticError;
50 }
51
52 /*
53 TEST_OUTPUT:
54 ---
55 fail_compilation/diag10862.d(74): Error: assignment cannot be used as a condition, perhaps `==` was meant?
56 fail_compilation/diag10862.d(77): Error: assignment cannot be used as a condition, perhaps `==` was meant?
57 fail_compilation/diag10862.d-mixin-80(80): Error: assignment cannot be used as a condition, perhaps == was meant?
58 fail_compilation/diag10862.d-mixin-81(81): Error: assignment cannot be used as a condition, perhaps == was meant?
59 fail_compilation/diag10862.d-mixin-82(82): Error: assignment cannot be used as a condition, perhaps == was meant?
60 fail_compilation/diag10862.d-mixin-83(83): Deprecation: Using the result of a comma expression is deprecated
61 fail_compilation/diag10862.d-mixin-83(83): Error: assignment cannot be used as a condition, perhaps == was meant?
62 fail_compilation/diag10862.d-mixin-86(86): Error: a + b is not an lvalue
63 fail_compilation/diag10862.d-mixin-87(87): Error: undefined identifier `c`
64 fail_compilation/diag10862.d(89): Error: undefined identifier `semanticError`
65 ---
66 */
test2()67 void test2()
68 {
69 int a, b;
70
71 // (a + b) cannot be an assignment target.
72 // However checkAssignAsCondition specilatively rerites it to EqualExp,
73 // then the pointless error "is not an lvalue" would not happen.
74 if (a + b = a * b) {}
75
76 // The suggestion error masks "undefined identifier" error
77 if (a = undefinedIdentifier) {}
78
79 // If the condition is a mixin expression
80 if (mixin("a = b")) {}
81 if (mixin("(a = b) = 0")) {}
82 if (mixin("(a = b) = (a = b)")) {}
83 if (mixin("a = 0, b = 0")) {}
84 if (auto x = mixin("a = b")) {} // Note: no error
85
86 if (mixin("a + b = a * b")) {} // Note: "a + b is not an lvalue"
87 if (mixin("a = c")) {}
88
89 semanticError;
90 }
91