diff --git a/test/fail_compilation/diag8777.d b/test/fail_compilation/diag8777.d new file mode 100644 index 000000000000..f289da92a85f --- /dev/null +++ b/test/fail_compilation/diag8777.d @@ -0,0 +1,44 @@ +/* +TEST_OUTPUT: +--- +fail_compilation/diag8777.d(12): Error: constructor diag8777.Foo1.this missing initializer for immutable field x +fail_compilation/diag8777.d(12): Error: constructor diag8777.Foo1.this missing initializer for const field y +--- +*/ +class Foo1 +{ + immutable int[5] x; + const int[5] y; + this() {} +} + +/* +TEST_OUTPUT: +--- +fail_compilation/diag8777.d(25): Error: cannot modify immutable expression x +fail_compilation/diag8777.d(28): Error: cannot modify const expression y +--- +*/ +void test2() +{ + immutable int x; + x = 1; + + const int y; + y = 1; +} + +/* +TEST_OUTPUT: +--- +fail_compilation/diag8777.d(42): Error: cannot remove key from immutable associative array hashx +fail_compilation/diag8777.d(43): Error: cannot remove key from const associative array hashy +--- +*/ +immutable(int[int]) hashx; +const(int[int]) hashy; +void test3() +{ + hashx.remove(1); + hashy.remove(1); +} diff --git a/test/fail_compilation/diag8777a.d b/test/fail_compilation/diag8777a.d deleted file mode 100644 index 3b481eb52258..000000000000 --- a/test/fail_compilation/diag8777a.d +++ /dev/null @@ -1,12 +0,0 @@ -/* -TEST_OUTPUT: ---- -fail_compilation/diag8777a.d(3): Error: constructor diag8777a.Foo.this missing initializer for immutable field bar ---- -*/ - -#line 1 -class Foo { - immutable int[5] bar; - this() {} -} diff --git a/test/fail_compilation/diag8777b.d b/test/fail_compilation/diag8777b.d deleted file mode 100644 index 3c857bea837a..000000000000 --- a/test/fail_compilation/diag8777b.d +++ /dev/null @@ -1,12 +0,0 @@ -/* -TEST_OUTPUT: ---- -fail_compilation/diag8777b.d(3): Error: constructor diag8777b.Foo.this missing initializer for const field bar ---- -*/ - -#line 1 -class Foo { - const int[5] bar; - this() {} -} diff --git a/test/fail_compilation/diag8777c.d b/test/fail_compilation/diag8777c.d deleted file mode 100644 index eca43fca4361..000000000000 --- a/test/fail_compilation/diag8777c.d +++ /dev/null @@ -1,13 +0,0 @@ -/* -TEST_OUTPUT: ---- -fail_compilation/diag8777c.d(4): Error: cannot modify const expression x ---- -*/ - -#line 1 -void test() -{ - const int x; - x = 1; -} diff --git a/test/fail_compilation/diag8777d.d b/test/fail_compilation/diag8777d.d deleted file mode 100644 index d7fb2b0392c7..000000000000 --- a/test/fail_compilation/diag8777d.d +++ /dev/null @@ -1,13 +0,0 @@ -/* -TEST_OUTPUT: ---- -fail_compilation/diag8777d.d(4): Error: cannot modify immutable expression x ---- -*/ - -#line 1 -void test() -{ - immutable int x; - x = 1; -} diff --git a/test/fail_compilation/diag8777e.d b/test/fail_compilation/diag8777e.d deleted file mode 100644 index 25225b41dd05..000000000000 --- a/test/fail_compilation/diag8777e.d +++ /dev/null @@ -1,14 +0,0 @@ -/* -TEST_OUTPUT: ---- -fail_compilation/diag8777e.d(5): Error: cannot remove key from immutable associative array hash ---- -*/ - -#line 1 -immutable(int[int]) hash; - -void main() -{ - hash.remove(1); -} diff --git a/test/fail_compilation/diag8777f.d b/test/fail_compilation/diag8777f.d deleted file mode 100644 index 74130c478fe2..000000000000 --- a/test/fail_compilation/diag8777f.d +++ /dev/null @@ -1,14 +0,0 @@ -/* -TEST_OUTPUT: ---- -fail_compilation/diag8777f.d(5): Error: cannot remove key from const associative array hash ---- -*/ - -#line 1 -const(int[int]) hash; - -void main() -{ - hash.remove(1); -} diff --git a/test/fail_compilation/fail163.d b/test/fail_compilation/fail163.d index 92656cae5a2e..71f75d410303 100644 --- a/test/fail_compilation/fail163.d +++ b/test/fail_compilation/fail163.d @@ -1,14 +1,90 @@ /* TEST_OUTPUT: --- -fail_compilation/fail163.d(13): Error: cannot implicitly convert expression (q) of type const(char)[] to char[] +fail_compilation/fail163.d(11): Error: cannot implicitly convert expression (q) of type const(char)[] to char[] --- */ - -void foo() +void test1() { char[] p; const(char)[] q; - p = q; } + +/* +TEST_OUTPUT: +--- +fail_compilation/fail163.d(24): Error: cannot implicitly convert expression (p) of type const(int***) to const(int)*** +--- +*/ +void test2() +{ + const int*** p; + const(int)*** cp; + cp = p; +} + +/* +TEST_OUTPUT: +--- +fail_compilation/fail163.d(37): Error: cannot modify const expression p +--- +*/ +void test3() +{ + const(uint***) p; + const(int)*** cp; + p = cp; +} + +/* +TEST_OUTPUT: +--- +fail_compilation/fail163.d(50): Error: cannot implicitly convert expression (cp) of type const(int)***[] to const(uint***)[] +--- +*/ +void test4() +{ + const(uint***)[] p; + const(int)***[] cp; + p = cp; +} + +/* +TEST_OUTPUT: +--- +fail_compilation/fail163.d(63): Error: cannot modify const expression *p +--- +*/ +void test5() +{ + int x; + const(int)* p = &x; + *p = 3; +} + +/* +TEST_OUTPUT: +--- +fail_compilation/fail163.d(76): Error: cannot implicitly convert expression (& x) of type int* to immutable(int)* +fail_compilation/fail163.d(77): Error: cannot modify immutable expression *p +--- +*/ +void test6() +{ + int x; + immutable(int)* p = &x; + *p = 3; +} + +/* +TEST_OUTPUT: +--- +fail_compilation/fail163.d(89): Error: cannot implicitly convert expression (& x) of type const(int)* to int* +--- +*/ +void test7() +{ + const(int) x = 3; + int* p = &x; +} diff --git a/test/fail_compilation/fail164.d b/test/fail_compilation/fail164.d deleted file mode 100644 index 5efd4731bebc..000000000000 --- a/test/fail_compilation/fail164.d +++ /dev/null @@ -1,13 +0,0 @@ -/* -TEST_OUTPUT: ---- -fail_compilation/fail164.d(12): Error: cannot implicitly convert expression (p) of type const(int***) to const(int)*** ---- -*/ - -void foo() -{ - const int*** p; - const(int)*** cp; - cp = p; -} diff --git a/test/fail_compilation/fail165.d b/test/fail_compilation/fail165.d deleted file mode 100644 index 190c0c164439..000000000000 --- a/test/fail_compilation/fail165.d +++ /dev/null @@ -1,14 +0,0 @@ -/* -TEST_OUTPUT: ---- -fail_compilation/fail165.d(13): Error: cannot modify const expression p ---- -*/ - - -void foo() -{ - const(uint***) p; - const(int)*** cp; - p = cp; -} diff --git a/test/fail_compilation/fail166.d b/test/fail_compilation/fail166.d deleted file mode 100644 index 3ee149463cea..000000000000 --- a/test/fail_compilation/fail166.d +++ /dev/null @@ -1,13 +0,0 @@ -/* -TEST_OUTPUT: ---- -fail_compilation/fail166.d(12): Error: cannot implicitly convert expression (cp) of type const(int)***[] to const(uint***)[] ---- -*/ - -void foo() -{ - const(uint***)[] p; - const(int)***[] cp; - p = cp; -} diff --git a/test/fail_compilation/fail167.d b/test/fail_compilation/fail167.d deleted file mode 100644 index b99243c6e207..000000000000 --- a/test/fail_compilation/fail167.d +++ /dev/null @@ -1,13 +0,0 @@ -/* -TEST_OUTPUT: ---- -fail_compilation/fail167.d(12): Error: cannot modify const expression *p ---- -*/ - -void main() -{ - int x; - const(int)* p = &x; - *p = 3; -} diff --git a/test/fail_compilation/fail168.d b/test/fail_compilation/fail168.d deleted file mode 100644 index 04f86ae7f519..000000000000 --- a/test/fail_compilation/fail168.d +++ /dev/null @@ -1,14 +0,0 @@ -/* -TEST_OUTPUT: ---- -fail_compilation/fail168.d(12): Error: cannot implicitly convert expression (& x) of type int* to immutable(int)* -fail_compilation/fail168.d(13): Error: cannot modify immutable expression *p ---- -*/ - -void main() -{ - int x; - immutable(int)* p = &x; - *p = 3; -} diff --git a/test/fail_compilation/fail171.d b/test/fail_compilation/fail171.d deleted file mode 100644 index a305dd6b7403..000000000000 --- a/test/fail_compilation/fail171.d +++ /dev/null @@ -1,12 +0,0 @@ -/* -TEST_OUTPUT: ---- -fail_compilation/fail171.d(11): Error: cannot implicitly convert expression (& x) of type const(int)* to int* ---- -*/ - -void main() -{ - const(int) x = 3; - int* p = &x; -} diff --git a/test/fail_compilation/fail172.d b/test/fail_compilation/fail172.d index afec2480898c..229cf374fc39 100644 --- a/test/fail_compilation/fail172.d +++ b/test/fail_compilation/fail172.d @@ -1,8 +1,10 @@ /* TEST_OUTPUT: --- -fail_compilation/fail172.d(17): Error: can only initialize const member x inside constructor -fail_compilation/fail172.d(20): Error: can only initialize const member x inside constructor +fail_compilation/fail172.d(25): Error: can only initialize const member x inside constructor +fail_compilation/fail172.d(26): Error: can only initialize const member x inside constructor +fail_compilation/fail172.d(30): Error: can only initialize const member x inside constructor +fail_compilation/fail172.d(31): Error: can only initialize const member x inside constructor --- */ @@ -11,11 +13,20 @@ class C int x; } +struct S +{ + int x; +} + void main() { const(C) c1 = new C(); + const C c2 = new C(); c1.x = 3; - - const C c2 = new C(); c2.x = 3; + + const(S) s1; + const S s2; + s1.x = 3; + s2.x = 3; } diff --git a/test/fail_compilation/fail174.d b/test/fail_compilation/fail174.d deleted file mode 100644 index 52308d786074..000000000000 --- a/test/fail_compilation/fail174.d +++ /dev/null @@ -1,21 +0,0 @@ -/* -TEST_OUTPUT: ---- -fail_compilation/fail174.d(17): Error: can only initialize const member x inside constructor -fail_compilation/fail174.d(20): Error: can only initialize const member x inside constructor ---- -*/ - -struct S -{ - int x; -} - -void main() -{ - const(S) s1; - s1.x = 3; - - const S s2; - s2.x = 3; -} diff --git a/test/fail_compilation/fail176.d b/test/fail_compilation/fail176.d index 541e31ca8b13..908d08cd3aa1 100644 --- a/test/fail_compilation/fail176.d +++ b/test/fail_compilation/fail176.d @@ -1,14 +1,20 @@ /* TEST_OUTPUT: --- -fail_compilation/fail176.d(13): Error: cannot modify immutable expression b[1] +fail_compilation/fail176.d(13): Error: cannot modify immutable expression a[1] +fail_compilation/fail176.d(16): Error: cannot modify immutable expression b[1] +fail_compilation/fail176.d(19): Error: cannot modify const expression c[1] --- */ void foo() { auto a = "abc"; + a[1] = 'd'; + immutable char[3] b = "abc"; - //const char[3] b = "abc"; b[1] = 'd'; + + const char[3] c = "abc"; + c[1] = 'd'; } diff --git a/test/fail_compilation/fail66.d b/test/fail_compilation/fail66.d index 93287010d90c..dd3be3f4f141 100644 --- a/test/fail_compilation/fail66.d +++ b/test/fail_compilation/fail66.d @@ -1,15 +1,91 @@ /* TEST_OUTPUT: --- -fail_compilation/fail66.d(12): Error: constructor fail66.C.this missing initializer for const field y +fail_compilation/fail66.d(11): Error: constructor fail66.C1.this missing initializer for const field y --- */ -class C +class C1 { const int y; + this() {} +} + +/* +TEST_OUTPUT: +--- +fail_compilation/fail66.d(28): Error: can only initialize const member y inside constructor +--- +*/ +class C2 +{ + const int y; + this() { y = 7; } +} +void test2() +{ + C2 c = new C2(); + c.y = 3; +} + +/* +TEST_OUTPUT: +--- +fail_compilation/fail66.d(43): Error: can only initialize const member y inside constructor +--- +*/ +class C3 +{ + const int y; + this() { y = 7; } + void foo() + { + y = 6; + } +} + +/* +TEST_OUTPUT: +--- +fail_compilation/fail66.d(59): Error: can only initialize static const member x inside static constructor +--- +*/ +class C4 +{ + static const int x; + static this() { x = 5; } + void foo() + { + x = 4; + } +} + +/* +TEST_OUTPUT: +--- +fail_compilation/fail66.d(73): Error: can only initialize const member z5 inside constructor +--- +*/ +const int z5; +static this() { z5 = 3; } +void test5() +{ + z5 = 4; +} +/* +TEST_OUTPUT: +--- +fail_compilation/fail66.d(89): Error: can only initialize const member y inside constructor +--- +*/ +class C6 +{ + const int y; this() { + C6 c = this; + y = 7; + c.y = 8; } } diff --git a/test/fail_compilation/fail6652.d b/test/fail_compilation/fail6652.d new file mode 100644 index 000000000000..45a3f5a3fec2 --- /dev/null +++ b/test/fail_compilation/fail6652.d @@ -0,0 +1,37 @@ +// PERMUTE_ARGS: -w -dw -de -d + +/******************************************/ +// 6652 + +/* +TEST_OUTPUT: +--- +fail_compilation/fail6652.d(20): Error: cannot modify const expression i +fail_compilation/fail6652.d(25): Error: cannot modify const expression i +fail_compilation/fail6652.d(30): Error: cannot modify const expression i +fail_compilation/fail6652.d(35): Error: cannot modify const expression i +--- +*/ + +void main() +{ + foreach (const i; 0..2) + { + ++i; + } + + foreach (ref const i; 0..2) + { + ++i; + } + + foreach (const i, e; [1,2,3,4,5]) + { + ++i; + } + + foreach (ref const i, e; [1,2,3,4,5]) + { + ++i; + } +} diff --git a/test/fail_compilation/fail6652a.d b/test/fail_compilation/fail6652a.d deleted file mode 100644 index 8a7c6d4728fa..000000000000 --- a/test/fail_compilation/fail6652a.d +++ /dev/null @@ -1,25 +0,0 @@ -// PERMUTE_ARGS: -w -dw -de -d - -/******************************************/ -// 6652 - -/* -TEST_OUTPUT: ---- -fail_compilation/fail6652a.d(18): Error: cannot modify const expression i -fail_compilation/fail6652a.d(23): Error: cannot modify const expression i ---- -*/ - -void main() -{ - foreach (const i; 0..2) - { - ++i; - } - - foreach (ref const i; 0..2) - { - ++i; - } -} diff --git a/test/fail_compilation/fail6652b.d b/test/fail_compilation/fail6652b.d deleted file mode 100644 index 0357db88abe7..000000000000 --- a/test/fail_compilation/fail6652b.d +++ /dev/null @@ -1,25 +0,0 @@ -// PERMUTE_ARGS: -w -dw -de -d - -/******************************************/ -// 6652 - -/* -TEST_OUTPUT: ---- -fail_compilation/fail6652b.d(18): Error: cannot modify const expression i -fail_compilation/fail6652b.d(23): Error: cannot modify const expression i ---- -*/ - -void main() -{ - foreach (const i, e; [1,2,3,4,5]) - { - ++i; - } - - foreach (ref const i, e; [1,2,3,4,5]) - { - ++i; - } -} diff --git a/test/fail_compilation/fail67.d b/test/fail_compilation/fail67.d deleted file mode 100644 index 5ffddd6058c4..000000000000 --- a/test/fail_compilation/fail67.d +++ /dev/null @@ -1,26 +0,0 @@ -/* -TEST_OUTPUT: ---- -fail_compilation/fail67.d(22): Error: can only initialize const member y inside constructor ---- -*/ - -class C -{ - const int y; - - this() - { - y = 7; - } -} - -int main() -{ - C c = new C(); - - c.y = 3; - - return 0; -} - diff --git a/test/fail_compilation/fail68.d b/test/fail_compilation/fail68.d deleted file mode 100644 index 7ad78913c396..000000000000 --- a/test/fail_compilation/fail68.d +++ /dev/null @@ -1,21 +0,0 @@ -/* -TEST_OUTPUT: ---- -fail_compilation/fail68.d(14): Error: can only initialize const member y inside constructor ---- -*/ - -class C -{ - const int y; - - void foo() - { - y = 6; - } - - this() - { - y = 7; - } -} diff --git a/test/fail_compilation/fail69.d b/test/fail_compilation/fail69.d deleted file mode 100644 index 30a8e34b4ac7..000000000000 --- a/test/fail_compilation/fail69.d +++ /dev/null @@ -1,21 +0,0 @@ -/* -TEST_OUTPUT: ---- -fail_compilation/fail69.d(14): Error: can only initialize static const member x inside static constructor ---- -*/ - -class C -{ - static const int x; - - void foo() - { - x = 4; - } - - static this() - { - x = 5; - } -} diff --git a/test/fail_compilation/fail70.d b/test/fail_compilation/fail70.d deleted file mode 100644 index 5fa06ee1bc34..000000000000 --- a/test/fail_compilation/fail70.d +++ /dev/null @@ -1,21 +0,0 @@ -/* -TEST_OUTPUT: ---- -fail_compilation/fail70.d(17): Error: can only initialize const member z inside constructor ---- -*/ - -const int z; - -static this() -{ - z = 3; -} - -int main() -{ - z = 4; - - return 0; -} - diff --git a/test/fail_compilation/fail71.d b/test/fail_compilation/fail71.d deleted file mode 100644 index 700a0ec2b3cc..000000000000 --- a/test/fail_compilation/fail71.d +++ /dev/null @@ -1,19 +0,0 @@ -/* -TEST_OUTPUT: ---- -fail_compilation/fail71.d(17): Error: can only initialize const member y inside constructor ---- -*/ - -class C -{ - const int y; - - this() - { - C c = this; - - y = 7; - c.y = 8; - } -}