diff options
Diffstat (limited to 'gcc/testsuite/gdc.test/fail_compilation/fob2.d')
-rw-r--r-- | gcc/testsuite/gdc.test/fail_compilation/fob2.d | 178 |
1 files changed, 178 insertions, 0 deletions
diff --git a/gcc/testsuite/gdc.test/fail_compilation/fob2.d b/gcc/testsuite/gdc.test/fail_compilation/fob2.d new file mode 100644 index 00000000000..dbe8ea2f883 --- /dev/null +++ b/gcc/testsuite/gdc.test/fail_compilation/fob2.d @@ -0,0 +1,178 @@ +/* Testing Ownership/Borrowing system +REQUIRED_ARGS: -preview=dip1021 + */ + +int* malloc(); +void free(int*); + +/* TEST_OUTPUT: +--- +fail_compilation/fob2.d(110): Error: variable `fob2.foo1.b1` has undefined state and cannot be read +fail_compilation/fob2.d(103): Error: variable `fob2.foo1.p` is left dangling at return +--- +*/ + +#line 100 + +@live int foo1(int i) +{ + int* p = malloc(); + scope const(int)* b1, b2; + if (i) + b1 = p; + else + b2 = p; + *p = 3; + return *b1; +} + +/* TEST_OUTPUT: +--- +fail_compilation/fob2.d(203): Error: variable `fob2.zoo2.p` is passed as Owner more than once +fail_compilation/fob2.d(202): Error: variable `fob2.zoo2.p` is left dangling at return +--- +*/ + +#line 200 + +@live void zoo2() { + int* p = malloc(); + foo2(p, p + 1); +} + +@live void foo2( scope int* p, scope int* q ); + +/* TEST_OUTPUT: +--- +fail_compilation/fob2.d(303): Error: variable `fob2.foo3.b` is left dangling at return +--- +*/ + +#line 300 + +@live void foo3() +{ + scope int* b = malloc(); +} + +/* TEST_OUTPUT: +--- +fail_compilation/fob2.d(427): Error: variable `fob2.test43.p` is both Owner and Undefined +fail_compilation/fob2.d(429): Error: variable `fob2.test43.p` has undefined state and cannot be read +fail_compilation/fob2.d(429): Error: variable `fob2.test43.p` is not Owner, cannot consume its value +fail_compilation/fob2.d(432): Error: variable `fob2.test43.p` has undefined state and cannot be read +fail_compilation/fob2.d(432): Error: variable `fob2.test43.p` is not Owner, cannot consume its value +--- +*/ +#line 400 + + +bool f(); + +@live void test41(int* p, int i) +{ + for (; f(); ++i) + { + --i; + free(p); + p = null; + } + free(p); +} + +@live void test42(int* p, int i) +{ + for (; f(); ++i) + { + --i; + } + free(p); +} + + +@live void test43(int* p, int i) +{ + for (; f(); ++i) + { + free(p); + --i; + } + free(p); +} + +/* TEST_OUTPUT: +--- +fail_compilation/fob2.d(506): Error: variable `fob2.test51.p` has undefined state and cannot be read +fail_compilation/fob2.d(515): Error: variable `fob2.test52.p` has undefined state and cannot be read +--- +*/ + +// https://issues.dlang.org/show_bug.cgi?id=20747 + +#line 500 + +@live test51() +{ + int x; + scope p = &x; + x = 3; + *p = 4; +} + + +@live void test52() +{ + int x = 5; + auto p = &x; + auto q = &x; + *p = 3; +} + + +@live void test53() +{ + scope int x; + scope int y; + y = x; + x = 3; + y = 4; +} + +/* TEST_OUTPUT: +--- +fail_compilation/fob2.d(603): Error: variable `fob2.test6.p` is left dangling at return +--- +*/ + +#line 600 + +@live extern (C) void foo6(int, scope ...); + +@live void test6(int* p) +{ + foo6(1, p); +} + +@live extern (C) void foo6b(int, scope const ...); + +@live int* test6b(return int* p) +{ + foo6b(1, p, p); + return p; +} + +/* TEST_OUTPUT: +--- +fail_compilation/fob2.d(705): Error: variable `fob2.test7.p` is not Owner, cannot consume its value +--- +*/ + +#line 700 + +void free7(int*); + +@live void test7(scope int* p) +{ + free7(p); +} + |