diff options
| author | Niko Matsakis <niko@alum.mit.edu> | 2012-05-19 05:52:01 -0700 |
|---|---|---|
| committer | Niko Matsakis <niko@alum.mit.edu> | 2012-05-24 09:52:03 -0700 |
| commit | 30b47649ea37d211ee2dec4c541e6ba1e64c31a8 (patch) | |
| tree | b6b5825a2711f7911bd64bd1e505d44253d4e256 /src/test | |
| parent | a3be0b105436118e187ea52deb89788afaf1edb5 (diff) | |
| download | rust-30b47649ea37d211ee2dec4c541e6ba1e64c31a8.tar.gz rust-30b47649ea37d211ee2dec4c541e6ba1e64c31a8.zip | |
new liveness pass to supercede last_use / initedness
Diffstat (limited to 'src/test')
82 files changed, 547 insertions, 146 deletions
diff --git a/src/test/compile-fail/and-init.rs b/src/test/compile-fail/and-init.rs deleted file mode 100644 index c053180bf43..00000000000 --- a/src/test/compile-fail/and-init.rs +++ /dev/null @@ -1,8 +0,0 @@ -// error-pattern:unsatisfied precondition constraint (for example, init(i - -fn main() { - let i: int; - - log(debug, false && { i = 5; true }); - log(debug, i); -} diff --git a/src/test/compile-fail/assign-imm-local-twice.rs b/src/test/compile-fail/assign-imm-local-twice.rs new file mode 100644 index 00000000000..13ec17e0585 --- /dev/null +++ b/src/test/compile-fail/assign-imm-local-twice.rs @@ -0,0 +1,9 @@ +fn test(cond: bool) { + let v: int; + v = 1; //! NOTE prior assignment occurs here + v = 2; //! ERROR re-assignment of immutable variable +} + +fn main() { + test(true); +} diff --git a/src/test/compile-fail/block-uninit.rs b/src/test/compile-fail/block-uninit.rs deleted file mode 100644 index 99b8346166a..00000000000 --- a/src/test/compile-fail/block-uninit.rs +++ /dev/null @@ -1,4 +0,0 @@ -// error-pattern:unsatisfied precondition constraint - -fn force(f: fn()) { f(); } -fn main() { let x: int; force(fn&() { log(error, x); }); } diff --git a/src/test/compile-fail/break-uninit.rs b/src/test/compile-fail/break-uninit.rs deleted file mode 100644 index 8babc95f0dc..00000000000 --- a/src/test/compile-fail/break-uninit.rs +++ /dev/null @@ -1,14 +0,0 @@ -// error-pattern:unsatisfied precondition - -fn foo() -> int { - let x: int; - let i: int; - - loop { i = 0; break; x = 0; } - - log(debug, x); - - ret 17; -} - -fn main() { log(debug, foo()); } diff --git a/src/test/compile-fail/break-uninit2.rs b/src/test/compile-fail/break-uninit2.rs deleted file mode 100644 index 1229e0dc0ee..00000000000 --- a/src/test/compile-fail/break-uninit2.rs +++ /dev/null @@ -1,14 +0,0 @@ -// error-pattern:unsatisfied precondition - -fn foo() -> int { - let x: int; - let i: int; - - while 1 != 2 { i = 0; break; x = 0; } - - log(debug, x); - - ret 17; -} - -fn main() { log(debug, foo()); } diff --git a/src/test/compile-fail/fn-expr-type-state.rs b/src/test/compile-fail/fn-expr-type-state.rs deleted file mode 100644 index ab3f1dd1087..00000000000 --- a/src/test/compile-fail/fn-expr-type-state.rs +++ /dev/null @@ -1,7 +0,0 @@ -// error-pattern:unsatisfied precondition - -fn main() { - // Typestate should work even in a fn@. we should reject this program. - let f = fn@() -> int { let i: int; ret i; }; - log(error, f()); -} diff --git a/src/test/compile-fail/fn-expr-typestate-2.rs b/src/test/compile-fail/fn-expr-typestate-2.rs deleted file mode 100644 index 75682c8ddf8..00000000000 --- a/src/test/compile-fail/fn-expr-typestate-2.rs +++ /dev/null @@ -1,6 +0,0 @@ -// error-pattern:unsatisfied precondition - -fn main() { - let j = fn@() -> int { let i: int; ret i; }(); - log(error, j); -} diff --git a/src/test/compile-fail/fru-typestate.rs b/src/test/compile-fail/fru-typestate.rs deleted file mode 100644 index 447f6f44dc5..00000000000 --- a/src/test/compile-fail/fru-typestate.rs +++ /dev/null @@ -1,12 +0,0 @@ -// -*- rust -*- - -// error-pattern: precondition - -type point = {x: int, y: int}; - -fn main() { - let origin: point; - - let right: point = {x: 10 with origin}; - origin = {x: 0, y: 0}; -} diff --git a/src/test/compile-fail/issue-2163.rs b/src/test/compile-fail/issue-2163.rs deleted file mode 100644 index 15b3d6d96c7..00000000000 --- a/src/test/compile-fail/issue-2163.rs +++ /dev/null @@ -1,5 +0,0 @@ -fn main(s: [str]) { - let a: [int] = []; - vec::each(a) { |x| //! ERROR in function `anon`, not all control paths - } //! ERROR see function return type of `bool` -} diff --git a/src/test/compile-fail/liveness-and-init.rs b/src/test/compile-fail/liveness-and-init.rs new file mode 100644 index 00000000000..aea30e3465c --- /dev/null +++ b/src/test/compile-fail/liveness-and-init.rs @@ -0,0 +1,6 @@ +fn main() { + let i: int; + + log(debug, false && { i = 5; true }); + log(debug, i); //! ERROR use of possibly uninitialized variable: `i` +} diff --git a/src/test/compile-fail/liveness-assign-imm-local-in-loop.rs b/src/test/compile-fail/liveness-assign-imm-local-in-loop.rs new file mode 100644 index 00000000000..a68528418e6 --- /dev/null +++ b/src/test/compile-fail/liveness-assign-imm-local-in-loop.rs @@ -0,0 +1,11 @@ +fn test(cond: bool) { + let v: int; + loop { + v = 1; //! ERROR re-assignment of immutable variable + //!^ NOTE prior assignment occurs here + } +} + +fn main() { + test(true); +} diff --git a/src/test/compile-fail/liveness-assign-imm-local-in-op-eq.rs b/src/test/compile-fail/liveness-assign-imm-local-in-op-eq.rs new file mode 100644 index 00000000000..2f880e03c74 --- /dev/null +++ b/src/test/compile-fail/liveness-assign-imm-local-in-op-eq.rs @@ -0,0 +1,9 @@ +fn test(cond: bool) { + let v: int; + v = 2; //! NOTE prior assignment occurs here + v += 1; //! ERROR re-assignment of immutable variable +} + +fn main() { + test(true); +} diff --git a/src/test/compile-fail/liveness-assign-imm-local-in-swap.rs b/src/test/compile-fail/liveness-assign-imm-local-in-swap.rs new file mode 100644 index 00000000000..c432d03bed3 --- /dev/null +++ b/src/test/compile-fail/liveness-assign-imm-local-in-swap.rs @@ -0,0 +1,18 @@ +fn test1() { + let v: int; + let mut w: int; + v = 1; //! NOTE prior assignment occurs here + w = 2; + v <-> w; //! ERROR re-assignment of immutable variable +} + +fn test2() { + let v: int; + let mut w: int; + v = 1; //! NOTE prior assignment occurs here + w = 2; + w <-> v; //! ERROR re-assignment of immutable variable +} + +fn main() { +} diff --git a/src/test/compile-fail/bad-bang-ann-2.rs b/src/test/compile-fail/liveness-bad-bang-2.rs index 8fb6a9e8737..8fb6a9e8737 100644 --- a/src/test/compile-fail/bad-bang-ann-2.rs +++ b/src/test/compile-fail/liveness-bad-bang-2.rs diff --git a/src/test/compile-fail/liveness-block-unint.rs b/src/test/compile-fail/liveness-block-unint.rs new file mode 100644 index 00000000000..698f9f7cf79 --- /dev/null +++ b/src/test/compile-fail/liveness-block-unint.rs @@ -0,0 +1,7 @@ +fn force(f: fn()) { f(); } +fn main() { + let x: int; + force(fn&() { + log(debug, x); //! ERROR capture of possibly uninitialized variable: `x` + }); +} diff --git a/src/test/compile-fail/liveness-break-uninit-2.rs b/src/test/compile-fail/liveness-break-uninit-2.rs new file mode 100644 index 00000000000..30038dbe96e --- /dev/null +++ b/src/test/compile-fail/liveness-break-uninit-2.rs @@ -0,0 +1,16 @@ +fn foo() -> int { + let x: int; + let i: int; + + while 1 != 2 { + i = 0; + break; + x = 0; //! WARNING unreachable statement + } + + log(debug, x); //! ERROR use of possibly uninitialized variable: `x` + + ret 17; +} + +fn main() { log(debug, foo()); } diff --git a/src/test/compile-fail/liveness-break-uninit.rs b/src/test/compile-fail/liveness-break-uninit.rs new file mode 100644 index 00000000000..55041daa7fb --- /dev/null +++ b/src/test/compile-fail/liveness-break-uninit.rs @@ -0,0 +1,16 @@ +fn foo() -> int { + let x: int; + let i: int; + + loop { + i = 0; + break; + x = 0; //! WARNING unreachable statement + } + + log(debug, x); //! ERROR use of possibly uninitialized variable: `x` + + ret 17; +} + +fn main() { log(debug, foo()); } diff --git a/src/test/compile-fail/block-require-return.rs b/src/test/compile-fail/liveness-closure-require-ret.rs index 6a05ccf0605..6a05ccf0605 100644 --- a/src/test/compile-fail/block-require-return.rs +++ b/src/test/compile-fail/liveness-closure-require-ret.rs diff --git a/src/test/compile-fail/liveness-ctor-access-self-with-uninit-fields.rs b/src/test/compile-fail/liveness-ctor-access-self-with-uninit-fields.rs new file mode 100644 index 00000000000..9c982292816 --- /dev/null +++ b/src/test/compile-fail/liveness-ctor-access-self-with-uninit-fields.rs @@ -0,0 +1,11 @@ +class cat { + let how_hungry : int; + fn meow() {} + new() { + self.meow(); + //!^ ERROR use of possibly uninitialized field: `self.how_hungry` + } +} + +fn main() { +} diff --git a/src/test/compile-fail/liveness-ctor-field-never-init.rs b/src/test/compile-fail/liveness-ctor-field-never-init.rs new file mode 100644 index 00000000000..b979bdd9255 --- /dev/null +++ b/src/test/compile-fail/liveness-ctor-field-never-init.rs @@ -0,0 +1,7 @@ +class cat { + let how_hungry : int; + new() {} //! ERROR field `self.how_hungry` is never initialized +} + +fn main() { +} diff --git a/src/test/compile-fail/liveness-ctor-uninit-field.rs b/src/test/compile-fail/liveness-ctor-uninit-field.rs new file mode 100644 index 00000000000..080d4678a2f --- /dev/null +++ b/src/test/compile-fail/liveness-ctor-uninit-field.rs @@ -0,0 +1,14 @@ +class cat { + let mut a: int; + let mut b: int; + let mut c: int; + + new() { + self.a = 3; + self.b = self.a; + self.a += self.c; //! ERROR use of possibly uninitialized field: `self.c` + } +} + +fn main() { +} diff --git a/src/test/compile-fail/ctor-uninit-var.rs b/src/test/compile-fail/liveness-ctor-uninit-var.rs index b6f94c11fe5..3bbccd62ae3 100644 --- a/src/test/compile-fail/ctor-uninit-var.rs +++ b/src/test/compile-fail/liveness-ctor-uninit-var.rs @@ -1,4 +1,3 @@ -// error-pattern:unsatisfied precondition class cat { priv { let mut meows : uint; @@ -13,7 +12,7 @@ class cat { new(in_x : uint, in_y : int) { let foo; self.meows = in_x + (in_y as uint); - self.how_hungry = foo; + self.how_hungry = foo; //! ERROR use of possibly uninitialized variable: `foo` } } diff --git a/src/test/compile-fail/forgot-ret.rs b/src/test/compile-fail/liveness-forgot-ret.rs index 4d78b7a7aff..4d78b7a7aff 100644 --- a/src/test/compile-fail/forgot-ret.rs +++ b/src/test/compile-fail/liveness-forgot-ret.rs diff --git a/src/test/compile-fail/liveness-if-no-else.rs b/src/test/compile-fail/liveness-if-no-else.rs new file mode 100644 index 00000000000..5cbd24a6a5b --- /dev/null +++ b/src/test/compile-fail/liveness-if-no-else.rs @@ -0,0 +1,6 @@ +fn foo(x: int) { log(debug, x); } + +fn main() { + let x: int; if 1 > 2 { x = 10; } + foo(x); //! ERROR use of possibly uninitialized variable: `x` +} diff --git a/src/test/compile-fail/use-uninit-3.rs b/src/test/compile-fail/liveness-if-with-else.rs index 2a6522ab407..dbb3e6b1645 100644 --- a/src/test/compile-fail/use-uninit-3.rs +++ b/src/test/compile-fail/liveness-if-with-else.rs @@ -1,5 +1,3 @@ -// error-pattern:unsatisfied precondition - fn foo(x: int) { log(debug, x); } fn main() { @@ -9,5 +7,5 @@ fn main() { } else { x = 10; } - foo(x); + foo(x); //! ERROR use of possibly uninitialized variable: `x` } diff --git a/src/test/compile-fail/liveness-init-in-called-fn-expr.rs b/src/test/compile-fail/liveness-init-in-called-fn-expr.rs new file mode 100644 index 00000000000..28351ceeb08 --- /dev/null +++ b/src/test/compile-fail/liveness-init-in-called-fn-expr.rs @@ -0,0 +1,7 @@ +fn main() { + let j = fn@() -> int { + let i: int; + ret i; //! ERROR use of possibly uninitialized variable: `i` + }; + j(); +} diff --git a/src/test/compile-fail/liveness-init-in-fn-expr.rs b/src/test/compile-fail/liveness-init-in-fn-expr.rs new file mode 100644 index 00000000000..8c68ba750a8 --- /dev/null +++ b/src/test/compile-fail/liveness-init-in-fn-expr.rs @@ -0,0 +1,7 @@ +fn main() { + let f = fn@() -> int { + let i: int; + ret i; //! ERROR use of possibly uninitialized variable: `i` + }; + log(error, f()); +} diff --git a/src/test/compile-fail/liveness-init-in-fru.rs b/src/test/compile-fail/liveness-init-in-fru.rs new file mode 100644 index 00000000000..1c17a2503dc --- /dev/null +++ b/src/test/compile-fail/liveness-init-in-fru.rs @@ -0,0 +1,8 @@ +// -*- rust -*- + +type point = {x: int, y: int}; + +fn main() { + let mut origin: point; + origin = {x: 10 with origin}; //! ERROR use of possibly uninitialized variable: `origin` +} diff --git a/src/test/compile-fail/liveness-init-op-equal.rs b/src/test/compile-fail/liveness-init-op-equal.rs new file mode 100644 index 00000000000..2f37dc5070f --- /dev/null +++ b/src/test/compile-fail/liveness-init-op-equal.rs @@ -0,0 +1,8 @@ +fn test(cond: bool) { + let v: int; + v += 1; //! ERROR use of possibly uninitialized variable: `v` +} + +fn main() { + test(true); +} diff --git a/src/test/compile-fail/liveness-init-plus-equal.rs b/src/test/compile-fail/liveness-init-plus-equal.rs new file mode 100644 index 00000000000..56c5b3b2717 --- /dev/null +++ b/src/test/compile-fail/liveness-init-plus-equal.rs @@ -0,0 +1,8 @@ +fn test(cond: bool) { + let mut v: int; + v = v + 1; //! ERROR use of possibly uninitialized variable: `v` +} + +fn main() { + test(true); +} diff --git a/src/test/compile-fail/liveness-issue-2163.rs b/src/test/compile-fail/liveness-issue-2163.rs new file mode 100644 index 00000000000..dea27e585ef --- /dev/null +++ b/src/test/compile-fail/liveness-issue-2163.rs @@ -0,0 +1,5 @@ +fn main(s: [str]) { + let a: [int] = []; + vec::each(a) { |x| //! ERROR not all control paths return a value + } +} diff --git a/src/test/compile-fail/missing-return2.rs b/src/test/compile-fail/liveness-missing-ret2.rs index 54d8de63014..54d8de63014 100644 --- a/src/test/compile-fail/missing-return2.rs +++ b/src/test/compile-fail/liveness-missing-ret2.rs diff --git a/src/test/compile-fail/liveness-move-from-mode.rs b/src/test/compile-fail/liveness-move-from-mode.rs new file mode 100644 index 00000000000..01483f033eb --- /dev/null +++ b/src/test/compile-fail/liveness-move-from-mode.rs @@ -0,0 +1,10 @@ +fn take(-x: int) {} + +fn main() { + + let x: int = 25; + loop { + take(x); //! ERROR use of moved variable: `x` + //!^ NOTE move of variable occurred here + } +} diff --git a/src/test/compile-fail/liveness-move-in-loop.rs b/src/test/compile-fail/liveness-move-in-loop.rs new file mode 100644 index 00000000000..81467d8a2b4 --- /dev/null +++ b/src/test/compile-fail/liveness-move-in-loop.rs @@ -0,0 +1,16 @@ +fn main() { + + let y: int = 42; + let mut x: int; + loop { + log(debug, y); + loop { + loop { + loop { + x <- y; //! ERROR use of moved variable + //!^ NOTE move of variable occurred here + } + } + } + } +} diff --git a/src/test/compile-fail/while-constraints.rs b/src/test/compile-fail/liveness-move-in-while.rs index ca8d0140108..6acbc5a9f35 100644 --- a/src/test/compile-fail/while-constraints.rs +++ b/src/test/compile-fail/liveness-move-in-while.rs @@ -1,10 +1,11 @@ -// error-pattern:unsatisfied precondition constraint (for example, init(y fn main() { let y: int = 42; - let x: int; + let mut x: int; loop { log(debug, y); while true { while true { while true { x <- y; } } } + //!^ ERROR use of moved variable: `y` + //!^^ NOTE move of variable occurred here } } diff --git a/src/test/compile-fail/liveness-or-init.rs b/src/test/compile-fail/liveness-or-init.rs new file mode 100644 index 00000000000..5912378cf42 --- /dev/null +++ b/src/test/compile-fail/liveness-or-init.rs @@ -0,0 +1,6 @@ +fn main() { + let i: int; + + log(debug, false || { i = 5; true }); + log(debug, i); //! ERROR use of possibly uninitialized variable: `i` +} diff --git a/src/test/compile-fail/liveness-return.rs b/src/test/compile-fail/liveness-return.rs new file mode 100644 index 00000000000..cee1444ca63 --- /dev/null +++ b/src/test/compile-fail/liveness-return.rs @@ -0,0 +1,6 @@ +fn f() -> int { + let x: int; + ret x; //! ERROR use of possibly uninitialized variable: `x` +} + +fn main() { f(); } diff --git a/src/test/compile-fail/liveness-swap-uninit.rs b/src/test/compile-fail/liveness-swap-uninit.rs new file mode 100644 index 00000000000..53714c1f740 --- /dev/null +++ b/src/test/compile-fail/liveness-swap-uninit.rs @@ -0,0 +1,5 @@ +fn main() { + let x = 3; + let y; + x <-> y; //! ERROR use of possibly uninitialized variable: `y` +} diff --git a/src/test/compile-fail/liveness-uninit-after-item.rs b/src/test/compile-fail/liveness-uninit-after-item.rs new file mode 100644 index 00000000000..7c619804c3c --- /dev/null +++ b/src/test/compile-fail/liveness-uninit-after-item.rs @@ -0,0 +1,6 @@ +fn main() { + let bar; + fn baz(x: int) { } + bind baz(bar); //! ERROR use of possibly uninitialized variable: `bar` +} + diff --git a/src/test/compile-fail/liveness-uninit.rs b/src/test/compile-fail/liveness-uninit.rs new file mode 100644 index 00000000000..1930a2e3352 --- /dev/null +++ b/src/test/compile-fail/liveness-uninit.rs @@ -0,0 +1,6 @@ +fn foo(x: int) { log(debug, x); } + +fn main() { + let x: int; + foo(x); //! ERROR use of possibly uninitialized variable: `x` +} diff --git a/src/test/compile-fail/liveness-use-after-move.rs b/src/test/compile-fail/liveness-use-after-move.rs new file mode 100644 index 00000000000..48d7a9a303e --- /dev/null +++ b/src/test/compile-fail/liveness-use-after-move.rs @@ -0,0 +1,5 @@ +fn main() { + let x = @5; + let y <- x; //! NOTE move of variable occurred here + log(debug, *x); //! ERROR use of moved variable: `x` +} diff --git a/src/test/compile-fail/use-after-send.rs b/src/test/compile-fail/liveness-use-after-send.rs index 4fe164878a8..63e42bee3c9 100644 --- a/src/test/compile-fail/use-after-send.rs +++ b/src/test/compile-fail/liveness-use-after-send.rs @@ -1,4 +1,3 @@ -// error-pattern:unsatisfied precondition constraint fn send<T: send>(ch: _chan<T>, -data: T) { log(debug, ch); log(debug, data); @@ -10,8 +9,8 @@ enum _chan<T> = int; // Tests that "log(debug, message);" is flagged as using // message after the send deinitializes it fn test00_start(ch: _chan<int>, message: int, count: int) { - send(ch, message); - log(debug, message); + send(ch, message); //! NOTE move of variable occurred here + log(debug, message); //! ERROR use of moved variable: `message` } fn main() { fail; } diff --git a/src/test/compile-fail/liveness-use-in-index-lvalue.rs b/src/test/compile-fail/liveness-use-in-index-lvalue.rs new file mode 100644 index 00000000000..50d0662f803 --- /dev/null +++ b/src/test/compile-fail/liveness-use-in-index-lvalue.rs @@ -0,0 +1,6 @@ +fn test() { + let w: [int]; + w[5] = 0; //! ERROR use of possibly uninitialized variable: `w` +} + +fn main() { test(); } diff --git a/src/test/compile-fail/liveness-while-break.rs b/src/test/compile-fail/liveness-while-break.rs new file mode 100644 index 00000000000..755deb31fba --- /dev/null +++ b/src/test/compile-fail/liveness-while-break.rs @@ -0,0 +1,12 @@ +fn test(cond: bool) { + let v; + while cond { + v = 3; + break; + } + #debug["%d", v]; //! ERROR use of possibly uninitialized variable: `v` +} + +fn main() { + test(true); +} diff --git a/src/test/compile-fail/liveness-while-cond.rs b/src/test/compile-fail/liveness-while-cond.rs new file mode 100644 index 00000000000..a0a90e9550c --- /dev/null +++ b/src/test/compile-fail/liveness-while-cond.rs @@ -0,0 +1,4 @@ +fn main() { + let x: bool; + while x { } //! ERROR use of possibly uninitialized variable: `x` +} diff --git a/src/test/compile-fail/liveness-while.rs b/src/test/compile-fail/liveness-while.rs new file mode 100644 index 00000000000..b69012bc3f2 --- /dev/null +++ b/src/test/compile-fail/liveness-while.rs @@ -0,0 +1,7 @@ +fn f() -> int { + let mut x: int; + while 1 == 1 { x = 10; } + ret x; //! ERROR use of possibly uninitialized variable: `x` +} + +fn main() { f(); } diff --git a/src/test/compile-fail/move-arg.rs b/src/test/compile-fail/move-arg.rs deleted file mode 100644 index 512cd44e206..00000000000 --- a/src/test/compile-fail/move-arg.rs +++ /dev/null @@ -1,4 +0,0 @@ -// error-pattern:unsatisfied precondition constraint -fn test(-foo: int) { assert (foo == 10); } - -fn main() { let x = 10; test(x); log(debug, x); } diff --git a/src/test/compile-fail/or-init.rs b/src/test/compile-fail/or-init.rs deleted file mode 100644 index 0bc339904ba..00000000000 --- a/src/test/compile-fail/or-init.rs +++ /dev/null @@ -1,8 +0,0 @@ -// error-pattern:unsatisfied precondition constraint (for example, init(i - -fn main() { - let i: int; - - log(debug, false || { i = 5; true }); - log(debug, i); -} diff --git a/src/test/compile-fail/return-uninit.rs b/src/test/compile-fail/return-uninit.rs deleted file mode 100644 index 1978ec5f420..00000000000 --- a/src/test/compile-fail/return-uninit.rs +++ /dev/null @@ -1,5 +0,0 @@ -// error-pattern: precondition constraint - -fn f() -> int { let x: int; ret x; } - -fn main() { f(); } diff --git a/src/test/compile-fail/swap-uninit.rs b/src/test/compile-fail/swap-uninit.rs deleted file mode 100644 index fbf400db08a..00000000000 --- a/src/test/compile-fail/swap-uninit.rs +++ /dev/null @@ -1,3 +0,0 @@ -// error-pattern:unsatisfied precondition - -fn main() { let x = 3; let y; x <-> y; } diff --git a/src/test/compile-fail/tstate-and-init.rs b/src/test/compile-fail/tstate-and-init.rs new file mode 100644 index 00000000000..7b254fe2e19 --- /dev/null +++ b/src/test/compile-fail/tstate-and-init.rs @@ -0,0 +1,7 @@ +pure fn is_even(i: int) -> bool { (i%2) == 0 } +fn even(i: int) : is_even(i) -> int { i } +fn main() { + let i: int = 4; + log(debug, false && { check is_even(i); true }); + even(i); //! ERROR unsatisfied precondition +} diff --git a/src/test/compile-fail/tstate-block-uninit.rs b/src/test/compile-fail/tstate-block-uninit.rs new file mode 100644 index 00000000000..3fbf812a9dc --- /dev/null +++ b/src/test/compile-fail/tstate-block-uninit.rs @@ -0,0 +1,11 @@ +pure fn is_even(i: int) -> bool { (i%2) == 0 } +fn even(i: int) : is_even(i) -> int { i } + +fn force(f: fn()) { f(); } + +fn main() { + let x: int = 4; + force(fn&() { + even(x); //! ERROR unsatisfied precondition + }); +} diff --git a/src/test/compile-fail/tstate-break-uninit-2.rs b/src/test/compile-fail/tstate-break-uninit-2.rs new file mode 100644 index 00000000000..8ea5446c809 --- /dev/null +++ b/src/test/compile-fail/tstate-break-uninit-2.rs @@ -0,0 +1,16 @@ +pure fn is_even(i: int) -> bool { (i%2) == 0 } +fn even(i: int) : is_even(i) -> int { i } + +fn foo() -> int { + let x: int = 4; + + while 1 != 2 { + break; + check is_even(x); //! WARNING unreachable statement + } + + even(x); //! ERROR unsatisfied precondition + ret 17; +} + +fn main() { log(debug, foo()); } diff --git a/src/test/compile-fail/tstate-break-uninit.rs b/src/test/compile-fail/tstate-break-uninit.rs new file mode 100644 index 00000000000..55146447b44 --- /dev/null +++ b/src/test/compile-fail/tstate-break-uninit.rs @@ -0,0 +1,16 @@ +pure fn is_even(i: int) -> bool { (i%2) == 0 } +fn even(i: int) : is_even(i) -> int { i } + +fn foo() -> int { + let x: int = 4; + + loop { + break; + check is_even(x); //! WARNING unreachable statement + } + + even(x); //! ERROR unsatisfied precondition + ret 17; +} + +fn main() { log(debug, foo()); } diff --git a/src/test/compile-fail/tstate-ctor-unsat.rs b/src/test/compile-fail/tstate-ctor-unsat.rs new file mode 100644 index 00000000000..d249865cd49 --- /dev/null +++ b/src/test/compile-fail/tstate-ctor-unsat.rs @@ -0,0 +1,25 @@ +pure fn is_even(i: int) -> bool { (i%2) == 0 } +fn even(i: int) : is_even(i) -> int { i } + +class cat { + priv { + let mut meows : uint; + } + + let how_hungry : int; + + fn eat() { + self.how_hungry -= 5; + } + + new(in_x : uint, in_y : int) { + let foo = 3; + self.meows = in_x + (in_y as uint); + self.how_hungry = even(foo); //! ERROR unsatisfied precondition + } +} + +fn main() { + let nyan : cat = cat(52u, 99); + nyan.eat(); +} diff --git a/src/test/compile-fail/tstate-fru.rs b/src/test/compile-fail/tstate-fru.rs new file mode 100644 index 00000000000..a4989d86ab4 --- /dev/null +++ b/src/test/compile-fail/tstate-fru.rs @@ -0,0 +1,13 @@ +// -*- rust -*- + +type point = {x: int, y: int}; + +pure fn test(_p: point) -> bool { true } +fn tested(p: point) : test(p) -> point { p } + +fn main() { + let origin: point; + origin = {x: 0, y: 0}; + let right: point = {x: 10 with tested(origin)}; + //!^ ERROR precondition +} diff --git a/src/test/compile-fail/tstate-if-no-else.rs b/src/test/compile-fail/tstate-if-no-else.rs new file mode 100644 index 00000000000..fbc02bf591a --- /dev/null +++ b/src/test/compile-fail/tstate-if-no-else.rs @@ -0,0 +1,10 @@ +pure fn is_even(i: int) -> bool { (i%2) == 0 } +fn even(i: int) : is_even(i) -> int { i } + +fn foo(x: int) { log(debug, x); } + +fn main() { + let x: int = 10; + if 1 > 2 { check is_even(x); } + even(x); //! ERROR unsatisfied precondition +} diff --git a/src/test/compile-fail/tstate-if-with-else.rs b/src/test/compile-fail/tstate-if-with-else.rs new file mode 100644 index 00000000000..74edb4b8d8b --- /dev/null +++ b/src/test/compile-fail/tstate-if-with-else.rs @@ -0,0 +1,14 @@ +pure fn is_even(i: int) -> bool { (i%2) == 0 } +fn even(i: int) : is_even(i) -> int { i } + +fn foo(x: int) { log(debug, x); } + +fn main() { + let x: int = 10; + if 1 > 2 { + #debug("whoops"); + } else { + check is_even(x); + } + even(x); //! ERROR unsatisfied precondition +} diff --git a/src/test/compile-fail/tstate-loop-constraints.rs b/src/test/compile-fail/tstate-loop-constraints.rs new file mode 100644 index 00000000000..34ff0753d86 --- /dev/null +++ b/src/test/compile-fail/tstate-loop-constraints.rs @@ -0,0 +1,19 @@ +pure fn is_even(i: int) -> bool { (i%2) == 0 } +fn even(i: int) : is_even(i) -> int { i } + +fn main() { + + let mut x: int = 42; + loop { + loop { + loop { + check is_even(x); + even(x); // OK + loop { + even(x); //! ERROR unsatisfied precondition + x = 11; + } + } + } + } +} diff --git a/src/test/compile-fail/tstate-or-init.rs b/src/test/compile-fail/tstate-or-init.rs new file mode 100644 index 00000000000..c26925929a6 --- /dev/null +++ b/src/test/compile-fail/tstate-or-init.rs @@ -0,0 +1,7 @@ +pure fn is_even(i: int) -> bool { (i%2) == 0 } +fn even(i: int) : is_even(i) -> int { i } +fn main() { + let i: int = 4; + log(debug, false || { check is_even(i); true }); + even(i); //! ERROR unsatisfied precondition +} diff --git a/src/test/compile-fail/tstate-return.rs b/src/test/compile-fail/tstate-return.rs new file mode 100644 index 00000000000..6d786bacd7b --- /dev/null +++ b/src/test/compile-fail/tstate-return.rs @@ -0,0 +1,9 @@ +pure fn is_even(i: int) -> bool { (i%2) == 0 } +fn even(i: int) : is_even(i) -> int { i } + +fn f() -> int { + let x: int = 4; + ret even(x); //! ERROR unsatisfied precondition +} + +fn main() { f(); } diff --git a/src/test/compile-fail/tstate-unsat-after-item.rs b/src/test/compile-fail/tstate-unsat-after-item.rs new file mode 100644 index 00000000000..b82df3a8657 --- /dev/null +++ b/src/test/compile-fail/tstate-unsat-after-item.rs @@ -0,0 +1,9 @@ +pure fn is_even(i: int) -> bool { (i%2) == 0 } +fn even(i: int) : is_even(i) -> int { i } + +fn main() { + let x = 4; + fn baz(_x: int) { } + bind baz(even(x)); //! ERROR unsatisfied precondition +} + diff --git a/src/test/compile-fail/tstate-unsat-in-called-fn-expr.rs b/src/test/compile-fail/tstate-unsat-in-called-fn-expr.rs new file mode 100644 index 00000000000..010ac92f7b0 --- /dev/null +++ b/src/test/compile-fail/tstate-unsat-in-called-fn-expr.rs @@ -0,0 +1,9 @@ +fn foo(v: [int]) : vec::is_empty(v) { #debug("%d", v[0]); } + +fn main() { + let f = fn@() { + let v = [1]; + foo(v); //! ERROR unsatisfied precondition constraint + }(); + log(error, f); +} diff --git a/src/test/compile-fail/tstate-unsat-in-fn-expr.rs b/src/test/compile-fail/tstate-unsat-in-fn-expr.rs new file mode 100644 index 00000000000..b9cd2582537 --- /dev/null +++ b/src/test/compile-fail/tstate-unsat-in-fn-expr.rs @@ -0,0 +1,9 @@ +fn foo(v: [int]) : vec::is_empty(v) { #debug("%d", v[0]); } + +fn main() { + let f = fn@() { + let v = [1]; + foo(v); //! ERROR unsatisfied precondition constraint + }; + log(error, f()); +} diff --git a/src/test/compile-fail/tstate-unsat.rs b/src/test/compile-fail/tstate-unsat.rs new file mode 100644 index 00000000000..44a3e88fdee --- /dev/null +++ b/src/test/compile-fail/tstate-unsat.rs @@ -0,0 +1,7 @@ +pure fn is_even(i: int) -> bool { (i%2) == 0 } +fn even(i: int) : is_even(i) -> int { i } + +fn main() { + let x: int = 4; + even(x); //! ERROR unsatisfied precondition +} diff --git a/src/test/compile-fail/tstate-while-break.rs b/src/test/compile-fail/tstate-while-break.rs new file mode 100644 index 00000000000..6a25929a85b --- /dev/null +++ b/src/test/compile-fail/tstate-while-break.rs @@ -0,0 +1,15 @@ +pure fn is_even(i: int) -> bool { (i%2) == 0 } +fn even(i: int) : is_even(i) -> int { i } + +fn test(cond: bool) { + let v = 4; + while cond { + check is_even(v); + break; + } + even(v); //! ERROR unsatisfied precondition +} + +fn main() { + test(true); +} diff --git a/src/test/compile-fail/tstate-while-cond.rs b/src/test/compile-fail/tstate-while-cond.rs new file mode 100644 index 00000000000..ae5436aa4e8 --- /dev/null +++ b/src/test/compile-fail/tstate-while-cond.rs @@ -0,0 +1,7 @@ +pure fn is_even(i: int) -> bool { (i%2) == 0 } +fn even(i: int) : is_even(i) -> int { i } + +fn main() { + let x: int = 4; + while even(x) != 0 { } //! ERROR unsatisfied precondition +} diff --git a/src/test/compile-fail/while-loop-pred-constraints.rs b/src/test/compile-fail/tstate-while-loop-unsat-constriants.rs index 646d2466c74..646d2466c74 100644 --- a/src/test/compile-fail/while-loop-pred-constraints.rs +++ b/src/test/compile-fail/tstate-while-loop-unsat-constriants.rs diff --git a/src/test/compile-fail/tstate-while.rs b/src/test/compile-fail/tstate-while.rs new file mode 100644 index 00000000000..6091a0237a2 --- /dev/null +++ b/src/test/compile-fail/tstate-while.rs @@ -0,0 +1,10 @@ +pure fn is_even(i: int) -> bool { (i%2) == 0 } +fn even(i: int) : is_even(i) -> int { i } + +fn f() { + let mut x: int = 10; + while 1 == 1 { x = 10; } + even(x); //! ERROR unsatisfied precondition +} + +fn main() { f(); } diff --git a/src/test/compile-fail/uninit-after-item.rs b/src/test/compile-fail/uninit-after-item.rs deleted file mode 100644 index 560c855a7e6..00000000000 --- a/src/test/compile-fail/uninit-after-item.rs +++ /dev/null @@ -1,7 +0,0 @@ -// error-pattern:unsatisfied precondition constraint (for example, init(bar -fn main() { - let bar; - fn baz(x: int) { } - bind baz(bar); -} - diff --git a/src/test/compile-fail/use-after-move.rs b/src/test/compile-fail/use-after-move.rs deleted file mode 100644 index 177ad0010be..00000000000 --- a/src/test/compile-fail/use-after-move.rs +++ /dev/null @@ -1,2 +0,0 @@ -// error-pattern:unsatisfied precondition constraint (for example, init(x -fn main() { let x = @5; let y <- x; log(debug, *x); } diff --git a/src/test/compile-fail/use-uninit-2.rs b/src/test/compile-fail/use-uninit-2.rs deleted file mode 100644 index 82946cf022a..00000000000 --- a/src/test/compile-fail/use-uninit-2.rs +++ /dev/null @@ -1,5 +0,0 @@ -// error-pattern:unsatisfied precondition - -fn foo(x: int) { log(debug, x); } - -fn main() { let x: int; if 1 > 2 { x = 10; } foo(x); } diff --git a/src/test/compile-fail/use-uninit.rs b/src/test/compile-fail/use-uninit.rs deleted file mode 100644 index 3ad93fe0a08..00000000000 --- a/src/test/compile-fail/use-uninit.rs +++ /dev/null @@ -1,5 +0,0 @@ -// error-pattern:unsatisfied precondition - -fn foo(x: int) { log(debug, x); } - -fn main() { let x: int; foo(x); } diff --git a/src/test/compile-fail/while-bypass.rs b/src/test/compile-fail/while-bypass.rs deleted file mode 100644 index 231fb299898..00000000000 --- a/src/test/compile-fail/while-bypass.rs +++ /dev/null @@ -1,5 +0,0 @@ -// error-pattern: precondition constraint - -fn f() -> int { let x: int; while 1 == 1 { x = 10; } ret x; } - -fn main() { f(); } diff --git a/src/test/compile-fail/while-expr.rs b/src/test/compile-fail/while-expr.rs deleted file mode 100644 index 5ff3adf34c3..00000000000 --- a/src/test/compile-fail/while-expr.rs +++ /dev/null @@ -1,3 +0,0 @@ -// error-pattern: precondition constraint - -fn main() { let x: bool; while x { } } diff --git a/src/test/compile-fail/while-loop-constraints.rs b/src/test/compile-fail/while-loop-constraints.rs deleted file mode 100644 index 38c1d471593..00000000000 --- a/src/test/compile-fail/while-loop-constraints.rs +++ /dev/null @@ -1,14 +0,0 @@ -// error-pattern:unsatisfied precondition constraint (for example, init(y -fn main() { - - let y: int = 42; - let x: int; - loop { - log(debug, y); - loop { - loop { - loop { x <- y; } - } - } - } -} diff --git a/src/test/compile-fail/writing-through-uninit-vec.rs b/src/test/compile-fail/writing-through-uninit-vec.rs deleted file mode 100644 index 283e925e207..00000000000 --- a/src/test/compile-fail/writing-through-uninit-vec.rs +++ /dev/null @@ -1,5 +0,0 @@ -// error-pattern:unsatisfied precondition constraint - -fn test() { let w: [int]; w[5] = 0; } - -fn main() { test(); } diff --git a/src/test/run-pass/liveness-assign-imm-local-after-loop.rs b/src/test/run-pass/liveness-assign-imm-local-after-loop.rs new file mode 100644 index 00000000000..9fbf5fb447f --- /dev/null +++ b/src/test/run-pass/liveness-assign-imm-local-after-loop.rs @@ -0,0 +1,10 @@ +fn test(cond: bool) { + let v: int; + v = 1; + loop { } // loop never terminates, so no error is reported + v = 2; +} + +fn main() { + // note: don't call test()... :) +} diff --git a/src/test/run-pass/liveness-assign-imm-local-after-ret.rs b/src/test/run-pass/liveness-assign-imm-local-after-ret.rs new file mode 100644 index 00000000000..4b1cc591713 --- /dev/null +++ b/src/test/run-pass/liveness-assign-imm-local-after-ret.rs @@ -0,0 +1,9 @@ +fn test() { + let _v: int; + _v = 1; + ret; + _v = 2; //! WARNING: unreachable statement +} + +fn main() { +} diff --git a/src/test/run-pass/liveness-loop-break.rs b/src/test/run-pass/liveness-loop-break.rs new file mode 100644 index 00000000000..58274555202 --- /dev/null +++ b/src/test/run-pass/liveness-loop-break.rs @@ -0,0 +1,14 @@ +// xfail-test --- tstate incorrectly fails this + +fn test() { + let v; + loop { + v = 3; + break; + } + #debug["%d", v]; +} + +fn main() { + test(); +} diff --git a/src/test/run-pass/liveness-move-in-loop.rs b/src/test/run-pass/liveness-move-in-loop.rs new file mode 100644 index 00000000000..a7f9547c059 --- /dev/null +++ b/src/test/run-pass/liveness-move-in-loop.rs @@ -0,0 +1,15 @@ +fn take(-x: int) -> int {x} + +fn the_loop() { + let mut list = []; + loop { + let x = 5; + if x > 3 { + list += [take(x)]; + } else { + break; + } + } +} + +fn main() {} diff --git a/src/test/run-pass/tstate-loop-break.rs b/src/test/run-pass/tstate-loop-break.rs new file mode 100644 index 00000000000..14a276b316a --- /dev/null +++ b/src/test/run-pass/tstate-loop-break.rs @@ -0,0 +1,17 @@ +// xfail-test + +pure fn is_even(i: int) -> bool { (i%2) == 0 } +fn even(i: int) : is_even(i) -> int { i } + +fn test() { + let v = 4; + loop { + check is_even(v); + break; + } + even(v); +} + +fn main() { + test(); +} |
